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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280818.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280818.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280818.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nest 架構_當有人打來您的Nest Hello時,如何讓Google Home通知您

nest 架構The Nest Hello can alert you on your phone whenever someone rings your doorbell, but if you have a Google Home, you can also have Google Assistant audibly announce that someone is at the door. 無論何時有人按下門鈴, Nest Hello都會在電話上…

如何序列化派生類

前言假設有一個 Person 抽象基類,其中包含 Student 和 Teacher 派生類:public class Person {public string Name { get; set; } }public class Student : Person {public int Score { get; set; } }public class Teacher : Person {public string Title…

OPC Client “failed to execute OPCENUM” 解決方法

進入cmd重新執行 OpcEnum.exe /regserver 即可。

django07: 模板語言(舊筆記)

詳見:https://www.cnblogs.com/liwenzhou/p/7931828.html#autoid-2-3-6 包含: 模板 塊 組件 靜態文件

block,inline和inline-block概念和區別

block:block-level elements (塊級元素) ,inline: inline elements (內聯元素)。block元素通常被現實為獨立的一塊,會單獨換一行;inline元素則前后不會產生換行,一系列inline元素都在一行內顯示&#xff0c…

Hadoop3.0 WordCount測試一直Accept 狀態,Nodes of the cluster 頁面node列表個數為0

起因是我運行wordcount測試一直卡主,不能執行,一直處于 Accept 狀態,等待被執行,剛開始是各種配置yarn參數,以及host配置,后來發現還是不行 hadoop 集群安裝完成后,在50070的 HDFS 管理后臺能看…

nexus 手動增加_如何使用Google的工廠圖像手動升級Nexus設備

nexus 手動增加Google’s Nexus devices are supposed to receive timely updates, but the staggered rollout means it can take weeks for devices to receive over-the-air (OTA) updates. Luckily, there’s a faster (and geekier) way to install the latest version of…

教你創建Google網站地圖Sitemap.xml(轉)

http://teachmyself.blog.163.com/blog/static/18881422920119895248288/ Sitemap.xml是 google搞出來的,也就是網站地圖,不過這個網站地圖是用xml寫的,而且要按google的標準來寫,并且要將寫出來的這個文件 sitemap.xml上傳到自己…

Oracle存儲過程語法

創建基本的存儲過程 1 CREATE OR REPLACE PROCEDURE MyProName IS 2 BEGIN 3 NULL; 4 END; 行1:CREATE OR REPLACE PROCEDURE 是一個SQL語句通知Oracle數據庫去創建一個叫做skeleton存儲過程, 如果存在就覆蓋它; 行2:IS關鍵詞表明后面將跟隨一個PL/SQL體。 行3:BEGIN關鍵詞表…

WPF-16 圖形處理

我們這節主要介紹WPF常用畫圖標簽,由于WPF圖形處理設計大量篇幅 ,我們在這里拋磚引玉,具體更多的學習資料鏈接https://github.com/microsoft/WPF-Samples/tree/master/Graphics 該鏈接中微軟提供了大量的學習Demo,WPF圖形處理最大的區別在于…

powershell 文件/文件夾操作

新建文件夾 New-Item -ItemType Directory -Force -Path $TargetPath復制文件夾到另外文件夾 Copy-Item <源文件夾> <新文件夾> -recurse -force 復制文件&#xff08;與修改文件名&#xff09; // 達到復制文件到新文件夾&#xff0c;及修改文件名效果 copy-…

純CSS制作各種各樣的網頁圖標(三角形、暫停按鈕、下載箭頭、加號等)

三角形 <div class"box"></div> <style>.box{ width: 0;height: 0;border-top: 50px solid transparent;border-bottom: 50px solid transparent;border-left: 50px solid transparent;border-right: 50px solid red; } </style> 平行四邊形…

您的MyFitnessPal帳戶幾乎肯定已被黑客入侵,請立即更改密碼

If you’re one of the millions of the 150 million MyFitnessPal users, bad news: hackers have your email address, your user name, and your hashed password. 如果您是1.5億MyFitnessPal用戶中的數百萬用戶之一&#xff0c;那么這是個壞消息&#xff1a;黑客擁有您的電…

Oracle Grid 11.2.0.4 安裝是出現INS-30510: Insufficient number of ASM disks selected.

最新文章&#xff1a;Virsons Blog 錯誤的原因是由于磁盤數和冗余層級不匹配&#xff1a; 如果創建用來存放OCR和VOTEDISK的ASM磁盤組&#xff0c;那么External、Normal、High三種冗余級別對應的Failgroup個數是1、3、5。也就是說&#xff0c;創建這三種冗余級別的磁盤組至少分…

動態編譯庫 Natasha 5.0 版本發布

動態編譯庫 Natasha 5.0 于十月份發布&#xff0c;此次大版本更新帶來了強大的兼容性支持&#xff0c;目前 Natasha 已支持 .NET Standard 2.0 及 .NET Core 3.1 以上版本&#xff08;包括 .NET Framework&#xff09;了。引入項目NuGet\Install-Package DotNetCore.Natasha.CS…

著名軟件公司的java筆試算法題!(含參考答案)

原題如下&#xff1a;用1、2、2、3、4、5這六個數字&#xff0c;用java寫一個main函數&#xff0c;打印出所有不同的排列&#xff0c;如&#xff1a;512234、412345等&#xff0c;要求&#xff1a;"4"不能在第三位&#xff0c;"3"與"5"不能相連.…

django08: 視圖與路由(舊筆記)

視圖&#xff08;Views&#xff09; https://www.cnblogs.com/liwenzhou/articles/8305104.html 1.CBV和FBV 2.?????上傳文件示例 路由 https://www.cnblogs.com/liwenzhou/p/8271147.html 1.url正則表達 2.分組命名匹配&#xff08;參數&#xff09; 3.反向解析 …

【BZOJ1042】硬幣購物(動態規劃,容斥原理)

【BZOJ1042】硬幣購物&#xff08;動態規劃&#xff0c;容斥原理&#xff09; 題面 BZOJ Description 硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西&#xff0c;去了tot次。每次帶di枚ci硬幣&#xff0c;買s i的價值的東西。請問每次有多少種付款方法。 In…

ios 啟用 證書_如何在iOS 10中啟用就寢提醒,輕柔的喚醒和睡眠跟蹤

ios 啟用 證書If you have trouble regularly getting a full night’s sleep, the new Bedtime feature in iOS 10 might just help. Set a wake up time and how many hours of sleep you need, and iOS offers bedtime reminders, more gentle alarms, and basic sleep trac…

struts OGNL表達式

OGNLContext對象有兩部分構成 一部分是ROOT&#xff1a;可以放置任何對象作為ROOT 另外一部分Context&#xff1a;必須是Map形式&#xff08;鍵值對&#xff09; OGNL表達式操作 package cn.future.a_ognl;import java.util.HashMap; import java.util.Map;import ognl.Ognl; i…