python讀書筆記,文件和目錄(二)--unix環境高級編程讀書筆記

 2023-11-19 阅读 24 评论 0

摘要:???? 在linux中,文件的相關信息都記錄在stat這個結構體中,文件長度是記錄在stat的st_size成員中。對于普通文件,其長度可以為0,目錄的長度一般為1024的倍數,這與linux文件系統中block的大小是有關系的,符號鏈接的長度是它所指向的文

???? 在linux中,文件的相關信息都記錄在stat這個結構體中,文件長度是記錄在stat的st_size成員中。對于普通文件,其長度可以為0,目錄的長度一般為1024的倍數,這與linux文件系統中block的大小是有關系的,符號鏈接的長度是它所指向的文件名字的長度。

???? 文件的截短可以在使用open函數時,用O_TRUNC標記,這樣將會在打開文件時將文件的內容清空。linux專門為我們提供了兩個函數以指定定的長度打開文件:

int truncate(const char* pathname,off_t len);
int ftruncate(int filedes,off_t len);

如果函數執行成功,則返回0,否則返回-1。如果文件的長度大于指定的長度,則直接將文件截短即可,否則就可能會產生空洞文件。

python讀書筆記、

???? 與linux的文件系統相關的術語得先說清楚:

1.inode節點:用來記錄與文件相關的一系列信息,包括文件的所有者,權限,文件長度以及文件在磁盤中的位置等,每個文件只有一個i節點
2.目錄項:用來記錄文件名和文件的inode節點號
3.block:用來記錄文件的實際內容,它在磁盤上的位置由inode來指示。它的大小為1,2,4Kbyte
目錄項,inode節點和block的關系如下:

unix環境高級編程第三版pdf?這幅圖取自《unix環境高級編程》,我們可以看到目錄項中包含i節點編號及文件的名字,而inode節點中有包括了文件在磁盤中數據塊的位置,這就是基本的linux中文件系統的架構圖。我們注意到在圖中有兩個不同的目錄項指向同一個inode節點,這在是允許的,這種情況稱為硬連接,不管刪除了哪一個目錄項,只有還有一個存在,就可以訪問該文件。與之對應的還有一種連接,稱為符號鏈接。在inode節點中,存儲著一個與inode節點相鏈接目錄數。如上圖中的inode節點的連接數為2,因為有兩個目錄項指向該inode節點。對于一個空的目錄,指向該目錄的連接數為2,包括一個目錄項和表示當前目錄的“.”。如果該目錄中還有一個子目錄,則原目錄的連接數為3,因為子目錄中海報擴一個指向父目錄的“..”選項。所以說每當在一個目錄中建立一個子目錄,該目錄的連接數將會加1。
???? 任何一個文件可以有多個目錄項指向其inode節點,創建一個指向文件的鏈接需要使用link函數,它的函數原型如下:

int link(const char* existingpath,const char* newpath);

如果函數執行成功,則返回0,否則返回-1。解除一個文件的鏈接使用unlink函數,這個函數在執行完成后,會檢查指向inode中的連接數目,若為0,當進程結束后,則將文件從磁盤上刪除,否則不刪除。它的函數原型如下:
int unlink(const char* pathname);
如果執行成功,則返回0,否則返回-1。當對文件進行解除鏈接操作時,需要對該文件所在的目錄具有寫權限和執行權限。remove和rename函數分別用來刪除文件和對文件進行重新命名。

???? 符號鏈接和硬鏈接不同,符號鏈接類似于windows中的快捷方式,可以建立指向任意一個文件和目錄的符號鏈接,即使該文件不存在也沒關系。但是硬連接要求文件必須存在,并且一般不允許建立到目錄的硬鏈接。建立一個符號鏈接的函數是symlink,它的函數原型是:

int symlink(const char* actualpath,const char* sympath);

讀取一個符號鏈接的方法是readlink,它不會跟隨符號鏈接指向的文件,返回的是符號鏈接本身的信息,即它所指向的文件的名字。

數據結構讀書筆記5000、

???? 與文件相關的時間有三個,即stat中的三個成員:st_atime,st_mtime,st_ctime。st_atime表示最后一次存取文件的時間,一般為最后一次讀操作的時間。st_mtime為文件內容最后一次修改的時間,比如寫操作就會造成這個時間的改變。st_ctime是文件狀態最后一次改變的時間,引起這個時間變化的函數為chmod,chown等。utime函數可以用來修改前面兩個時間的值,但是不能修改st_ctime的值,這個值是由系統自己改變的。

???? mkdir和rmdir用來創建和刪除目錄。在對目錄進行讀操作的時候,會涉及到下面的四個函數,opendir,readdir,closedir,rewinddir。改變進程的工作目錄可以使用函數chdir和fchdir,獲得進程的當前工作目錄可以使用getcwd。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/183628.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息