linux 檔案操作

來源:互聯網
上載者:User

1,檔案類型

 linux 檔案可以分6類,普通檔案(按內部結構可分為:文字檔,二進位檔案),目錄檔案,連結檔案,裝置檔案(根據訪問資料方式的不同可分為: 塊裝置檔案,字元裝置檔案),管道檔案(主要用於不同進程間的資訊傳遞),通訊端(socket) 檔案(該檔案類型與網路通訊有關)。

2,檔案的相關資訊

 檔案目錄結構:

系統每個目錄都處於一定的目錄結構中,該結構含有目錄中所有的目錄項的列表。每個目錄項都含有一個名稱和索引節點。

索引節點:

linux中所有檔案都有一個與之相連的索引節點(inode)。索引節點是用來儲存檔案資訊的,包含以下資訊:

*檔案使用的裝置號

*索引節點號

* 檔案的位元組數

* 檔案擁有者的User ID

* 檔案的Group ID

* 檔案的讀、寫、執行許可權

* 檔案的時間戳記,共有三個:ctime指inode上一次變動的時間,mtime指檔案內容上一次變動的時間,atime指檔案上一次開啟的時間。

* 連結數,即有多少檔案名稱指向這個inode

* 檔案資料block的位置

系統定義了stat結構體來存放這些資訊

 struct stat {
               dev_t     st_dev;     /* ID of device containing file */
               ino_t     st_ino;     /* inode number */
               mode_t    st_mode;    /* protection */
               nlink_t   st_nlink;   /* number of hard links */
               uid_t     st_uid;     /* user ID of owner */
               gid_t     st_gid;     /* group ID of owner */
               dev_t     st_rdev;    /* device ID (if special file) */
               off_t     st_size;    /* total size, in bytes */
               blksize_t st_blksize; /* blocksize for file system I/O */
               blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
               time_t    st_atime;   /* time of last access */
               time_t    st_mtime;   /* time of last modification */
               time_t    st_ctime;   /* time of last status change */
           };

st_dev 代表包含這個檔案名稱和相應的索引節點的檔案系統的裝置號。st_rdev 則只有字元裝置檔案或塊裝置檔案才具有,表示的是實際裝置的裝置號。

資料:

通常檔案中包含一定的資料,普通檔案和目錄檔案都有相應的硬碟地區儲存資料。這些資料是儲存在由索引節點指定的位置上的。而其他一些特殊檔案,如裝置檔案等,並不具有這樣的在硬碟上的儲存地區。

虛擬檔案系統VFS
   
    linux支援的所有檔案系統稱為邏輯檔案系統,而linux在傳統的邏輯檔案系統的基礎上增加料一個蓄念檔案系統( Vitual File System ,VFS) 的介面層。
    虛擬檔案系統(VFS) 位於檔案系統的最上層,管理各種邏輯檔案系統,並可以屏蔽各種邏輯檔案系統之間的差異,提供統一檔案和裝置的提供者。

讀檔案目錄

#include <dirent.h>struct dirent *readdir(DIR *dirp);

readdir() 函數返回一個代表目錄 dirp 裡下一個項目的指向
dirent結構的指標。如果到達目錄流結尾或出錯它返回 NULL。

在 Linux 系統裡,dirent 結構定義如下:

struct dirent {    ino_t          d_ino;       /* inode number */    off_t          d_off;       /* 下一個項目的位移 */    unsigned short d_reclen;    /* 本記錄的長度 */    unsigned char  d_type;      /* 檔案類型;不是被所有檔案系統支援 */    char           d_name[256]; /* 檔案名稱 */};

如:

 while((pdirent=readdir(pdir))!=NULL)
   {
       printf("%s\n",pent->d_name);
   }   

c == 優先順序高於=

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.