ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Linux应用软件编程 目录IO

Linux应用软件编程 目录IO 目录IO目录 IO 用于操作 Linux 目录文件夹读取目录下的文件列表、创建目录。 头文件#include dirent.h // opendir readdir closedir#include sys/stat.h // mkdir一、核心概念DIR *目录流指针类似文件 IO 的文件描述符、标准 IO 的FILE*。struct dirent结构体保存读取到的目录项信息文件名、inode 号、文件类型等。struct dirent 结构体struct dirent { ino_t d_ino; /* inode编号 */ off_t d_off; unsigned short d_reclen; unsigned char d_type; /* 文件类型 */ char d_name[256]; /* 文件/目录名字字符串 */ };重点成员d_inoinode 节点号d_name[256]目录下的文件名最重要成员d_type文件类型二、目录操作函数1. opendir () 打开目录DIR *opendir(const char *name);功能打开一个目录获得目录流指针参数name目录路径字符串返回值 ✅成功DIR*目录流指针 ❌失败NULL2. readdir () 读取目录项struct dirent *readdir(DIR *dirp);功能读取目录流中的一条目录项一个文件 / 子文件夹信息调用一次读一条内部自动后移。参数dirpopendir 返回的目录流指针返回值 ✅成功返回struct dirent *结构体指针拿到当前文件信息 ❌读到目录末尾 / 出错返回NULL注意会读到.(当前目录)、..(上一级目录)业务代码一般要过滤掉。3. closedir () 关闭目录int closedir(DIR *dirp);功能关闭已经打开的目录流释放资源参数目录流指针返回成功返回0失败返回‑14. mkdir () 创建目录int mkdir(const char *pathname, mode_t mode);功能创建一个文件夹目录文件参数实际权限 mode ~umaskpathname要创建的目录名路径mode目录权限八进制如0775目录必须有执行权限才能进入访问返回成功0失败‑1三、完整示例代码遍历目录打印目录内所有文件名#include stdio.h#include dirent.hint main(void){//打开目录 DIR *pdir opendir(/dev);if (NULL pdir){perror(opendir);return -1;}struct dirent *pinfo;while( (pinfo readdir(pdir)) ! NULL ){//过滤 . 和 .. if(pinfo-d_name[0] .) continue;printf(文件名:%s inode号:%ld\n, pinfo-d_name, pinfo-d_ino);}closedir(pdir);return 0;}四、配套 shell 命令对照C 函数shell 命令作用mkdir()mkdir 目录名创建文件夹opendir/readdirls读取列出目录内容五、易错点总结readdir读到.和..业务程序一般要过滤否则会打印这两个虚拟目录。目录权限必须带执行位例如0775如果权限设置为0664无法进入访问目录。opendir 打开后必须调用closedir关闭避免资源泄露。readdir 返回的结构体是库内部静态空间不要自己 free。
返回列表