news 2026/9/7 13:41:46

Linux应用软件编程 目录IO

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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_ino:inode 节点号

  • d_name[256]:目录下的文件名,最重要成员

  • d_type:文件类型

二、目录操作函数

1. opendir () 打开目录

DIR *opendir(const char *name);

  • 功能:打开一个目录,获得目录流指针

  • 参数:name目录路径字符串

  • 返回值: ✅成功:DIR*目录流指针 ❌失败:NULL

2. readdir () 读取目录项

struct dirent *readdir(DIR *dirp);

  • 功能:读取目录流中的一条目录项(一个文件 / 子文件夹信息),调用一次读一条,内部自动后移。

  • 参数:dirpopendir 返回的目录流指针

  • 返回值: ✅成功:返回struct dirent *结构体指针,拿到当前文件信息 ❌读到目录末尾 / 出错:返回NULL

注意:会读到.(当前目录)、..(上一级目录),业务代码一般要过滤掉。

3. closedir () 关闭目录

int closedir(DIR *dirp);

  • 功能:关闭已经打开的目录流,释放资源

  • 参数:目录流指针

  • 返回:成功返回0;失败返回‑1

4. mkdir () 创建目录

int mkdir(const char *pathname, mode_t mode);

  • 功能:创建一个文件夹(目录文件)

  • 参数

    实际权限 =mode & ~umask

    • pathname:要创建的目录名路径

    • mode:目录权限(八进制,如0775,目录必须有执行权限才能进入访问)

  • 返回:成功0;失败‑1

三、完整示例代码:遍历目录,打印目录内所有文件名

#include <stdio.h>

#include <dirent.h>

int 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/readdir

ls

读取列出目录内容

五、易错点总结

  1. readdir读到...,业务程序一般要过滤,否则会打印这两个虚拟目录。

  2. 目录权限必须带执行位,例如0775;如果权限设置为0664,无法进入访问目录。

  3. opendir 打开后,必须调用closedir关闭,避免资源泄露。

  4. readdir 返回的结构体是库内部静态空间,不要自己 free

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 13:41:38

探秘当下提供人工外贸独立站建站服务的专业机构!

在全球化浪潮下&#xff0c;外贸独立站已成为企业拓展海外市场的重要渠道&#xff0c;提供人工外贸独立站建站服务的专业机构也因此备受关注。上海凰启作为其中的佼佼者&#xff0c;凭借独特的服务模式和显著优势&#xff0c;在行业中占据一席之地。行业痛点与上海凰启的解决方…

作者头像 李华
网站建设 2026/8/30 23:02:29

无人机视觉系统实战:目标检测与跟踪的物理约束与部署优化

简介&#xff1a;目标检测与跟踪是计算机视觉的基础任务&#xff0c;但在无人机边缘端落地时&#xff0c;必须直面算力限制、运动耦合与空域干扰等物理约束。其核心原理不仅是算法匹配&#xff0c;更是传感器数据、飞控姿态与环境动态的联合建模&#xff1b;技术价值在于实现低…

作者头像 李华
网站建设 2026/8/31 2:44:31

C++高精度整数Bigint实现:从原理到工程实践

1. 项目概述&#xff1a;为什么我们需要自己造一个“大数计算器”&#xff1f; 在C的标准库里&#xff0c; int 、 long long 这些内置整数类型用起来是挺爽的&#xff0c;加减乘除一个符号搞定。但不知道你有没有遇到过这种情况&#xff1a;写算法题时&#xff0c;题目要求…

作者头像 李华
网站建设 2026/9/1 5:54:25

基于SpringBoot的线上教育系统的设计与实现毕业设计项目源码

联系博主 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 …

作者头像 李华
网站建设 2026/9/1 12:10:59

压力固化炉与压力烘箱:封装工艺的技术分野与选型逻辑

电子封装产业正经历从传统引线框架向先进二维/三维集成封装的结构性迁移&#xff0c;芯片尺寸缩小与I/O密度提升&#xff0c;使得封装体内部的残余应力、空洞率和界面结合强度成为良率管控的核心矛盾。在模塑、底部填充、晶圆键合等关键工序中&#xff0c;压力固化炉与压力烘箱…

作者头像 李华