[APUE] 第四章習題解答

4.1 用stat函數替換程序4-1中的lstat函數,如若命令行參數之一是符號鏈接,會發生什麼變化。

lstat不會跟隨符號鏈接,因此,它所得到的屬性就是鏈接文件本身的屬性。如果換成了stat,就是符號鏈接所引用的文件的屬性了。


4.2 如果文件模式創建屏蔽字是777,結果會怎麼樣?用shell的umask命令驗證該結果。

如果文件模式創建屏蔽字是777,那麼創建的文件或者目錄沒有任何權限,甚至,對於目錄來說,創建了目錄之後,不能使用ls命令查看目錄裏面的內容。


4.5 4.12節中講到一個普通文件的大小可以爲0,同時我們又知道st_size字段是爲目錄或者符號鏈接定義的,那麼目錄和符號鏈接的長度是否可以爲0?



4.7 在4.12節ls命令的輸出中,core和core.copy的訪問權限不相同,如果創建兩個文件時umask沒有變,說明爲什麼會產生這種差別。

core是之前創建的,而core.copy是是採用cat命令拷貝的,是新創建的文件,它採用的是默認的創建屏蔽字,兩個不同,說明新創建的這個文件並沒有繼承原來文件的訪問權限位。


4.8 在運行程序清單4-5中的程序時,使用了df命令來檢查空閒的磁盤空間。爲什麼不使用du命令?

du命令是通過將指定文件系統中所有的目錄、符號鏈接和文件使用的塊數累加得到該文件系統使用的總塊數。

df命令是通過查看文件系統中磁盤塊分配圖得出總塊數和剩餘塊數。

因此,du得到的結果並沒有考慮如索引節點、目錄項等使用的空間,而df是從總體上考慮了所有使用的空間,df比du更加精確。


4.9 表4-11中顯示unlink函數會修改文件狀態改變時間,這是怎樣發生的?

因爲unlink會修改索引節點的引用計數,所以它會修改文件狀態改變時間。


4.10 4.21節中,系統對可打開文件數的限制對myftw函數會產生什麼影響?

在myftw中調用了dopath,在dopath中調用了opendir:opendir打開一個目錄,但是opendir底層使用文件描述符來訪問目錄本身,因此,如果系統對可打開文件數有限制,那麼,opendir可能會因爲文件描述符不夠而調用失敗。


4.12 每個進程都有一個根目錄用於解析絕對路徑名,可以通過chroot函數改變根目錄。在手冊中查閱此函數,說明這個函數什麼時候有用。

chroot可以改變進程所在的根目錄,在解析路徑時,從根目錄開始解析。使用chroot可以限制用戶所訪問的範圍,增強系統的安全性,建立一個與原目錄隔離的目錄結構,方便用戶的開發。


4.13 如何使用utime函數只設置兩個時間值中的一個?

用stat獲取三個時間,然後在使用utime時,不想改變的就設置爲stat獲取的時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章