Cygwin使用指南

2021-04-15 20:28:48 字數 3605 閱讀 6284

cygwin是乙個在windows平台上執行的unix模擬環境,是cygnus

solutions公司開發的自由軟體(該公司開發了很多好東西,著名的還有ecos,不過現已被redhat收購)。它對於學習unix/linux操

作環境,或者從unix到windows的應用程式移植,或者進行某些特殊的開發工作,尤其是使用gnu工具集在windows上進行嵌入式系統開發,非

常有用。隨著嵌入式系統開發在國內日漸流行,越來越多的開發者對cygwin產生了興趣。本文將對其作一介紹。

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-u... (

cygwin.com在電信adsl似乎被遮蔽了,不知道原因。不過現在大家可以去cygwin中國區映象:http://cygwin.cn

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)。

Ubuntu apt 使用指南

起初gnu linux系統中只有.tar.gz。使用者必須自己編譯他們想使用的每乙個程式。在debian出現之後,人們認為有必要在系統中新增 一種機制用來管理安裝在計算機上的軟體包。人們將這套系統稱為dpkg。至此著名的 package 首次在gnu linux上出現。不久之後紅帽子也 開始著手建立...

CImageList使用指南

1.綜述 在mfc 中cimagelist 類封裝了 影象列表控制項的功能,影象列表是乙個具有相同大小的 影象 可以是不同 型別 的集合,其主要用於 應用程式中大規模 圖示的儲存。該控制項是不可 見的,通常與其它如 clistbox ccombobox ccomboboxex ctabctrl 以及...

CImageList使用指南

cimagelist使用指南 1.綜述 在 mfc中cimagelist類封裝了影象列表控制項的功能,影象列表是乙個具有相同大小的影象 可以是不同型別 的集合,其主要用於應用程式中大 規模圖示的儲存,該控制項是不可見的。通常與其它如clistbox,ccombobox,ccomboboxex以及ct...