POSIX文件及目錄管理

□□實驗5.2.5 文件定位用lseek()函數實現以下功能

1.獲取文件大小

2.爲文件添加指定長度的空洞

3.在指定位置寫入指定內容

4.讀出指定位置的內容

程序代碼:


程序測試:



程序分析:用lseek();函數定位到文件末尾後40bit的位置寫入abc,添加了40bit的空洞;用lseek();函數定位到文件開頭後20 bit的位置寫入lalala。


□實驗5.3.2 scandir

用scandir()讀取目錄內容。只顯示以字母開頭的文件。

程序代碼:



程序測試:



程序分析:

參考網站:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=14949191&id=4786163


□□實驗5.2.7映射文件到內存

示例程序: mmap_file_and_insert.c

1.運行示例程序。給出運行結果及分析。

2.用映射文件到內存的方式實現以下功能:

a)刪除文件中的指定內容。

b)允許用戶輸入需要被刪除的位置。

程序1測試:


程序1分析:

將文件hello傳入,用lseek();函數獲得文件的大小,再定位到文件末尾添加大小爲1~2倍頁的大小,在空閒末尾寫入內容,將文件內容映射到內存,輸入添加內容,輸入添加內容的位置,用memmove函數移動要添加位置後面的所有信息,用mecpy函數再將添加內容加入,msync函數寫回磁盤,關閉映射,截斷文件,將多餘空間刪除。

程序2代碼:



程序2測試:



程序分析:

映射到內存,再用memmove函數覆蓋想要刪除的部分,最後寫回磁盤,關閉映射。


★★實驗5.2.8-2死鎖

1.用fcntl()對文件進行鎖操作,模擬一個死鎖的局面。

2.給出程序運行結果及分析。

程序分析:

Lock_1文件先在開頭設置長度爲10的寫鎖,若寫不成功則等待,sleep 10秒,再在文件開頭偏移20的位置設置長度爲10的寫鎖,若寫不成功則等待,sleep 10 秒。

Lock_2文件相反設置,兩文件同時運行,測試能否寫入成功。

 

程序測試:

第一個加鎖文件代碼(lock_1):




第二個加鎖文件代碼(lock_2):



測試結果:



測試結果並不像預期一樣,可能是Linux排除了死鎖的情況。




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