• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            PIGWORLD

            學無止境

            1.4 文件與目錄

            1.4 文件與目錄

            文件系統

            UNIX文件系統是按層次安排目錄和文件的。起始目錄被稱為根(root),它的名字是一個字符 /

            目錄是一個包含目錄項的文件。在邏輯上,可以認為每個目錄項都包含一個文件名,同時還包含說明該文件屬性的信息。文件屬性是:文件類型,文件長度,文件所有者,文件的許可權(例如,其他用戶能否能訪問該文件),文件最后的修改時間等。startfstat函數返回一個包含所有文件屬性的信息結構。第4章將詳細說明文件的各種屬性。

            目錄項事實上存儲在磁盤上,對此區別于目錄項的邏輯看法。多數UNIX文件系統的實現并不在目錄項中存儲該目錄項自己的屬性,因為當文件有很多硬連接的時候,很難做到同步保存該文件的屬性。當我們在第四章討論硬連接后,對此將有清晰的認識。

            文件名

            目錄中的各個名字被稱為文件名。唯一兩個不能出現在文件名中的字符是反斜杠(/)和空字符(null)。反斜杠用來把文件名從路徑名中區別出來,空字符用來結束一個路徑名。因此,把文件名中可用的字符限制在一般打印字符的子集中是一個好習慣。(我們限制可用字符還因為,如果我們在文件名中使用了shell的特殊字符,我們就必須使用shell的引號機制來引用文件名,這將導致問題復雜化。)

            被反斜桿區分開,并且可選的以反斜桿開頭一個或多個文件名的序列,構成了路徑名。以反斜桿起頭的路徑名稱為絕對路徑;否則,稱為相對路徑。相對路徑涉及到的文件相對于當前目錄。文件系統的根(/)的名字是絕對路徑的特例,它沒有文件名。

            例子

            列出一個目錄中所有文件的名字并不困難。圖1.3展示了ls1)命令實現的本質。

            ls1)符號是UNIX系統手冊的一般表示方法,用來引用特定的項。它引用第一小節中的ls項。小節號通常用數字18表示,同時每一小節中的所有項都是按字母順序排列的。本書中,我們假定你有一份你的UNIX系統手冊的拷貝。

            歷史上,UNIX系統把所有8個小節集中在UNIX程序員手冊中。隨著頁數的增加,趨勢變為把各節安排在不同的手冊中:例如一份為用戶準備的,一份為程序員準備的,一份為系統管理員準備的。

            一些UNIX系統使用大寫字母在已有的小節中進一步細分手冊。舉例來說,所有AT&T中的標準輸出/輸入(I/O)函數在3S小節中,比如fopen3S)。其它系統用字母來代替數字表示小節號,例如用C表示命令。

            今天,許多手冊用電子形式進行發行。如果你的手冊是聯機手冊,查看手冊中ls命令的方式或許是這樣的:

            man  1  ls

            或者

            man  s1  ls

            1.3是一個程序,其打印出目錄中各個文件的名字。如果源碼文件的名字是myls.c,我們按照以下方式把它編譯成默認的可執行文件a.out

            cc  myls.c

            cc1)是早期的C編譯器。在支持GNU C編譯器的系統上,gcc1)是C編譯器。這里,cc通常與gcc相連接(譯者注:原句是Herecc is often linked to gcc。沒翻譯好,期待哪位大蝦指教)。

            一些輸出例子如下:

            $ ./a.out /dev

            .

            ..

            console

            tty

            mem

            kmem

            null

            mouse

            stdin

            stdout

            stderr

            zero

            省略其它未顯示的行

            cdrom

            $ ./a.out /var/spool/cron

            can’t open /var/spool/cron: Permission denied

            $ ./a.out .dev/tty

            can’t open /dev/tty: Not a directory

            像上面那樣,我們會以如下的方式展示運行的命令和該命令的輸出:輸入的字符以紅色加粗字體顯示,而程序的輸出以紅色字體顯示。如果對于輸出需要加注釋,我們會以紅色斜體字體顯示注釋。輸入行前面的美元符號是shell打印出來的提示符。我們始終使用美元符號作為shell提示符。

            注意文件名并沒有按照字母順序輸出。而ls命令會在打印名字之前現對名字排序。

            在這個20行的程序中,許多細節應當被考慮:

            l         首先,我們包含了一個我們自己編寫的頭文件:apue.h。幾乎本書中所有的程序都包含這個頭文件。該頭文件包含了一些標準系統頭文件,并且定義了本書例子中使用的數值常量和函數原型。該頭文件的清單在附錄B中。

            l         main函數的聲明使用了ISO C標準的風格。(下章中我們會談到更多ISO C標準。)

            l         我們從命令行得到參數argv[1]作為對象目錄的名字。在第七章,我們將看到main函數是怎樣被調用的,同時看到命令行參數和環境變量是如何傳遞給程序的。

            l         由于不同UNIX系統的目錄項格式不盡相同,我們使用opendir函數,readdir函數和closedir函數來操作目錄。

            l         opendir函數返回DIR結構的指針,并傳遞該指針給readdir函數。不必關心DIR結構的細節。接著在循環中調用readdir函數,用來讀取每個目錄項。readdir函數返回一個dirent結構的指針,否則,在無目錄項可讀時返回null指針。我們只需要檢查dirent結構中每個目錄項的名字(d_name)。使用這個名字,我們就可以調用stat函數(4.2節介紹)來確定文件的所有屬性。

            l         我們調用兩個我們自己編寫的函數來處理錯誤:err_syserr_quit。從圖1.3的輸出中我們可以看到,err_sys函數打印出了豐富的信息來描述遇到的錯誤(“Permission denied”和“Not a directory”)。附錄B中列出了這兩個錯誤處理函數。在1.7節中我們將更詳細的談到錯誤處理。

            l         當程序完成時,以參數0調用exit函數。exit函數結束一個程序。通常,參數0意味者正常結束,而1255之間的參數意味著發生了錯誤。8.5節中,我們將會學習一個程序(比如shell或者我們自己寫的程序)如何獲得另一個正在執行中的程序的exit狀態。

            http://pigworld.blogbus.com/files/1136135551.jpg

            1.3 列舉出一個目錄中的所有文件

            工作目錄

            每個進程都有一個工作目錄,有時又稱為當前工作目錄。所有的相對路徑都從該目錄開始。一個進程能夠用chdir函數改變它的工作目錄。

            例如,相對路徑doc/memo/joe指出memo目錄中的文件或目錄joememo目錄又在doc目錄中,而doc一定是工作目錄下的一個目錄。查看這個相對路徑,我們知道docmemo一定是目錄,但是我們不能確定joe是一個文件還是一個目錄。路徑/usr/lib/lint是一個絕對路徑,它指出了lib目錄中的文件或目錄lintlib目錄在usr目錄中,而usr目錄又在根(root)目錄中。

            起始(Home)目錄

            當我們登錄時,工作目錄被設定為我們的起始目錄。我們的起始目錄是從密碼文件(1.3節介紹)中我們的登錄項得到的。

            posted on 2006-01-03 22:00 PIGWORLD 閱讀(991) 評論(0)  編輯 收藏 引用 所屬分類: 《UNIX環境高級編程(第二版)》翻譯

            一本久久久久久久| 人妻无码久久一区二区三区免费| 亚洲精品tv久久久久久久久| 久久婷婷五月综合成人D啪| 精品久久久久久国产潘金莲| 99久久精品无码一区二区毛片 | 色综合久久综合中文综合网| 伊人久久综合成人网| 72种姿势欧美久久久久大黄蕉| 伊人久久综合热线大杳蕉下载| 欧洲国产伦久久久久久久| 久久精品国产亚洲av麻豆蜜芽| 久久精品嫩草影院| 久久久无码精品亚洲日韩京东传媒 | 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲精品国精品久久99热一| 久久线看观看精品香蕉国产| 久久无码高潮喷水| 亚洲国产天堂久久综合网站| 色婷婷久久综合中文久久蜜桃av| 国产L精品国产亚洲区久久 | 国产成人久久久精品二区三区 | 伊人久久大香线蕉综合网站| 久久九九亚洲精品| 久久er99热精品一区二区| 久久人人爽人人爽人人片av麻烦| 国产精品九九久久免费视频 | 亚洲国产精品无码久久久秋霞2 | 久久WWW免费人成一看片| 久久夜色精品国产www| 久久久精品视频免费观看| 久久精品国产亚洲综合色| 久久精品九九亚洲精品| 亚洲愉拍99热成人精品热久久| 日本精品久久久久影院日本| 久久99精品久久久久久秒播 | 免费无码国产欧美久久18| 欧美久久亚洲精品| 亚州日韩精品专区久久久| 香蕉aa三级久久毛片| 国产色综合久久无码有码|