它有一个gcc来运行CE序环境。也可用来学习unix.
Ҏcygwin user guide译整理Q希望对大家有所帮助。有错误清指出?BR>
1 引言
cygwin是一个在windowsq_上运行的unix模拟环境Q是cygnus solutions公司开发的自由软gQ该公司开发了很多好东西,著名的还有eCosQ不q现已被Redhat收购Q。它对于学习unix/linux操作环境Q或者从unix到windows的应用程序移植,或者进行某些特D的开发工作,其是用gnu工具集在windows上进行嵌入式pȝ开发,非常有用。随着嵌入式系l开发在国内日渐行Q越来越多的开发者对cygwin产生了兴。本文将对其作一介绍?/FONT>
Ҏcygwin user guide译整理Q希望对大家有所帮助。有错误清指出?BR>
1 引言
cygwin是一个在windowsq_上运行的unix模拟环境Q是cygnus solutions公司开发的自由软gQ该公司开发了很多好东西,著名的还有eCosQ不q现已被Redhat收购Q。它对于学习unix/linux操作环境Q或者从unix到windows的应用程序移植,或者进行某些特D的开发工作,其是用gnu工具集在windows上进行嵌入式pȝ开发,非常有用。随着嵌入式系l开发在国内日渐行Q越来越多的开发者对cygwin产生了兴。本文将对其作一介绍?BR>
2 机理
cygnus当初首先把gccQgdbQgas{开发工兯行了改进Q他们能够生成q解释win32的目标文件。然后,他们要把q些工具UL到windowsq_上去。一U方案是Zwin32 api对这些工L源代码进行大q修改,q样做显焉要大量工作。因此,他们采取了一U不同的Ҏ——他们写了一个共享库(是cygwin dll)Q把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets{)装在里面,也就是说Q他们基于win32 api写了一个unixpȝ库的模拟层。这P只要把这些工L源代码和q个׃n库连接到一P可以用unixL上的交叉~译器来生成可以在windowsq_上运行的工具集。以q些UL到windowsq_上的开发工具ؓ基础Qcygnus又逐步把其他的工具Q几乎不需要对源代码进行修改,只需要修改他们的配置脚本QY件移植到windows上来。这P在windowsq_上运行bash和开发工兗用户工P感觉好像在unix上工作?BR>关于cygwin实现的更详细描述Q请参考http://cygwin.com/cygwin-ug-net/highlights.html.
3 安装讄cygwin
3.1 安装
要安装网l版的cygwinQ可以到http://cygwin.comQ点?Install Cygwin Now!"。这样会先下载一个叫做setup.exe的GUI安装E序Q用它能下蝲一个完整的cygwin。按照每一屏的指示可以方便的进行安装?BR>3.2 环境变量
开始运行bash之前Q应该设|一些环境变量。cygwin提供了一?bat文gQ里面已l设|好了最重要的环境变量。通过它来启动bash是最安全的办法。这?bat文g安装在cygwin所在的根目录下?可以随意~辑该文件?BR>CYGWIN变量用来针对cygwinq行时系l进行多U全局讄。开始时Q可以不讄CYGWIN或者在执行bash前用cM下面的格式在dos框下把它设ؓtty
C:\> set CYGWIN=tty notitle glob
PATH变量被cygwin应用E序作ؓ搜烦可知性文件的路径列表。当一个cygwinq程启动Ӟ该变量被从windows格式(e.g. C:\WinNT\system32;C:\WinNT)转换成unix格式(e.g., /WinNT/system32:/WinNT)。如果想在不q行bash的时候也能够使用cygwin工具集,PATHL应该包含x:\cygwin\binQ其中x:\cygwin 是你的系l中的cygwin目录?BR>HOME变量用来指定ȝ录,推荐在执行bash前定义该变量。当cygwinq程启动Ӟ该变量也被从windows格式转换成unix格式Q例如,作者的机器上HOME的gؓC:\Qdos命oset HOME可以看C的|set HOME=XXX可以q行讄Q,在bash中用echo $HOME看,其gؓ/cygdrive/c.
TERM变量指定l端型态。如果美对它q行讄Q它自动设为cygwin?BR>LD_LIBRARY_PATH被cygwin函数dlopen()作ؓ搜烦.dll文g的\径列表,该变量也被从windows格式转换成unix格式。多数Cygwin应用E序不用dlopen,因而不需要该变量?
3.3 改变cygwin的最大存储容?BR>CygwinE序~省可以分配的内存不过384 MB(program+data)。多数情况下不需要修改这个限制。然而,如果需要更多实际或虚拟内存Q应该修Ҏ册表的HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER区段。田家一个DWORD键heap_chunk_in_mbq把它的D为需要的内存限制Q单位是十进制MB。也可以用cygwin中的regtool完成该设|。例子如下:
regtool -i set /HKLM/Software/Cygnus\ Solutions/Cygwin/heap_chunk_in_mb 1024
regtool -v list /HKLM/Software/Cygnus\ Solutions/Cygwin
4 使用cygwin
q一D讲一下cygwin和传lunixpȝ的不同之处?BR>4.1 映射路径?BR>4.1.1 引言
cygwin同时支持win32和posix风格的\径,路径分隔W可以是正斜杠也可以是反斜杠。还支持UNC路径名。(在网l中QUNC是一U确定文件位|的ҎQ用这U方法用户可以不兛_存储讑֤的物理位|,方便了用户用。在Windows操作pȝQNovell Netware和其它操作系l中Q都已经使用了这U规范以取代本地命名pȝ。在UNC中,我们不用兛_文g在什么盘Q或P上,不用兛_q个盘(或卷Q所在服务器在什么地斏V我们只要以下面格式可以访问文Ӟ
\\服务器名\׃n名\路径\文g?BR>׃n名有时也被称为文件所在卷或存储设备的逻辑标识Q但使用它的目的是让用户不必兛_q些h存储讑֤所在的物理位置。)
W合posix标准的操作系l(如linuxQ没有盘W的概念。所有的l对路径都以一个斜杠开始,而不是盘W(如c:Q。所有的文gpȝ都是其中的子目录。例如,两个盘Q其中之一为根Q另一个可能是?disk2路径下?BR>因ؓ许多unixpȝ上的E序假定存在单一的posix文gpȝl构Q所以cygwin专门l护了一个针对win32文gpȝ的内部posix视图Qɘq些E序可以在windows下正运行。在某些必要的情况下Qcygwin会用这U映来q行win32和posix路径之间的{换?BR>4.1.2 cygwin mount?BR>cygwin中的mountE序用来把win32盘符和网l共享\径映到cygwin的内部posix目录树。这是与典型unix mountE序怼的概c对于那些对unix不熟悉而具有windows背景的的人来_mountE序和早期的dos命ojoin非常怼Q就是把一个盘W作为其他\径的子目录?BR>路径映射信息存放在当前用Lcygwin mount表中Q这个mount table 又在windows的注册表中。这P当该用户下一ơ登录进来时Q这些信息又从注册表中取出。mount 表分ZU,除了每个用户特定的表Q还有系l范围的mount表,每个cygwin用户的安装表都承自pȝ表。系l表只能由拥有合适权限的用户Qwindows nt的管理员Q修攏V?BR>当前用户的mount表可以在注册?HKEY_CURRENT_USER/Software/Red Hat, Inc./Cygwin/mounts v" 下看到。系l表
存在HKEY_LOCAL_MACHINE下?BR>posix根\?~省指向pȝ分区Q但是可以用mount命o重新指向到windows文gpȝ中的M路径。cygwin从win32路径生成posix路径ӞL使用mount表中最长的前缀。例如如果c:被同时安装在/c?Qcygwin把C:/foo/bar转换?c/foo/bar.
如果不加M参数地调用mount命oQ会把Cygwin当前安装炚w合全部列出。在下面的例子中Qc盘是POSIX根,而d盘被映射?d。本例中Q根是一个系l范围的安装点,它对所有用户都是可见的Q?d仅对当前用户可见?BR>c:\> mount
f:\cygwin\bin on /usr/bin type system (binmode)
f:\cygwin\lib on /usr/lib type system (binmode)
f:\cygwin on / type system (binmode)
e:\src on /usr/src type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)
e: on /cygdrive/e type user (binmode,noumount)
q可以用mount命o增加新的安装点,用umount删除安装炏V?BR>当Cygwin不能Ҏ已有的安装点把某个win32路径转化为posix路径Ӟcygwin会自动把它{化到一个处于缺省posix路径/cygdrive下的的一个安装点. 例如Q如果Cygwin 讉KZ:\fooQ而Z盘当前不在安装表内,那么Z:\被自动转化?cygdrive/Z.
可以l每个安装点赋予Ҏ的属性。自动安装的分区昄为“auto”安装。安装点q可以选择?textmode"q是 "binmode"Q这个属性决定了文本文g和二q制文g是否按同L方式处理?BR>4.1.3 其他路径相关信息
cygpath工具提供了在shell脚本中进行win32-posix路径格式转换的能力?BR>HOME, PATH,和LD_LIBRARY_PATH环境变量会在cygwinq程启动时自动被从Win32格式转换成了POSIX格式(例如Q如果存在从该win32路径到posix路径的安装,会把c:\cygwin\bin转ؓ/bin)?