Linux下C语言获取目录中的文件列表

网友投稿 1049 2022-08-28

Linux下C语言获取目录中的文件列表

Linux下C语言获取目录中的文件列表

Linux下C语言获取目录中的文件列表

分类:编程语言

代码如下:Linux下使用GCC 编译即可

#include #include #include #include int main(){ DIR *dir; struct dirent *ptr; dir = opendir("/home/zhangyang/kmeans"); while((ptr = readdir(dir)) != NULL) printf("d_name: %s\n", ptr->d_name); closedir(dir); return 0;}

注意:假设要读取的目录中有多个文件,文件名分别为:1.bin, 2.bin, 3.bin,.....99.bin等

程序的读取顺序是这样的:1.bin, 10.bin, 11.bin,....19.bin, 2.bin,

20.bin,...,29.bin,....99.bin

而不是我们所期望的1.bin, 2.bin, 3.bin,.....99.bin,可见文件的读取顺序是与文件名有关系的

如果想判断是否为文件夹或者文件,则可以使用如下代码:

struct stat info;stat(path,&info);if(S_ISDIR(info.st_mode)) printf("This is a directory");

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 filesystem I/O */ blkcnt_t st_blocks; /* number of 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 */ };

如下的Posix宏用于检测st_mode域的文件类型:

S_ISREG() regular file?S_ISDIR() directory?S_ISCHR() character device?S_ISBLK() block device?S_ISFIFO() FIFO (named pipe)?S_ISLNK() symbolic link?S_ISSOCK() socket?

注释:代码中的opendir函数和readdir函数如下所示:

opendir(打开目录)

相关函数

open,readdir,closedir,rewinddir,seekdir,telldir,scandir

表头文件

#include

#include

定义函数

DIR * opendir(const char * name);

函数说明

opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值。

返回值

成功则返回DIR* 型态的目录流,打开失败则返回NULL。

错误代码

EACCESS 权限不足

EMFILE 已达到进程可同时打开的文件数上限。

ENFILE 已达到系统可同时打开的文件数上限。

ENOTDIR 参数name非真正的目录

ENOENT 参数name 指定的目录不存在,或是参数name 为一空字符串。

ENOMEM 核心内存不足。

readdir(读取目录)

相关函数

open,opendir,closedir,rewinddir,seekdir,telldir,scandir

表头文件

#include

#include

定义函数

struct dirent * readdir(DIR * dir);

函数说明

readdir()返回参数dir目录流的下个目录进入点。

结构dirent定义如下

struct dirent

{

ino_t d_ino;

ff_t d_off;

signed short int d_reclen;

unsigned char d_type;

har d_name[256];

};

d_ino 此目录进入点的inode

d_off 目录文件开头至此目录进入点的位移

d_reclen _name的长度,不包含NULL字符

d_type d_name 所指的文件类型

d_name 文件名

返回值

成功则返回下个目录进入点。有错误发生或读取到目录文件尾则返回NULL。

附加说明

EBADF参数dir为无效的目录流

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:优维x统信软件,携手共建政企一体化IT运维解决方案
下一篇:oracle10G/11G官方下载地址集合 直接迅雷下载
相关文章

 发表评论

暂时没有评论,来抢沙发吧~