Linux下C语言获取目录中的文件列表
更新时间:2023-09-04 16:55:01 阅读量: 教育文库 文档下载
Linux下C语言获取目录中的文件列表
Linux下C语言获取目录中的文件列表
分类:编程语言
代码如下:Linux下使用GCC 编译即可
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <stdio.h>
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 */
Linux下C语言获取目录中的文件列表
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<sys/types.h>
#include<dirent.h>
定义函数
DIR * opendir(const char * name);
函数说明
opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下来对目录的读取和搜索都要使用此返回值。
返回值
成功则返回DIR* 型态的目录流,打开失败则返回NULL。
错误代码
EACCESS 权限不足
EMFILE 已达到进程可同时打开的文件数上限。
ENFILE 已达到系统可同时打开的文件数上限。
Linux下C语言获取目录中的文件列表
ENOTDIR 参数name非真正的目录
ENOENT 参数name 指定的目录不存在,或是参数name 为一空字符串。 ENOMEM 核心内存不足。
readdir(读取目录)
相关函数
open,opendir,closedir,rewinddir,seekdir,telldir,scandir
表头文件
#include<sys/types.h>
#include<dirent.h>
定义函数
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为无效的目录流
正在阅读:
Linux下C语言获取目录中的文件列表09-04
如何编制发改委立项用龙虾仁项目可行性研究报告(甲级-发改委-经信委-商务局-备案-核准)07-29
2007-2008操作系统试题B(答案)02-26
2015年吉林省普通玉米品种筛选试验方案06-09
企业研发准备金制度08-15
2018年人教版历史必修1 第7单元 第23课 学业分层测评05-21
龙吟凤禄--蛇年吉祥物06-13
普陀山潮音洞导游词03-03
1升2英语 - 图文06-17
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 获取
- 语言
- 文件
- 目录
- 列表
- Linux
- KND主轴驱动器定向角度调整
- 春风化雨润心田
- 01_1简要操作提示
- 八年级英语上册Unit7Willpeoplehaverobots第4课时SectionB2c_3c课时测试题新版人教新目标版
- 2017年自贡市公需科目《大数据时代的互联网信息安全》考试题及答案
- 第3章 酶动力学
- 微机原理习题答案8章
- (农大2016年)大学英语Ⅲ在线作业1,2
- 初、中级无损检测技术资格人员-超声检测考题汇编(一)
- 大学生饮食与营养健康
- 通过代码实例跟我学JFreeChart 图表组件——在Java应用程序中创建柱状图的应用实例(Eclipse开发工具版本)
- 广西壮族自治区义务教育学校教职工绩效考核指导意见(试行)
- 2014年高考各地历史试题全部15套试题含答案
- 沂源县鲁村镇校园交通安全管理制度汇编
- 施工升降机施工应急预案及危险源辨识措施
- 苏教版 一年级上册数学第八单元10以内的加法和减法单元教案及教学反思
- 书法写字比赛格式纸(10种模板)
- 泗县餐饮场所气瓶安全专项整治工作总结
- 图书管理系统用户需求说明书
- 三铁六律