???? 在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);
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);
int unlink(const char* pathname);如果執行成功,則返回0,否則返回-1。當對文件進行解除鏈接操作時,需要對該文件所在的目錄具有寫權限和執行權限。remove和rename函數分別用來刪除文件和對文件進行重新命名。
???? 符號鏈接和硬鏈接不同,符號鏈接類似于windows中的快捷方式,可以建立指向任意一個文件和目錄的符號鏈接,即使該文件不存在也沒關系。但是硬連接要求文件必須存在,并且一般不允許建立到目錄的硬鏈接。建立一個符號鏈接的函數是symlink,它的函數原型是:
int symlink(const char* actualpath,const char* sympath);
數據結構讀書筆記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。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态