4 使用cygwin 這一段講一下cygwin和傳統(tǒng)unix系統(tǒng)的不同之處。 4.1 映射路徑名 4.1.1 引言 cygwin 同時支持win32和posix風(fēng)格的路徑,路徑分隔符可以是正斜杠也可以是反斜杠。還支持UNC路徑名。(在網(wǎng)絡(luò)中,UNC是一種確定文件位置的方法,使用這種方法用戶可以不關(guān)心存儲設(shè)備的物理位置,方便了用戶使用。在Windows操作系統(tǒng),Novell Netware和其它操作系統(tǒng)中,都已經(jīng)使用了這種規(guī)范以取代本地命名系統(tǒng)。在UNC中,我們不用關(guān)心文件在什么盤(或卷)上,不用關(guān)心這個盤(或卷)所在服務(wù)器在什么地方。我們只要以下面格式就可以訪問文件: \\服務(wù)器名\共享名\路徑\文件名 共享名有時也被稱為文件所在卷或存儲設(shè)備的邏輯標(biāo)識,但使用它的目的是讓用戶不必關(guān)心這些卷或存儲設(shè)備所在的物理位置。) 符合posix標(biāo)準(zhǔn)的操作系統(tǒng)(如linux)沒有盤符的概念。所有的絕對路徑都以一個斜杠開始,而不是盤符(如c:)。所有的文件系統(tǒng)都是其中的子目錄。例如,兩個硬盤,其中之一為根,另一個可能是在/disk2路徑下。 因為許多unix系統(tǒng)上的程序假定存在單一的posix文件系統(tǒng)結(jié)構(gòu),所以cygwin專門維護(hù)了一個針對win32文件系統(tǒng)的內(nèi)部posix視圖,使這些程序可以在windows下正確運行。在某些必要的情況下,cygwin會使用這種映射來進(jìn)行win32和posix路徑之間的轉(zhuǎn)換。 4.1.2 cygwin mount表 cygwin 中的mount程序用來把win32盤符和網(wǎng)絡(luò)共享路徑映射到cygwin的內(nèi)部posix目錄樹。這是與典型unix mount程序相似的概念。對于那些對unix不熟悉而具有windows背景的的人來說,mount程序和早期的dos命令join非常相似,就是把一個盤符作為其他路徑的子目錄。 路徑映射信息存放在當(dāng)前用戶的cygwin mount表中,這個mount table 又在windows的注冊表中。這樣,當(dāng)該用戶下一次登錄進(jìn)來時,這些信息又從注冊表中取出。mount 表分為兩種,除了每個用戶特定的表,還有系統(tǒng)范圍的mount表,每個cygwin用戶的安裝表都繼承自系統(tǒng)表。系統(tǒng)表只能由擁有合適權(quán)限的用戶(windows nt的管理員)修改。 當(dāng)前用戶的mount表可以在注冊表"HKEY_CURRENT_USER/Software/Red Hat, Inc./Cygwin/mounts v" 下看到。系統(tǒng)表 存在HKEY_LOCAL_MACHINE下。 posix 根路徑/缺省指向系統(tǒng)分區(qū),但是可以使用mount命令重新指向到windows文件系統(tǒng)中的任何路徑。cygwin從win32路徑生成posix路徑時,總是使用mount表中最長的前綴。例如如果c:被同時安裝在/c和/,cygwin將把C:/foo/bar轉(zhuǎn)換成/c/foo/bar. 如果不加任何參數(shù)地調(diào)用mount命令,會把Cygwin當(dāng)前安裝點集合全部列出。在下面的例子中,c盤是POSIX根,而d盤被映射到/d。本例中,根是一個系統(tǒng)范圍的安裝點,它對所有用戶都是可見的,而/d僅對當(dāng)前用戶可見。 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) 還可以使用mount命令增加新的安裝點,用umount刪除安裝點。 當(dāng)Cygwin 不能根據(jù)已有的安裝點把某個win32路徑轉(zhuǎn)化為posix路徑時,cygwin會自動把它轉(zhuǎn)化到一個處于缺省posix路徑/cygdrive下的的一個安裝點. 例如,如果Cygwin 訪問Z:\foo,而Z盤當(dāng)前不在安裝表內(nèi),那么Z:\將被自動轉(zhuǎn)化成/cygdrive/Z. 可以給每個安裝點賦予特殊的屬性。自動安裝的分區(qū)顯示為“auto”安裝。安裝點還可以選擇是"textmode"還是 "binmode",這個屬性決定了文本文件和二進(jìn)制文件是否按同樣的方式處理。 4.1.3 其他路徑相關(guān)信息 cygpath工具提供了在shell腳本中進(jìn)行win32-posix路徑格式轉(zhuǎn)換的能力。 HOME, PATH,和LD_LIBRARY_PATH環(huán)境變量會在cygwin進(jìn)程啟動時自動被從Win32格式轉(zhuǎn)換成了POSIX格式(例如,如果存在從該win32路徑到posix路徑的安裝,會把c:\cygwin\bin轉(zhuǎn)為/bin)。