博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINUX下用C语言历遍目录 C语言列出目录 dirent.h在C/C++中的使用
阅读量:7193 次
发布时间:2019-06-29

本文共 1348 字,大约阅读时间需要 4 分钟。

LINUX下历遍目录的方法一般是这样的
打开目录-》读取-》关闭目录
相关函数是
opendir -> readdir -> closedir
#include <dirent.h
>
DIR *opendir(const char *dirname
);
#include <dirent.h
>
struct dirent *readdir(DIR *dirp
);
#include <
dirent.h
>
int closedir(DIR *dirp
);
好了,三个函数都出来了呵呵,原型就是上面,给自己解释一下免得以后我自己忘了呵呵!我以经忘过好几回了,所以这次放上博客来
opendir用于打开目录,是类似于流的那种方式,返回一个指向DIR结构体的指针他的参数*dirname是一个字符数组或者字符串常量,
readdir函数用于读取目录,他只有一个参数,这个参数主opendir返回的结构体指针,或者叫句柄更容易理解些吧。这个函数也返回一个结构体指针 dirent *
dirent的结构如下定义
struct dirent
{
long d_ino;                     
off_t d_off;                    
unsigned short d_reclen;        
char d_name [NAME_MAX+1];       
}
结构体中d_ino存放的是该文件的结点数目,什么是结点数目呢我也说不清楚了呵呵,查一下其它资料了(这里应该不是节点数目,而是其下文件的索引节点号inode)
d_off 是文件在目录中的编移,具体是什么意思我也不是很明白,我很少用到它,其本上就是用到d_name ,short d_reclen是这个文件的长度,需要注意的是这里的长度并不是指文件大小,因为大小和长度是2回事了,你可以用lseek将文件长度移得很长,但大小其实还是那么大.最后一个元素就是我们要的了,文件名称!
写了一个实例:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <dirent.h>

void print_usage(void);

void print_usage(void)

{
printf("Usage: test dirname\n");
}

int main(int argc,char *argv[])

{
DIR * dp;
struct dirent *filename;

if (argc < 2)

{
print_usage();
exit(1);
}
dp = opendir(argv[1]);
if (!dp)
{
fprintf(stderr,"open directory error\n");
return 0;
}
while (filename=readdir(dp))
{
printf("filename:%-10s\td_info:%ld\t d_reclen:%us\n",
filename->d_name,filename->d_ino,filename->d_reclen);
}
closedir(dp);
return 0;
}

转载地址:http://brvkm.baihongyu.com/

你可能感兴趣的文章
Google论文之三----MapReduce
查看>>
SpringMVC的拦截器不起作用原因
查看>>
.Net刷新页面的几种方式
查看>>
mysql安装
查看>>
Thymeleaf入门基础
查看>>
第八天,培训结束了
查看>>
分享WinCE钩子封装库
查看>>
批量操作文本文件进行dos/unix格式转换
查看>>
thinkphp 随机获取一条数据
查看>>
vue生命周期
查看>>
初步使用分支、循环判断数字大小
查看>>
Hbase之修改表结构
查看>>
通过浏览器学习前端的小技巧
查看>>
APP开发之AngularJS学习
查看>>
Sass:RGB颜色函数-Mix()函数
查看>>
phpMyAdmin 错误 缺少 mysqli 扩展。请检查 PHP 配置
查看>>
Win7网上邻居提示未授予用户在此计算机上的请求登录类型解决办法
查看>>
golang包快速生成base64验证码
查看>>
Visual studio 下C++工程相关经验
查看>>
七、SSR(服务端渲染)
查看>>