- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下DIR,dirent,stat等结构体详解
摘自:/2012/05/13/linux-system-function-files-operation/最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅。首先说说DIR这一结构体,以下为DIR结构体的定义:struct?__dirstream??{?void?*__fd;?char?*__data;?int?__entry_data;?char?*__ptr;?int?__entry_ptr;?size_t?__allocation;?size_t?__size;?__libc_lock_define?(,?__lock)?};?typedef?struct?__dirstream?DIR;???DIR结构体类似于FILE,是一个内部结构,以下几个函数用这个内部结构保存当前正在被读取的目录的有关信息(摘自《UNIX环境高级编程(第二版)》)。函数 DIR *opendir(const char *pathname),即打开文件目录,返回的就是指向DIR结构体的指针,而该指针由以下几个函数使用:?struct?dirent?*readdir(DIR?*dp);?void?rewinddir(DIR?*dp);?int?closedir(DIR?*dp);?long?telldir(DIR?*dp);?void?seekdir(DIR?*dp,long?loc);???关于DIR结构,我们知道这么多就可以了,没必要去再去研究他的结构成员。接着是dirent结构体,首先我们要弄清楚目录文件(directory file)的概念:这种文件包含了其他文件的名字以及指向与这些文件有关的信息的指针(摘自《UNIX环境高级编程(第二版)》)。从定义能够看出,dirent不仅仅指向目录,还指向目录中的具体文件,readdir函数同样也读取目录下的文件,这就是证据。以下为dirent结构体的定义:?struct?dirent?{ long?d_ino;?/*?inode?number?索引节点号?*/? ??off_t?d_off;?/*?offset?to?this?dirent?在目录文件中的偏移?*/? ??unsigned?short?d_reclen;?/*?length?of?this?d_name?文件名长?*/? ??unsigned?char?d_type;?/*?the?type?of?d_name?文件类型?*/? ??char?d_name?[NAME_MAX+1];?/*?file?name?(null-terminated)?文件名,最长255字符?*/?}???从上述定义也能够看出来,dirent结构体存储的关于文件的信息很少,所以dirent同样也是起着一个索引的作用,如果想获得类似ls -l那种效果的文件信息,必须要靠stat函数了。通过readdir函数读取到的文件名存储在结构体dirent的d_name成员中,而函数int stat(const char *file_name, struct stat *buf);的作用就是获取文件名为d_name的文件的详细信息,存储在stat结构体中。以下为stat结构体的定义:?struct?stat?{??mode_t?st_mode;//文件访问权限????ino_t?st_ino;//索引节点号????dev_t?st_dev;//文件使用的设备号????dev_t?st_rdev;//设备文件的设备号????nlink_t?st_nlink;//文件的硬连接数????uid_t?st_uid;//所有者用户识别号????gid_t?st_gid;//组识别号????off_t?st_size;//以字节为单位的文件容量????time_t?st_atime;//最后一次访问该文件的时间????time_t?st_mtime;//最后一次修改该文件的时间????time_t?st_ctime;//最后一次改变该文件状态的时间????blksize_t?st_blksize;//包含该文件的磁盘块的大小????blkcnt_t?st_blocks;//该文件所占的磁盘块????};???这个记录的信息就很详细了吧,呵呵。最后,总结一下,想要获取某目录下(比如a目下)b文件的详细信息,我们应该怎样做?首先,我们使用opendir函数打开目录a,返回指向目录a的DIR结构体c。接着,我们调用readdir( c)函数读取目录a下所有文件(包括目录),返回指向目录a下所有文件的dirent结构体d。然后,我们遍历d,调用stat(d-name,stat *e)来获取每个文件的详细信息,存储在stat结构体e中
文档评论(0)