cygwin是一個在windows平台上啟動並執行unix類比環境

來源:互聯網
上載者:User
根據cygwin user guide翻譯整理,希望對大家有所協助。有錯誤清指出。

1 引言
cygwin是一個在windows平台上啟動並執行unix類比環境,是cygnus solutions公司開發的自由軟體(該公司開發了很多好東西,著名的還有eCos,不過現已被Redhat收購)。它對於學習unix/linux作業環境,或者從unix到windows的應用程式移植,或者進行某些特殊的開發工作,尤其是使用gnu工具集在windows上進行嵌入式系統開發,非常有用。隨著嵌入式系統開發在國內日漸流行,越來越多的開發人員對cygwin產生了興趣。本文將對其作一介紹。

2 機理
cygnus當初首先把gcc,gdb,gas等開發工具進行了改進,使他們能夠產生並解釋win32的目標檔案。然後,他們要把這些工具移植到windows平台上去。一種方案是基於win32 api對這些工具的原始碼進行大幅修改,這樣做顯然需要大量工作。因此,他們採取了一種不同的方法——他們寫了一個共用庫(就是cygwin dll),把win32 api中沒有的unix風格的調用(如fork,spawn,signals,select,sockets等)封裝在裡面,也就是說,他們基於win32 api寫了一個unix系統庫的類比層。這樣,只要把這些工具的原始碼和這個共用庫串連到一起,就可以使用unix主機上的交叉編譯器來產生可以在windows平台上啟動並執行工具集。以這些移植到windows平台上的開發工具為基礎,cygnus又逐步把其他的工具(幾乎不需要對原始碼進行修改,只需要修改他們的配置指令碼)軟體移植到windows上來。這樣,在windows平台上運行bash和開發工具、使用者工具,感覺好像在unix上工作。
關於cygwin實現的更詳細描述,請參考http://cygwin.com/cygwin-ug-net/highlights.html.

3 安裝設定cygwin
3.1 安裝
要安裝網路版的cygwin,可以到http://cygwin.com,點擊"Install Cygwin Now!"。這樣會先下載一個叫做setup.exe的GUI安裝程式,用它能下載一個完整的cygwin。按照每一屏的指示可以方便的進行安裝。
3.2 環境變數
開始運行bash之前,應該設定一些環境變數。cygwin提供了一個.bat檔案,裡面已經設定好了最重要的環境變數。通過它來啟動bash是最安全的辦法。這個.bat檔案安裝在cygwin所在的根目錄下。 可以隨意編輯該檔案。
CYGWIN變數用來針對cygwin運行時系統進行多種全域設定。開始時,可以不設定CYGWIN或者在執行bash前用類似下面的格式在dos框下把它設為tty
C:/> set CYGWIN=tty notitle glob

PATH變數被cygwin應用程式作為搜尋可知性檔案的路徑列表。當一個cygwin進程啟動時,該變數被從windows格式(e.g. C:/WinNT/system32;C:/WinNT)轉換成unix格式(e.g., /WinNT/system32:/WinNT)。如果想在不運行bash的時候也能夠使用cygwin工具集,PATH起碼應該包含x:/cygwin/bin,其中x:/cygwin 是你的系統中的cygwin目錄。
HOME變數用來指定主目錄,推薦在執行bash前定義該變數。當cygwin進程啟動時,該變數也被從windows格式轉換成unix格式,例如,作者的機器上HOME的值為C:/(dos命令set HOME就可以看到他的值,set HOME=XXX可以進行設定),在bash中用echo $HOME看,其值為/cygdrive/c.
TERM變數指定終端型態。如果美對它進行設定,它將自動設為cygwin。
LD_LIBRARY_PATH被cygwin函數dlopen()作為搜尋.dll檔案的路徑列表,該變數也被從windows格式轉換成unix格式。多數Cygwin應用程式不使用dlopen,因而不需要該變數。
3.3 改變cygwin的最大儲存容量
Cygwin程式預設可以分配的記憶體不超過384 MB(program+data)。多數情況下不需要修改這個限制。然而,如果需要更多實際或虛擬記憶體,應該修改註冊表的HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER區段。田家一個DWORD鍵heap_chunk_in_mb並把它的值設為需要的記憶體限制,單位是十進位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
這一段講一下cygwin和傳統unix系統的不同之處。
4.1 映射路徑名
4.1.1 引言
cygwin同時支援win32和posix風格的路徑,路徑分隔字元可以是正斜杠也可以是反斜線。還支援UNC路徑名。(在網路中,UNC是一種確定檔案位置的方法,使用這種方法使用者可以不關心存放裝置的物理位置,方便了使用者使用。在Windows作業系統,Novell Netware和其它作業系統中,都已經使用了這種規範以取代本地命名系統。在UNC中,我們不用關心檔案在什麼盤(或卷)上,不用關心這個盤(或卷)所在伺服器在什麼地方。我們只要以下面格式就可以訪問檔案:
/伺服器名/共用名稱/路徑/檔案名稱
共用名稱有時也被稱為檔案所在卷或存放裝置的邏輯標識,但使用它的目的是讓使用者不必關心這些卷或存放裝置所在的物理位置。)
符合posix標準的作業系統(如linux)沒有盤符的概念。所有的絕對路徑都以一個斜杠開始,而不是盤符(如c:)。所有的檔案系統都是其中的子目錄。例如,兩個硬碟,其中之一為根,另一個可能是在/disk2路徑下。
因為許多unix系統上的程式假定存在單一的posix檔案系統結構,所以cygwin專門維護了一個針對win32檔案系統的內部posix視圖,使這些程式可以在windows下正確運行。在某些必要的情況下,cygwin會使用這種映射來進行win32和posix路徑之間的轉換。
4.1.2 cygwin mount表
cygwin中的mount程式用來把win32盤符和網際網路共用路徑映射到cygwin的內部posix分類樹。這是與典型unix mount程式相似的概念。對於那些對unix不熟悉而具有windows背景的的人來說,mount程式和早期的dos命令join非常相似,就是把一個盤符作為其他路徑的子目錄。
路徑映射資訊存放在目前使用者的cygwin mount表中,這個mount table 又在windows的註冊表中。這樣,當該使用者下一次登入進來時,這些資訊又從註冊表中取出。mount 表分為兩種,除了每個使用者特定的表,還有系統範圍的mount表,每個cygwin使用者的安裝表都繼承自系統資料表。系統資料表只能由擁有合適許可權的使用者(windows nt的管理員)修改。
目前使用者的mount表可以在註冊表"HKEY_CURRENT_USER/Software/Red Hat, Inc./Cygwin/mounts v" 下看到。系統資料表
存在HKEY_LOCAL_MACHINE下。
posix根路徑/預設指向系統磁碟分割,但是可以使用mount命令重新指向到windows檔案系統中的任何路徑。cygwin從win32路徑產生posix路徑時,總是使用mount表中最長的首碼。例如如果c:被同時安裝在/c和/,cygwin將把C:/foo/bar轉換成/c/foo/bar.
如果不加任何參數地調用mount命令,會把Cygwin當前安裝點集合全部列出。在下面的例子中,c盤是POSIX根,而d盤被映射到/d。本例中,根是一個系統範圍的安裝點,它對所有使用者都是可見的,而/d僅對目前使用者可見。
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刪除安裝點。
當Cygwin不能根據已有的安裝點把某個win32路徑轉化為posix路徑時,cygwin會自動把它轉化到一個處於預設posix路徑/cygdrive下的的一個安裝點. 例如,如果Cygwin 訪問Z:/foo,而Z盤當前不在安裝表內,那麼Z:/將被自動轉化成/cygdrive/Z.
可以給每個安裝點賦予特殊的屬性。自動安裝的分區顯示為“auto”安裝。安裝點還可以選擇是"textmode"還是 "binmode",這個屬性決定了文字檔和二進位檔案是否按同樣的方式處理。
4.1.3 其他路徑相關資訊
cygpath工具提供了在shell指令碼中進行win32-posix路徑格式轉換的能力。
HOME, PATH,和LD_LIBRARY_PATH環境變數會在cygwin進程啟動時自動被從Win32格式轉換成了POSIX格式(例如,如果存在從該win32路徑到posix路徑的安裝,會把c:/cygwin/bin轉為/bin)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.