免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Linux下DIR,dirent,stat等結(jié)構(gòu)體詳解

首先說說DIR這一結(jié)構(gòu)體,以下為DIR結(jié)構(gòu)體的定義:

  1. struct __dirstream
  2.    {
  3.     void *__fd;
  4.     char *__data;
  5.     int __entry_data;
  6.     char *__ptr;
  7.     int __entry_ptr;
  8.     size_t __allocation;
  9.     size_t __size;
  10.     __libc_lock_define (, __lock)
  11.    };
  12. typedef struct __dirstream DIR;

 

DIR結(jié)構(gòu)體類似于FILE,是一個內(nèi)部結(jié)構(gòu),以下幾個函數(shù)用這個內(nèi)部結(jié)構(gòu)保存當(dāng)前正在被讀取的目錄的有關(guān)信息(摘自《UNIX環(huán)境高級編程(第二版)》)。函數(shù) DIR *opendir(const char *pathname),即打開文件目錄,返回的就是指向DIR結(jié)構(gòu)體的指針,而該指針由以下幾個函數(shù)使用:

 

  1. struct dirent *readdir(DIR *dp);
  2. void rewinddir(DIR *dp);
  3. int closedir(DIR *dp);
  4. long telldir(DIR *dp);
  5. void seekdir(DIR *dp,long loc);

 

關(guān)于DIR結(jié)構(gòu),我們知道這么多就可以了,沒必要去再去研究他的結(jié)構(gòu)成員。

接著是dirent結(jié)構(gòu)體,首先我們要弄清楚目錄文件(directory file)的概念:這種文件包含了其他文件的名字以及指向與這些文件有關(guān)的信息的指針(摘自《UNIX環(huán)境高級編程(第二版)》)。從定義能夠看出,dirent不僅僅指向目錄,還指向目錄中的具體文件,readdir函數(shù)同樣也讀取目錄下的文件,這就是證據(jù)。以下為dirent結(jié)構(gòu)體的定義:

 

  1. struct dirent
  2. {
  3.   long d_ino; /* inode number 索引節(jié)點號 */
  4.     off_t d_off; /* offset to this dirent 在目錄文件中的偏移 */
  5.     unsigned short d_reclen; /* length of this d_name 文件名長 */
  6.     unsigned char d_type; /* the type of d_name 文件類型 */
  7.     char d_name [NAME_MAX+1]; /* file name (null-terminated) 文件名,最長255字符 */
  8. }

 

從上述定義也能夠看出來,dirent結(jié)構(gòu)體存儲的關(guān)于文件的信息很少,所以dirent同樣也是起著一個索引的作用,如果想獲得類似ls -l那種效果的文件信息,必須要靠stat函數(shù)了。

通過readdir函數(shù)讀取到的文件名存儲在結(jié)構(gòu)體dirent的d_name成員中,而函數(shù)

int stat(const char *file_name, struct stat *buf);

的作用就是獲取文件名為d_name的文件的詳細(xì)信息,存儲在stat結(jié)構(gòu)體中。以下為stat結(jié)構(gòu)體的定義:

 

  1. struct stat {
  2.         mode_t     st_mode;       //文件訪問權(quán)限
  3.         ino_t      st_ino;       //索引節(jié)點號
  4.         dev_t      st_dev;        //文件使用的設(shè)備號
  5.         dev_t      st_rdev;       //設(shè)備文件的設(shè)備號
  6.         nlink_t    st_nlink;      //文件的硬連接數(shù)
  7.         uid_t      st_uid;        //所有者用戶識別號
  8.         gid_t      st_gid;        //組識別號
  9.         off_t      st_size;       //以字節(jié)為單位的文件容量
  10.         time_t     st_atime;      //最后一次訪問該文件的時間
  11.         time_t     st_mtime;      //最后一次修改該文件的時間
  12.         time_t     st_ctime;      //最后一次改變該文件狀態(tài)的時間
  13.         blksize_t st_blksize;    //包含該文件的磁盤塊的大小
  14.         blkcnt_t   st_blocks;     //該文件所占的磁盤塊
  15.       };

最后,總結(jié)一下,想要獲取某目錄下(比如a目下)b文件的詳細(xì)信息,我們應(yīng)該怎樣做?

首先,我們使用opendir函數(shù)打開目錄a,返回指向目錄a的DIR結(jié)構(gòu)體c。

接著,我們調(diào)用readdir( c)函數(shù)讀取目錄a下所有文件(包括目錄),返回指向目錄a下所有文件的dirent結(jié)構(gòu)體d。

然后,我們遍歷d,調(diào)用stat(d->name,stat *e)來獲取每個文件的詳細(xì)信息,存儲在stat結(jié)構(gòu)體e中。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Linux C :遍歷輸出指定目錄下的所有文件
linux下遍歷目錄樹方法總結(jié)
dirent結(jié)構(gòu) --文件夾相關(guān) - lizzy115的日志 - 網(wǎng)易博客
Linux C函數(shù)之文件及目錄函數(shù)(2)
操作系統(tǒng)第四次實驗報告——文件系統(tǒng)之使用LinuxAPI實現(xiàn)ls -lai命令
在Linux下和Windows下遍歷目錄的方法及如何達(dá)成一致性操作
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服