remap源码
㈠ 銆怉utoware銆戦厤缃闀绁炴縺鍏夐浄杈缁slidar-c16骞跺畬鎴愮偣浜戣仛绫绘娴
锲犱负灏忚溅鐢ㄧ殑婵鍏夐浄杈炬槸闀绁濒slidar-c16锛岃孉utoware榛樿ゆ敮鎸佺殑鏄痸elodyne锛屽洜姝ら渶瑕佷慨鏀筶slidar-c16镄勬簮镰侀厤缃锛屾潵瀹屾垚瀵笰utoware镄勯傞厤銆
棣栧厛闇瑕佸皢lslidar-c16杩炴帴濂界数婧愶纴骞堕噰鐢ㄧ绣缁灭鍙h繛鎺ュ埌涓绘満涓婏纴鍏蜂綋閰岖疆鍒癠buntu镄凴OS鐜澧冨彲浠ュ弬钥冩垜涔嫔墠鍐栾繃镄勫彟涓涓绗旇帮细 闀绁炴縺鍏夐浄杈缁slidar-c16镄勯┍锷ㄥ畨瑁呬笌ros涓媟viz镣逛簯鏄剧ず
鍓嶅线lslidar-c16镄勭洰褰曚笅src涓璴slidar_c16_decoder涓嬬殑launch鏂囦欢澶癸纴淇鏀瑰叾涓镄刲slidar_c16.launch鏂囦欢锛屽皢鍏朵腑镄勫师鍏坒rame_id镄勫尖渓aser_link钬濅慨鏀逛负autoware涓鑳界敤镄剉elodyne锛 <param name="frame_id" value="velodyne"/> 锛屽啀澧炲姞涓涓 <remap from="lslidar_point_cloud" to="/points_raw" /> 鐢ㄤ簬Autoware鎺ユ敹镄勭偣浜戣瘽棰/points_raw锛堟敞镒忎笉瑕佸皯浜唖锛
镓揿紑鍙充笅瑙掔殑rviz锛屽苟涓斿姞杞藉垰镓崭慨鏀硅繃镄刲slidar_c16镄刲aunch鏂囦欢锛 /home/clark/Workspace/catkin_ws_lslidar/src/lslidar_C16/lslidar_c16_decoder/launch 銆
鍙浠ョ湅鍒板乏涓婅扜lobal Options涓镄凢ixed Frame榛樿よ剧疆鎴愪简velodyne锛屽彸渚ф樉绀哄嚭婵鍏夐浄杈缁slidar-c16镄勬壂鎻忔暟鎹銆
㈡ bootloader源代码Snds.S解析
大哥这个有意思吗?你是学BOOTLODE的吗?这个只是对寄存器或者变量的设置
S3C4510B的特殊功能寄存器: 系统管理器
ARM7_SYSCFG EQU (ASIC_BASE+0x0000) 系统配置寄存器
ARM7_CLKCON EQU (ASIC_BASE+0x3000) 时钟控制寄存器
ARM7_EXTACON0 EQU (ASIC_BASE+0x3008) 外部I/O时序寄存器1
ARM7_EXTACON1 EQU (ASIC_BASE+0x300c) 外部I/O时序寄存器2
ARM7_EXTDBWTH EQU (ASIC_BASE+0x3010) 分组数据总线的宽度设置寄存器
ARM7_ROMCON0 EQU (ASIC_BASE+0x3014) ROM/ARAM/FLASH组0控制寄存器
ARM7_ROMCON1 EQU (ASIC_BASE+0x3018) ROM/ARAM/FLASH组1控制寄存器
ARM7_ROMCON2 EQU (ASIC_BASE+0x301c) ROM/ARAM/FLASH组2控制寄存器
ARM7_ROMCON3 EQU (ASIC_BASE+0x3020) ROM/ARAM/FLASH组3控制寄存器
ARM7_ROMCON4 EQU (ASIC_BASE+0x3024) ROM/ARAM/FLASH组4控制寄存器
ARM7_ROMCON5 EQU (ASIC_BASE+0x3028) ROM/ARAM/FLASH组5控制寄存器
ARM7_DRAMCON0 EQU (ASIC_BASE+0x302c) DRAM组0控制寄存器
ARM7_DRAMCON1 EQU (ASIC_BASE+0x3030) DRAM组1控制寄存器v
ARM7_DRAMCON2 EQU (ASIC_BASE+0x3034) DRAM组2控制寄存器
ARM7_DRAMCON3 EQU (ASIC_BASE+0x3038) DRAM组3控制寄存器
ARM7_REFEXTCON EQU (ASIC_BASE+0x303c) 刷新与外部I/O控制寄存器
中断 控制器
ARM7_INTMODE EQU (ASIC_BASE+0x4000) 中断模式寄存器
ARM7_INTPEND EQU (ASIC_BASE+0x4004) 中断悬挂寄存器
ARM7_INTMASK EQU (ASIC_BASE+0x4008) 中断屏蔽寄存器
ARM7_INTOFFSET EQU (ASIC_BASE+0x4024) 中断偏移地址寄存器
ARM7_INTPENDTST EQU (ASIC_BASE+0x402c)
ARM7_INTPRI0 EQU (ASIC_BASE+0x400C) 中断优先级寄存器0
ARM7_INTPRI1 EQU (ASIC_BASE+0x4010) ..
ARM7_INTPRI2 EQU (ASIC_BASE+0x4014) ..
ARM7_INTPRI3 EQU (ASIC_BASE+0x4018) ..
ARM7_INTPRI4 EQU (ASIC_BASE+0x401C) ..
ARM7_INTPRI5 EQU (ASIC_BASE+0x4020) 中断优先级寄存器5
ARM7_INTOSET_FIQ EQU (ASIC_BASE+0x4030) FIQ中断偏移量寄存器
ARM7_INTOSET_IRQ EQU (ASIC_BASE+0x4034) IRQ中断偏移量寄存器
I/O口
ARM7_IOPMOD EQU (ASIC_BASE+0x5000) I/O口模式寄存器
ARM7_IOPCON EQU (ASIC_BASE+0x5004) I/O口控制寄存器
ARM7_IOPDATA EQU (ASIC_BASE+0x5008) I/O口数据寄存器
ARM7_IICCON EQU (ASIC_BASE+0xf000) IIC总线控制状态寄存器
ARM7_IICBUF EQU (ASIC_BASE+0xf004) IIC总线移位缓冲寄存器
ARM7_IICPS EQU (ASIC_BASE+0xf008) IIC总线预分频寄存器
ARM7_IICCNT EQU (ASIC_BASE+0xf00c) IIC总线预分频计数寄存器
rEXTDBWTH EQU 0x00003001 分组数据总线的宽度设置寄存器
rROMCON0 EQU 0x02000060 ROM/ARAM/FLASH组0控制寄存器
rROMCON1 EQU 0x60 ROM/ARAM/FLASH组1控制寄存器
rROMCON2 EQU 0x60 ROM/ARAM/FLASH组2控制寄存器
rROMCON3 EQU 0x60 ROM/ARAM/FLASH组3控制寄存器
rROMCON4 EQU 0x60 ROM/ARAM/FLASH组4控制寄存器
rROMCON5 EQU 0x60 ROM/ARAM/FLASH组5控制寄存器
rSDRAMCON0 EQU 0x12008380 下面的几个没有查到,应该是你自己定义的
rSDRAMCON1 EQU 0x00
rSDRAMCON2 EQU 0x00
rSDRAMCON3 EQU 0x00
rSREFEXTCON EQU 0xCE278360
rEXTDBWTH_R EQU 0x00003001
rROMCON0_R EQU 0x12040060
rROMCON1_R EQU 0x60
rROMCON2_R EQU 0x60
rROMCON3_R EQU 0x60
rROMCON4_R EQU 0x60
rROMCON5_R EQU 0x60
rSDRAMCON0_R EQU 0x10000380
rSDRAMCON1_R EQU 0x00
rSDRAMCON2_R EQU 0x00
rSDRAMCON3_R EQU 0x00
rSREFEXTCON_R EQU 0xCE278360
自己多想想看看,其实没有什么,只是一个一个代号赋值问题,寄存器,很重的
㈢ C#服务端,Android客户端 开发IM,服务端怎么弄,有没有开源的框架
C#开源项目(国外的还是很多) 一、Ajax框架 Ajax.NET Professional
(AjaxPro)是最先把AJAX技术在微软.NET环境下的实现的AJAX框架之一。它在客户端脚本之上创建代理类来调用服务器端的方法。
MagicAjax.NET是一款在ASP.NET下创建Web页面提供AJAX技术的框架。它使开发人员很容易把AJAX整合到他们的页面而不需要替换ASP.NET控件或自己写javascript脚本代码。
Anthem.NET是为ASP.NET开发环境提供的开源AJAX工具包,它可以运行于ASP.NET 1.1和2.0。
二、工作流(workflow)
Workflow.Net是使用微软.Net技术基于wmfc标准的创建工作流引擎。
NetBPM是JBpm移植到.net平台下的一款开源工作流软件。NetBpm可以很容易和.Net应用程序集成在一起,可以创建,执行和管理工作流程序。 Bpm
Tool支持将业务模型转换成软件模型。业务开发人员可以使用模型驱动的方法设计,实现,执行和跟踪业务流程。因此开发人员能够更容易的关注业务逻辑的变化。
其实微软自己的WPF做WorkFlow也很厉害。
三、文本编辑 FCKeditor是一款功能强大的开源在线文本编辑器(DHTML
editor),它使你在web上可以使用类似微软Word 的桌面文本编辑器的许多强大功能。它是轻量级且不必在客户端进行任何方式的安装。 FreeTextBox
是一个基于 Internet Explorer 中 MSHTML 技术的 ASP.NET 开源服务器控件。这是一款优秀的自由软件(Free
Software),我们可以轻松地将其嵌入到 Web Forms 中实现 HTML 内容的在线编辑,在新闻发布、博客写作、论坛社区等多种 Web
系统中都会有用途。 VietPad是一个功能完整的跨平台的Java/.NET的Vietnamese
Unicode开源文本编辑器。支持打开,编辑,打印,转换,排序,和保存基于文本的Unicode格式的Vietnamese文件。
NetSpell是一款.NET框架下的开源拼写检查引擎。 PPC_edit是一款应用在Pocket PC上的开源文本编辑器,它支持TXT, RTF, HTML,
WordML, DocBook 和 ZIP格式的文件,屏幕上会显示国际标准的软键盘。
四、博客(Blog)
NovaShare是一款Blog引擎,它使你创建基于交互式的web的新闻和论坛网站,很像WonkoSlice或Slashdot。管理员可以发布文章和发起投票,浏览者可以创建用户帐号,发表议论等等。
dasBlog是从BlogX 网上日志引擎发展而来。像Trackback ,Pingback
一样增加许多附加的特征,有完整的Blogger/MovableType
API支持,API注释,完整的Radio-style模板定制,支持Mail-To-Weblog/POP3的附件和内嵌图片,基于WEB的
DHTML,OPML,配置的编辑器。 DotText是一个被使用了数百个blogs的强劲的blog引擎。这是一个N-tiered应用的例子。
tBlogger是一个C#开发的完整的blog网站程序,使用XML配置。
Blog现在可以使用MVC的其他开源项目来构建,这些项目在codeplex上有很多,其中微软自己的就有OXite。
五、系统构建
.NETZ是一款免费开源工具,它可以压缩和打包微软 .NET 框架可执行文件(EXE,
DLL)以使他们更小。更小的可执行文件占用的磁盘空间较少且因为读取文件时对磁盘的访问较少而使读取数度更快。它和PE(portable
executable)打包工具不一样,.NETZ是使用 C# 编写的存粹的 .NET 解决方案。.NETZ可以用来打包几乎每一种 .NET
支持的语言编写的程序。.NETZ支持 .NET EXE 和 非共享(non-shared)的 DLL
文件。压缩过的程序能以相同的方式解压缩这些对最终用户是透明的。 NAntContrib为NAnt提供定制任务的工具。
Prebuild是XML驱动的一款跨平台pre-build工具,使开发人员很容易就可以为IDE和.NET开发工具生成项目或构建文件。它支持 Visual
Studio .NET 2002, 2003, 2005, SharpDevelop, MonoDevelop 和 NAnt。
BusyBeeBuilder是.NET平台下功能强大,易于使用,可扩展的开源构建自动操作工具。 Draco.NET 是 Windows
服务应用程序。它的设计使其容易持续的集成新特性。Draco.NET监视你的源代码储存库。当探测到你的项目有变化时自动重新创建项目并把包含变化列表的创建结果发送到你的Email。
Build Studio为软件的自动构件处理提供了一套完整的解决方案。 CruiseControl.NET是.NET平台下的一款整合服务器。
NAnt类似Apache项目下的Ant,是.Net下的开源构建工具。适用在自动编译.NET应用的场合,如.NET项目的每日构建(nightly
build)。
说老实话,我并不认为系统构建工具的作用真的有那么强大,如果你真的计划做一个很大的项目,且持续开发时间很长,那么你可以使用上面的系统构建工具。
五、图表制作
ZedGraph是C#编写的.NET类库,提供了用户控件和web控件。它可以创建2D的线性图、条形图和饼图。它功能完整且有详细的功能自定义,不过
使用默认的选项就足够好用了。一款类似 PieChart, StackBar, LineChart的C#开源图表组件。
NPlot是一款.NET下的开源图表类库.它值得称道的地方是优雅且灵活的API设计.NPlot包含了Windows Form控件,
ASP.NET控件和一个创建Bitmap图片的类。还有一个可用的GTK#控件。 XSCharting是C#开发的图表组件,提供了多种多样的图表选项。
DaveChart是一个免费的DotNet类库。 NChart 提供了很多值得应用在商业,教育等多个领域的2 D图表。
微软自己已经提供了一个chat绘制控件,也就是原来的nat,如果那个可以满足你的要求,那么完全没有必要使用上面的。但是如果你需要研究画图,作自己定义的chat,那么这些开源的项目将对你有很大的帮助。
六、聊天系统
Dot Net Chat
server是基于DotNet框架开发的聊天服务器和客户端项目。说老实话,我对这个很感兴趣,有时间,要瞧瞧它的代码是咋实现的。
七、内容管理系统(CMS)
Ludico是C#编写的居于ASP.NET
2.0的Portal/CMS系统。它的模块化设计是你可以按照你希望的使用或开发网站功能。它里面有高级的用户管理,一个所见即所的(WYSIWYG)的编辑器等。
mojoPortal是一款C#开发的面相对象网站框架,它可以运行于Windows的ASP.NET 和GNU/linux 或Mac OS X的Mono的平台上。
Cuyahoga是C#开发的灵活的CMS / Portal 解决方案。它可以运行于Microsoft .NET 和Mono 平台,支持SQL Server,
PostgreSQL或MySQL作为底层数据库。 Umbraco是一款在.net平台下C#开发的开源内容管理系统,该系统效率,灵活,用户界面都不错。 Kodai
CMS是.NET平台下的一款功能齐全的内容管理系统。 Rainbow项目是一款使用Microsoft’’s
ASP.NET和C#技术开发的有丰富功能的开源内容管理系统。 NkCMS是使用ASP.net和Sql server 2000开发的内容管理系统。
Amplefile是一款内容管理系统,是.Net环境下的windows应用程序,使用了.Net remoting.
Go.Kryo是一个用ASP.NET(C#).NET 实现的简单的内容管理系统,后台数据库使用Microsoft SQL Server 。 ndCMS是
ASP.net
(C#)下的一个内容管理系统。它提供了用户管理,文件管理,一个WYSIWYG编辑器,模板管理,拼写检查和内置的http压缩。ndCMS的目标是提供一个简单而快速的方式部署.Net站点以节省你的时间和金钱。
这些开源的CMS我试用了几个,说真的,拿来研究可以,要真的实施,估计很难。
九、论坛系统
YetAnotherForum可以作为ASP.NET开发的网站的论坛或是留言板。它使用MSSQL作为底层数据库。
十、安装制作
izfree是一套套免费的工具用于帮助创建使用Microsoft”’’s Windows
Installer 技术的安装程序。使用izfree你可以为你的应用程序制作强劲的安装程序。
Windows Installer XML
(WiX)可以重XML源文件创建Windows程序安装包的工具集。它支持命令行方式,开发人员可以把结合它来创建MSI和MSM安装包一个可以和商业软件安装产品相比的开源打包工具。
一般的需求试用VS
自带的就可以了,更复杂的需要用到InstallShield,这样看起来开源的就没啥意义了。
十一、IoC容器
Spring.net是从java的Spring
Framework移植过来的。java的Spring包含了许多功能和特性,在当前的Spring.net都有提供。Spring.net最初发布的版本包含了一个很有特色的IoC容器。
Castle是一组应用开发的工具,内含一个简单的IoC容器。
StructureMap是.NET环境下的一个轻量级依赖注入工具,StructureMap也是一个灵活的、可扩展的通用“插件”机制的.NE
我用过StrucutureMap,但是给我的感觉是,试用这个似乎没多发帮助。
十二、网络客户端
.NET FTP Client是C#编写的开源类库。
.NET Telnet是微软.NET
Framework下的C#开发的开源telnet类库。它的灵感来至Java Telnet Application。
metro这个项目是C#编写的类库,它提供了一套丰富的类使开发IP version 4, TCP,
UDP and ICMP等工作更容易。它包含了有很有用的工具如包嗅探器,网络分析工具例如路由跟踪,ping等。
LJ.NET是LiveJournal站点的客户端。它为LJ在线日志服务提供了简单而强大的用户接口。
NET VNC Viewer 是一款完全用C#开发的开源VNC观察器。它兼容Smartphones,
Pocket PC和Windows的电脑(.NET CF or .NET Framework)。它比起其它观察器的优点是可以在Pocket
PC上全屏显示而且可以旋转屏幕。
GVDownloader允许你从google videos, metacafe, putfile,
youtube, break.com 和更多的地方快速下载内含的视频和多媒体。它的包含一个强劲IE插件和位于你系统托盘的独立程序。
DotNetOpenMail能够使你在微软.net框架开发的asp.net,
WinForm应用程序发送Email。它是C#编写的开源组件,它不需要使用System.Web.Mail类库就可以容易的创建带附件HTML和
Plain-text的Email。程序员不需要知道很多相关的细节就可以使用不同的字符集或不同的MINE编码来创建
multipart/alternative,multipart/related和multipart/mixed的MIME消息。
DotMSN是一款独立的开源类库,它不需要和官方的MSN Messenger交互,因此不必安装MSN
Messenger就可以使用DotMSN和MSN
Messenger服务通信.DotMSN是C#编写的,所以.NET环境支持的语言都能够使用.DotMSN类库使用简单而且实现方便。它灵活,坚固,
轻量级利于整合到任何应用系统.使用DotMSN的应用系统能实现从创建消息机器人到自定义客户端等各种不同的功能.如果你的应用程序需要和
Messenger服务通信,DotMSN是一个不错的工具.
SharpSSH使用C#实现了SSH2协议,它支持SSH, SCP 和 SFTP.
OpenPOP.NET一组和POP Servers通信的.NET类库。
IceChat是为连接多样的IRC Servers设计的Internet Relay Chat
Client。
lphant是为edonkey/emule开发的开源客户端程序。
.NET FTP Client C#开发的类库。
OpenSmtp.net 是 C# 开发的开源SMTP组件。它不依赖.NET Framework
的System.Web.Mail 包中的类。允许开发人员使用不同于MS SMTP的SMTP 服务器且提供了web
service而可以通过HTTP发送email。
这里面有几个值得推荐,例如DotMsn这个,在某些场合就很有用处。
㈣ apache traffic server镐庝箞閰岖疆webui
涓 浠嬬粛
Apache Traffic Server锛圆TS鎴朤S锛夋槸涓涓楂樻ц兘镄勚佹ā鍧楀寲镄 HTTP 浠g悊鍜岀紦瀛樻湇锷″櫒銆俆raffic Server 链鍒濇槸 Inktomi 鍏鍙哥殑鍟嗕笟浜у搧锛岃ュ叕鍙稿湪 2003 骞磋 Yahoo 鏀惰喘锛屼箣钖 Traffic Server 涓鐩村湪 Yahoo 鍐呴儴浣跨敤闀胯揪 4 骞达纴鐩村埌 2009 骞 8 链 Yahoo 钖 Apache 杞浠跺熀閲戜细锛圆SF锛夎础鐚浜嗘簮浠g爜锛屽苟浜 2010 骞 4 链堟垚涓轰简 ASF 镄勯《绾ч”鐩锛圱op-Level Project锛夈 Apache Traffic Server 鐜板湪鏄涓涓寮婧愰”鐩锛屽紑鍙戣瑷涓篊++銆
Traffic Server 镄勫紑鍙戝洟阒熸浘缁忕敱 Chuck Neerdaels 棰嗗硷纴浠栦篃鏄 Harvest 椤圭洰镄勬棭链熷垱濮嬩汉涔嬩竴锛孒arvest 椤圭洰钖庢潵鍙戝𪾢涓哄崄鍒嗘祦琛岀殑 Squid 椤圭洰锛汱eif Hedstrom 鐩存帴绠$悊镌鐜板湪镄 Traffic Server 寮鍙戝洟阒熴傜洰鍓 Chuck Neerdaels 鍜 Leif Hedstrom閮藉凡锷犵洘鐭ュ悕 CDN 链嶅姟鎻愪緵鍟 Akamai銆
HTTP 浠g悊链嶅姟鍣ㄦ槸 HTTP 链嶅姟鍣ㄧ殑涓绉嶅疄鐜帮纴澶勪簬瀹㈡埛绔锛堜竴鑸涓烘祻瑙埚櫒锛変笌鍙︿竴涓 HTTP 链嶅姟鍣ㄤ箣闂达纸阃氩父鎸囨簮链嶅姟鍣锛孙rigin Server锛夈侣TTP 浠g悊阃氩父鍒嗕负姝e悜浠g悊銆佸弽钖戜唬鐞嗗拰阃忔槑浠g悊锛屾垜浠涓昏佸叧娉ㄧ殑鏄鍙嶅悜浠g悊锛圧everse Proxy锛岃佷笅锲撅级鍙嶅悜浠g悊链嶅姟鍣ㄦ牴鎹鏄庣‘閰岖疆镄勬椠灏勮勫垯𨱒ュ勭悊鐢ㄦ埛璇锋眰銆傚弽钖戜唬鐞嗘湇锷″櫒阃氩父浼氲剧疆涓涓杈冨ぇ镄勭紦瀛桦尯锛屾湇锷″櫒澶勭悊璇锋眰镄勫悓镞跺皢璇锋眰镄勫唴瀹圭紦瀛桦湪链嶅姟鍣ㄦ湰鍦帮纴褰扑笅娆$敤鎴疯锋眰钖屼竴涓瀵硅薄镞讹纴链嶅姟鍣ㄥ彲鐩存帴浠庣紦瀛桦尯閲屽彇鍑哄硅薄锛岃屼笉鐢ㄥ幓婧愭湇锷″櫒铡诲彇锛岃捣鍒颁简锷犻熺殑鏁堟灉銆傚彟澶栵纴閰岖疆鍙嶅悜浠g悊镄勬椠灏勮勫垯涔熻兘瀹炵幇璐熻浇鍧囱镄勫姛鑳姐傞櫎浜 Traffic Server锛屽父瑙佺殑寮婧愪唬鐞嗘湇锷″櫒杩樻湁 Squid锛孷arnish锛孨ginx锛孒AProxy銆
Apache <wbr>Traffic <wbr>Server <wbr>绠浠
Traffic Server 鍦 Yahoo 鍐呴儴浣跨敤浜呜秴杩 4 骞达纴涓昏佺敤浜 CDN 链嶅姟锛孋DN 鐢ㄤ簬鍒嗗彂鐗瑰畾镄 HTTP 鍐呭癸纴阃氩父鏄闱欐佺殑鍐呭瑰傚浘鐗囥丣avaScript銆丆SS銆备笅闱㈡槸Traffic Server 鍦 Yahoo CDN 搴旂敤镄勪竴浜涙儏鍐碉细
瓒呰繃 4 骞寸殑浣跨敤涓锛岀紦瀛树腑娌℃湁鍑虹幇宸茬煡镄勬暟鎹鎹熷潖锛坉ata corruption锛夛绂
浣滀负鍙嶅悜浠g悊锛屾湇锷″櫒鏂逛究閮ㄧ讲鍜岀$悊锛屽苟涓斿ぇ閮ㄥ垎閰岖疆镄勬洿鏀瑰彲鐩存帴鍦ㄧ嚎涓婃湇锷″櫒瀹屾垚锛岃屼笉鐢ㄩ吨钖链嶅姟锛
鍦ㄩ珮骞跺彂𨱍呭喌涓嬫墿灞曡坛濂斤纴鏀鎸 HTTP/1.1 鍗忚鐗规э纴濡 SSL銆并eep-Alive锛
鍦ㄤ笘鐣岃寖锲村唴閮ㄧ讲浜呜秴杩 100 鍙版湇锷″櫒锛
鍦ㄥ疄闄匔DN涓锛屾疮绉掑勭悊瓒呰繃 350,000 娆¤锋眰锛岃揪鍒 30 Gbps锛屾渶澶у归噺镊冲皯鍗佸崭簬鏅阃氢娇鐢锛屼互搴斿归珮宄版椂镄勫ぇ閲忚锋眰锛
鍦ㄥ疄闄 CDN 涓锛屾疮鍙版湇锷″櫒链 20,000 鍒 30,000 镄 keep-alive 骞跺彂杩炴帴锛屽叾涓链 1,000 鍒 2,000 镄勮繛鎺ユ槸涓鐩村緢娲昏穬镄勶绂
瀹为獙鐜澧冧腑锛屽崟鍙版湇锷″櫒姣忕掑勭悊 105,000 娆¤锋眰锛岃锋眰镄勫硅薄鏄琚缂揿瓨浣忕殑灏忔枃浠讹绂
瀹为獙鐜澧冧腑锛岃锋眰澶ф枃浠舵椂锛屽崟鍙版湇锷″櫒杈惧埌 3.6 Gbps锛4x GigE NIC bonded锛夈
浜 缁勪欢銆佹満鍒
Traffic Server锛圱S锛 镄勭粍鎴
1.Traffic Server缂揿瓨
TS 缂揿瓨鍖呭惈涓涓楂橀熺殑瀵硅薄鏁版嵁搴掳纴鏁版嵁搴撴牴鎹 URL 鍜岀浉鍏冲ご閮ㄦ潵绱㈠紩瀵硅薄锛屽逛簬钖屼竴瀵硅薄鍙浠ョ紦瀛树笉钖岀増链锛埚备笉钖岀殑缂栫爜銆佽瑷锛夈
褰撶紦瀛樼┖闂存弧钖庯纴TS 浼氱Щ闄よ繃链熺殑鏁版嵁銆
褰撶佺洏鍑洪敊镞讹纴TS 灏嗕笉鍐崭娇鐢ㄨュ潡纾佺洏锛岃浆钥屼娇鐢ㄥ墿涓嬬殑纾佺洏銆傛墍链夌佺洏閮藉嚭阌欐椂锛孴S 灏嗗垏鎹㈣呖 proxy-only 妯″纺锛屽嵆鍙浠g悊锛屼笉缂揿瓨銆
鍙鍒嗗尯锛屽嵆鍙浠ョ粰鎸囧畾镄勫岗璁鍜屾簮链嶅姟鍣ㄥ垝鍒嗕竴瀹氭暟閲忕殑纾佺洏绌洪棿
2.RAM 缂揿瓨
鍐呭瓨缂揿瓨鍖哄偍瀛樻瘆杈幂儹闂ㄧ殑瀵硅薄锛屽湪娴侀噺镄勯珮宄版湡镞惰兘锷犲揩澶勭悊阃熷害鍜岄檷浣庣佺洏璐熻浇銆
3.涓绘満鏁版嵁搴
鍌ㄥ瓨 DNS 淇℃伅锛屾柟渚夸富链哄悕鍒 IP 鍦板潃镄勫揩阃熻浆鎹
鍌ㄥ瓨姣忎釜涓绘満镄 HTTP 鐗堟湰锛屾柟渚块珮绾у岗璁鐗规х殑浣跨敤
鍌ㄥ瓨涓绘満镄勫彲闱犳у拰鍙鐢ㄦт俊鎭
4.DNS 瑙f瀽鍣
TS 铡熺敓瀹炵幇浜 DNS 瑙f瀽鍣锛屼笉渚濊禆杈冩参镄勪紶缁熻В鏋愬簱銆傚悓镞朵篃闄崭绠浜 DNS 镄勬祦閲忋
5.Traffic Server 杩涚▼
traffic_server 杩涚▼璐熻矗鎺ュ弹杩炴帴锛屽勭悊鍗忚璇锋眰锛岀劧钖庝粠缂揿瓨鎴栨簮链嶅姟鍣ㄨ幏鍙栧硅薄骞惰繑锲
traffic_manager 杩涚▼鏄 TS 镄勫懡浠ゅ拰鎺у埗璁炬柦锛岃礋璐e惎锷ㄣ佺洃鎺у拰閰岖疆 traffic_server 杩涚▼锛屽畠涔熻礋璐d唬鐞嗙殑绔鍙i厤缃銆佺粺璁′俊鎭镄勬帴鍙c侀泦缇ょ$悊鍜岃櫄𨰾 IP 镄勬晠闅滆浆绉汇
濡傛灉 traffic_manager 妫娴嫔埌 traffic_server 杩涚▼澶辨晥锛屽畠绔嫔嵆閲嶅惎 traffic_server 杩涚▼骞朵笖缁存姢涓涓杩炴帴阒熷垪锛屼缭瀛樻ゆ椂鍒版潵镄勮锋眰锛屽畬鍏ㄩ吨钖钖庤繖涓阒熷垪閲岀殑杩炴帴灏嗘寜椤哄簭琚澶勭悊銆
traffic_cop 杩涚▼鐩戣 traffic_server 鍜 traffic_manager 杩涚▼锛屾よ繘绋嫔懆链熸х殑镆ヨ traffic_server 鍜 traffic_manager 杩涚▼镄勫仴搴风姸鍐碉纴濡傛灉镆ヨ㈠湪涓瀹氶棿闅旀椂闂村唴链杩斿洖鎴栬呰繑锲炰俊鎭涓嶆g‘锛宼raffic_cop 灏嗛吨钖 traffic_manager 鍜 traffic_server 杩涚▼銆
Apache <wbr>Traffic <wbr>Server <wbr>绠浠
6.绠$悊宸ュ叿
Traffic Line 鏄锻戒护琛岀▼搴忥纴鍙浠ョ敤𨱒ュ揩阃熺洃瑙 Traffic Server 镄勬ц兘鍜岀绣缁沧祦閲忥纴涔熻兘閰岖疆 TS銆
Traffic Shell 涔熸槸锻戒护琛屽伐鍏凤纴杩涘叆璇 shell 钖庢湁镊宸变竴濂楄娉曪纴鍙浠f浛 Traffic Line 瀹屾垚鐩戞带銆侀厤缃浠诲姟銆
阃氲繃 Traffic Line 鍜 Traffic Shell 瀵归厤缃浣滃嚭镄勪慨鏀瑰皢浼氲嚜锷ㄥ啓鍏ラ厤缃鏂囦欢涓銆
Traffic Server 镄勫簳灞傛満鍒
Apache Traffic Server 涓嶅悓浜庡ぇ閮ㄥ垎寮婧愪唬鐞嗘湇锷″櫒锛屽畠缁揿悎浜嗕袱绉嶆妧链𨱒ュ勭悊楂桦苟鍙戯细
寮傛ヤ簨浠跺勭悊锛圆synchronous event processing锛
澶氱嚎绋嬶纸Multi-threading锛
Traffic Server 鍦ㄥ CPU銆佸氭牳镄勭‖浠朵笂镓╁𪾢镩濂斤纴鑳藉厖鍒嗗埄鐢ㄦ墍链夊彲鐢ㄧ殑 CPU 鍜屽叾浠栬祫婧愩
HTTP 浠g悊缂揿瓨鐩稿叧链哄埗
1. Traffic Server 澶勭悊璇锋眰镄勮繃绋
1锛夌敤鎴疯锋眰涓涓 web 瀵硅薄锛孴S 鏀跺埌璇锋眰
2锛涂S 阃氲繃瀵硅薄镄勫湴鍧锛屽湪瀵硅薄鏁版嵁搴掳纸缂揿瓨锛変腑铡诲畾浣嶈ュ硅薄
a.濡傛灉瀵硅薄鍦ㄧ紦瀛树腑锛孴S 浼氭镆ュ硅薄鏄钖︽柊椴滐纸fresh锛
濡傛灉鏂伴矞锛孴S 浠庣紦瀛橀噷杩斿洖璇ュ硅薄缁欑敤鎴凤纴姝ゆ椂绉颁负缂揿瓨锻戒腑锛坈ache hit锛
濡傛灉涓嶆柊椴滐纸stale锛夛纴TS 浼氲繛鎺ユ簮链嶅姟鍣ㄥ幓楠岃瘉瀵硅薄鏄钖︿粛铹舵柊椴滐纴鍗抽吨鏂伴獙璇侊纸revalidation锛夛纴濡傛灉浠岖劧鏂伴矞锛孴S 绔嫔嵆灏嗙紦瀛树腑镄勫坛链杩斿洖缁欑敤鎴
b.濡傛灉瀵硅薄涓嶅湪缂揿瓨涓锛堢紦瀛樻湭锻戒腑锛宑ache miss锛夛纴鎴栬呯紦瀛樼殑鍓链涓嶅啀链夋晥锛孴S 浼氩幓婧愭湇锷″櫒銮峰彇瀵硅薄锛岀劧钖庡悓镞跺仛涓嬮溃涓や欢浜
灏嗗硅薄杩斿洖缁欑敤鎴
灏嗗硅薄鏀惧埌链鍦扮紦瀛树腑
2. Traffic Server 鍒ゆ柇 HTTP 瀵硅薄鏄钖︽柊椴滐纸fresh锛夌殑杩囩▼
濡傛灉链 Expires 鎴栬 max-age 澶撮儴鐩存帴瀹氢箟缂揿瓨镄勮繃链熸椂闂达纴TS灏嗗规瘆褰揿墠镞堕棿鍜岃繃链熸椂闂村幓鍒ゆ柇瀵硅薄鏄钖︽柊椴
濡傛灉娌℃湁涓婅堪澶撮儴锛孴S 灏嗘镆 Last-Modified 鍜 Date 澶撮儴锛埚叾涓璂ate鏄婧愭湇锷″櫒杩斿洖瀵硅薄镄勬椂闂达纴濡傛灉娌℃湁 Last-Modified 澶撮儴锛孴S 浼氱敤瀵硅薄鍐椤叆缂揿瓨镄勬椂闂翠互浣滀唬镟匡级锛岀劧钖庣敤浠ヤ笅鍏寮忕畻鍑烘柊椴灭殑镞堕棿锣冨洿锛坒reshness_limit锛屽彲鐞呜В涓轰缭璐ㄦ湡锛:
freshness_limit = ( Date - Last-Modified ) x 0.1
0.1 杩欎釜鍙傛暟鍙浠ヤ綔璋冩暣锛屽苟涓旇兘闄愬埗 freshness_limit 镄勪笂涓嬮檺锛岄粯璁ゆ渶灏忔槸 1 灏忔椂锛屾渶澶ф槸 1 澶
濡傛灉娌℃湁 Expires 澶撮儴鎴栬呮病链 Last-Modified銆丏ate 澶撮儴锛孴S 灏嗕娇鐢ㄩ粯璁ょ殑 fressness limit
鍙﹀栵纴TS 杩树细妫镆 cache.config 閰岖疆鏂囦欢涓镄 revalidate 瑙勫垯锛岃ヨ勫垯鍙浠ュ圭壒瀹氱殑 HTTP 瀵硅薄璁剧疆鐗瑰畾镄勯獙璇佹椂闂达纸鐗瑰畾镄勫烟钖嶃両P銆佷竴瀹氲勫垯镄 URL銆佺壒瀹氱殑瀹㈡埛绔绛夌瓑锛
3. 缂揿瓨杩囨湡锛坰tale锛夛纴Traffic Server 铡绘簮链嶅姟鍣ㄩ吨鏂伴獙璇佸硅薄鍙鑳界殑𨱍呭喌
浠岖劧 fresh锛孴S 閲岖疆 freshness_limit锛屽苟杩斿洖瀵硅薄
瀵硅薄鏂板坛链鍙鐢锛孴S 缂揿瓨鏂板硅薄锛屽苟钖屾椂杩斿洖缁欑敤鎴
婧愭湇锷″櫒涓婄殑瀵硅薄涓嶅啀瀛桦湪锛孴S 涔熶笉鍐嶈繑锲炶ュ坛链缁欑敤鎴
婧愭湇锷″櫒娌℃湁鍝嶅簲锛孴S 杩斿洖杩囨湡镄勫硅薄骞跺彂鍑鸿﹀憡銆
镟磋︾粏镄勮存槑璇锋煡鐪 Traffic Server 绠$悊鏂囨。涓镄 HTTP Proxy Caching 閮ㄥ垎
涓 瀹夎呫佷娇鐢
Apache Traffic Server 寮婧愬悗娣诲姞浜 64 浣嶆敮鎸侊纴涔熺Щ妞嶅埌浜嗗父瑙佺殑 Linux 鍙戣岀増銆丗reeBSD銆丱penSolaris 鍜 Mac OS X锛屽紑婧愪箣鍓 Yahoo Traffic Server 涓鐩磋繍琛屽湪 32-bit Linux 涓娿
锛堜互 Apache Traffic Server 2.1.1 unstable 涓轰緥鍦 32-bit Linux 鐜澧冧笅杩涜屽畨瑁呮祴璇曪级
瀹夎
1. 涓嬭浇銆佽В铡
wget http://www.apache.org/dist/trafficserver/trafficserver-2.1.1-unstable.tar.bz2
wget http://www.apache.org/dist/trafficserver/trafficserver-2.1.1-unstable.tar.bz2.md5
md5sum -c trafficserver-2.1.1-unstable.tar.bz2.md5
tar jxvf trafficserver-2.1.1-unstable.tar.bz2
cd trafficserver-2.1.1-unstable
2. 缂栬疟銆佸畨瑁
镆ョ湅 README 璇存槑鏂囨。锛屽畨瑁呯紪璇戜緷璧栫殑搴掳纸centos 鍙鍙傜収 fedora 渚濊禆镄勮蒋浠跺寘锛宲cre鍖呮浛鎹涓 pcre-devel 鍗冲彲锛
./configure --help 镆ョ湅缂栬疟镄勪竴浜涢夐”
./configure 锛堥粯璁ゅ畨瑁呭湪 /usr/local锛屽傞渶淇鏀癸纴浣跨敤 --prefix=PREFIX锛涘弬鏁颁腑杩樻湁鐢ㄦ埛鍜岀敤鎴风粍阃夐”锛岃繖鏄 TS 杩涚▼杩愯岀殑韬浠斤纴榛樿ゅ潎涓 nobody锛宑entos 鍙浠ヤ笉浣滀慨鏀癸纴鍏朵粬鍙戣岀増鍙鑳介渶瑕佷慨鏀癸纴濡 ./configure --with-group=nogroup锛
make
make install 浠ョ$悊锻樿韩浠芥墽琛
鐩褰旷粨鏋
榛樿ょ洰褰
鍐呭
/usr/local/var/log/trafficserver
杩愯屾椂鍒涘缓镄勬棩蹇楁枃浠
/usr/local/var/trafficserver
杩愯屾椂镄勪竴绯诲垪鏂囦欢
/usr/local/etc/trafficserver
閰岖疆鏂囦欢
/usr/local/bin
鍙镓ц屾枃浠
/usr/local/libexec/trafficserver
鎻掍欢
鍒濇ラ厤缃
records.config 鏄 key-value 镙煎纺镄勯厤缃鏂囦欢锛岃礋璐eぇ閮ㄥ垎鍏ㄥ眬镄勯夐”璁剧疆锛屽嵆涓婚厤缃鏂囦欢銆
storage.config 鐢ㄤ簬鎸囧畾纾佺洏瀛桦偍銆
remap.config 瀹氢箟鏄犲皠瑙勫垯锛岀敤浜庤锋眰镄勯吨鍐欙纸rewrite锛夛纴鍙嶅悜浠g悊鍗冲湪姝ら厤缃銆
records.config 涓鍏抽敭镄勯厤缃
CONFIG proxy.config.exec_thread.autoconfig INT 1
CONFIG proxy.config.exec_thread.autoconfig.scale FLOAT 2.0
CONFIG proxy.config.exec_thread.limit INT 2 # 缁忚傚疗鏄姣忎釜镙稿垱寤虹殑绾跨▼鏁帮纴瀹樻柟鏂囨。涓链鎻愬强
CONFIG proxy.config.cluster.ethernet_interface STRING eth0 # 璁剧疆浠ュお缃戞帴鍙
CONFIG proxy.config.http.server_port INT 8080 # 鐩戝惉绔鍙o纴鍙嶅悜浠g悊阃氩父涓80
LOCAL proxy.local.incoming_ip_to_bind STRING 0.0.0.0 # 缁戝畾镄 IP锛屽彲鐪佺暐锛岄粯璁ゅ嵆涓 0.0.0.0
CONFIG proxy.config.http.cache.http INT 1 # 镓揿紑缂揿瓨锷熻兘
CONFIG proxy.config.cache.ram_cache.size INT 512M # RAM 缂揿瓨澶у皬
CONFIG proxy.config.reverse_proxy.enabled INT 1 # 镓揿紑
CONFIG proxy.config.url_remap.remap_required INT 1 # 1涓哄彧鍙嶅悜浠g悊锛0涓烘e悜+鍙嶅悜浠g悊
CONFIG proxy.config.url_remap.pristine_host_hdr INT 0
CONFIG proxy.config.ssl.enabled INT 0 # 鍏抽棴SSL
CONFIG proxy.config.ssl.server.cert.filename STRING server.pem
CONFIG proxy.config.http.server_max_connections INT 2000 # 钖屾簮链嶅姟鍣ㄧ殑链澶ц繛鎺ユ暟
CONFIG proxy.config.http.keep_alive_no_activity_timeout_out INT 60 # 褰扑竴涓浜嫔姟缁撴潫钖庡悓铡熸湇锷″櫒淇濇寔杩炴帴镄勬椂闂
remap.config 閰岖疆
map http://cdn.example.com/js http://js.example.com # 阃氲繃 DNS 杞璇㈠彲瀹炵幇璐熻浇鍧囱
reverse_map http://js.example.com http://cdn.example.com/js # reverse_map 鑳藉湪婧愭湇锷″櫒 链 HTTP 閲嶅畾钖戣烦杞镞讹纴淇鏀归吨瀹氩悜璇锋眰锛屽嵆閲嶅啓 Location 澶撮儴鍐呭
map http://cdn.example.com/css http://css.example.com
reverse_map http://css.example.com http://cdn.exampe.com/css
map http://cdn.example.com/img http://img.example.com
reverse_map http://img.example.com http://cdn.example.com/img
storage.config 閰岖疆
/data1 67108864 # 鎸囧畾涓涓鎴栧氢釜鐩褰曪纴娉ㄦ槑缂揿瓨澶у皬锛屼篃鍙鐩存帴鎸囧畾 raw 鍒嗗尯锛岃﹁乻torage.config 涓镄勬敞閲婅存槑
镟磋︾粏镄勯厤缃鍙鍙傝冨畼鏂圭$悊鎸囧崡 http://trafficserver.apache.org/docs/v2/admin/
链嶅姟鎺у埗
杩愯 /usr/local/bin/trafficserver start
缁撴潫 /usr/local/bin/trafficserver stop
閲嶅惎 /usr/local/bin/trafficserver restart
锻戒护琛屽伐鍏枫佺洃鎺
/usr/local/bin/traffic_line 闇鐢ㄧ$悊锻樿韩浠芥墽琛
镆ョ湅甯锷 traffic_line -h
镆ョ湅鍙橀噺镄勫 traffic_line -r 鍙橀噺钖 锛埚彉閲忓悕瑙佸畼鏂圭$悊鎸囧崡闄勫綍C锛屽惈 TS 杩愯屾椂缁熻℃暟鎹锛
缁椤彉閲忚祴鍊 traffic_line -s 鍙橀噺钖 -v 鍊 锛埚彉閲忓悕瑙乺ecords.config锛
涓嶉吨钖疶S 浣块厤缃鐢熸晥 traffic_line -x
/usr/local/bin/traffic_shell 闇鐢ㄧ$悊锻樿韩浠芥墽琛岋纴杩涘叆钖庢彁绀虹︿负钬%钬
镆ョ湅甯锷 man traffic_shell 锛堢敱浜庡紑鍙戣呯枏蹇斤纴𨱌备笉鑳界敤锛
show 锻戒护锛屽 %show:cache-stats 镆ョ湅缂揿瓨缁熻★纴濡傚懡涓𨱍呭喌锛岀紦瀛桦ぇ灏忥绂濡%show:proxy-stats 镆ョ湅锻戒腑鐜
config 锻戒护锛屽 %config:logging event disable 鍏抽棴镞ュ织锛涘 %config:cache clear锛屾竻闄ょ紦瀛桡纴config锻戒护浣滃嚭镄勪慨鏀归兘浼氱珛鍗崇敓鏁
/usr/local/bin/traffic_logcat 镞ュ织镆ョ湅宸ュ叿
traffic_logcat -h 銮峰缑甯锷
镆ョ湅浜岃繘鍒舵棩蹇 traffic_logcat 镞ュ织鏂囦欢钖
Traffic Server 绯荤粺镊韬镄勮繍琛屾棩蹇楀彲鍦 /var/log/message 涓镆ョ湅锛坈entos锛夛纴鐢ㄤ簬鎺挜敊
traffic_logstats 鎻愪緵浜嗗熀浜庢棩蹇楃殑缁熻″姛鑳
锲 缁撹
Apache Traffic Server 寮婧愬悗锷熻兘鍦ㄤ笉鏂琚寮鍙戯纴镐ц兘寰楀埌寰埚ぇ鎻愬崌锛岀ぞ鍖轰篃鍦ㄩ愭笎鍙戝𪾢锛屼絾闄や简 Yahoo 涔嫔栬缮寰埚皯链夊叾浠栧疄璺碉纴寰埚氩姛鑳斤纸濡傞泦缇わ级镄勬枃妗f湁寰呭畬锽勚俆raffic Server 涓板瘜镄勬彃浠跺紑鍙戞槸鍏朵竴澶т寒镣癸纴妯″潡鍖栫殑鐗圭偣浣垮叾𨰾ユ湁寰埚ソ镄勬墿灞曟у拰𨱔垫椿镐э纴鍐嶅姞涓婂畠镄勯珮镐ц兘锛岀浉淇 Apache Traffic Server 链𨱒ュ皢鍦ㄥ緢澶氩満鏅涓镟夸唬浼犵粺镄勪唬鐞嗗拰缂揿瓨链嶅姟鍣ㄨ屾垚涓哄ぇ瀹剁殑棣栭夈
㈤ 如何编写驱动程序
代码:
#include<linux/mole.h>
#include<linux/kernel.h>
#include<asm/io.h>
#include<linux/miscdevice.h>
#include<linux/fs.h>
#include<asm/uaccess.h>
//流水灯代码
#define GPM4CON 0x110002e0
#define GPM4DAT 0x110002e4
static unsigned long*ledcon=NULL;
static unsigned long*leddat=NULL;
//自定义write文件操作(不自定义的话,内核有默认的一套文件操作函数)
static ssize_t test_write(struct file*filp,const char __user*buff,size_t count,loff_t*offset)
{
int value=0;
int ret=0;
ret=_from_user(&value,buff,4);
//底层驱动只定义基本操作动作,不定义功能
if(value==1)
{
*leddat|=0x0f;
*leddat&=0xfe;
}
if(value==2)
{
*leddat|=0x0f;
*leddat&=0xfd;
}
if(value==3)
{
*leddat|=0x0f;
*leddat&=0xfb;
}
if(value==4)
{
*leddat|=0x0f;
*leddat&=0xf7;
}
return 0;
}
//文件操作结构体初始化
static struct file_operations g_tfops={
.owner=THIS_MODULE,
.write=test_write,
};
//杂设备信息结构体初始化
static struct miscdevice g_tmisc={
.minor=MISC_DYNAMIC_MINOR,
.name="test_led",
.fops=&g_tfops,
};
//驱动入口函数杂设备初始化
static int __init test_misc_init(void)
{
//IO地址空间映射到内核的虚拟地址空间
ledcon=ioremap(GPM4CON,4);
leddat=ioremap(GPM4DAT,4);
//初始化led
*ledcon&=0xffff0000;
*ledcon|=0x00001111;
*leddat|=0x0f;
//杂设备注册函数
misc_register(&g_tmisc);
return 0;
}
//驱动出口函数
static void __exit test_misc_exit(void)
{
//释放地址映射
iounmap(ledcon);
iounmap(leddat);
}
//指定模块的出入口函数
mole_init(test_misc_init);
mole_exit(test_misc_exit);
MODULE_LICENSE("GPL");
(5)remap源码扩展阅读:
include用法:
#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。
插入头文件的内容
#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:
1、#include<文件名>
2、#include"文件名"
如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。如下例所示:
#include<math.h>//一些数学函数的原型,以及相关的类型和宏
如果需要包含针对程序所开发的源文件,则应该使用第二种格式。
采用#include命令所插入的文件,通常文件扩展名是.h,文件包括函数原型、宏定义和类型定义。只要使用#include命令,这些定义就可被任何源文件使用。如下例所示:
#include"myproject.h"//用在当前项目中的函数原型、类型定义和宏
你可以在#include命令中使用宏。如果使用宏,该宏的取代结果必须确保生成正确的#include命令。例1展示了这样的#include命令。
【例1】在#include命令中的宏
#ifdef _DEBUG_
#define MY_HEADER"myProject_dbg.h"
#else
#define MY_HEADER"myProject.h"
#endif
#include MY_HEADER
当上述程序代码进入预处理时,如果_DEBUG_宏已被定义,那么预处理器会插入myProject_dbg.h的内容;如果还没定义,则插入myProject.h的内容。