目录操作在C语言中:一个全面的指南

  • (꒪ꇴ꒪ ),hello我是祐言
  • 博客主页:C语言基础,Linux基础,软件配置领域博主🌍
  • 快上🚘,一起学习!
  • 送给读者的一句鸡汤🤔:
  • 集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏

一、目录操作函数

        在C语言编程中,目录操作是一个重要的部分,它使我们可以在程序中对文件系统进行读写操作。在这篇文章中,我们将详细介绍一些基础的目录操作函数,包括其功能、头文件、原型、参数以及示例。

        1. opendir

opendir函数用于打开指定的目录,并返回一个目录指针。

#include <sys/types.h>
#include <dirent.h>

DIR *opendir(const char *name);

name参数是你想要打开的目录的名称。

        2. readdir

readdir函数用于读取目录项,它返回一个指向struct dirent的指针,该指针指向的结构体包含了目录项的信息。

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

dirp参数是由opendir函数返回的目录指针。

        3. mkdir

mkdir函数用于创建一个新的空目录。

#include <sys/stat.h>
#include <sys/types.h>

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

pathname参数是你想要创建的新目录的名称,mode参数则用于设置新目录的权限。

        4. chdir

chdir函数用于更改进程的当前工作目录。

#include <unistd.h>

int chdir(const char *path);

path参数是你想要切换到的新工作目录的路径。

        5. getcwd

getcwd函数用于获取进程的当前工作目录。

#include <unistd.h>

char *getcwd(char *buf, size_t size);

buf参数是一个字符数组的指针,用于存储返回的目录路径。size参数buf数组的大小。

        6. closedir

closedir函数用于关闭一个打开的目录。

#include <dirent.h>

int closedir(DIR *dirp);

dirp参数是由opendir函数返回的目录指针。

        7. get_current_dir_name

get_current_dir_name函数用于获取进程的当前工作目录。这个函数是GNU扩展的一部分,不是POSIX标准的一部分,因此可能在一些非GNU系统上不可用。

#include <unistd.h>

char *get_current_dir_name(void);

        这个函数没有参数,返回的是一个指向表示当前工作目录的字符串的指针。

二、目录项结构体

        目录项是由readdir函数返回的,它的结构体定义如下:

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_off是到下一个目录项的偏移,d_reclen是这个记录的长度,d_type是文件的类型,而d_name则是文件的名称。

三、示例例程

 

        现在我们来看一个简单的示例,这个示例程序将列出指定目录下的所有文件和目录。

#include <stdio.h>
#include <dirent.h>

int main() {
    // 打开当前目录
    DIR *dir = opendir("./");
    if (dir == NULL) {
        perror("opendir fail");
        return 1;
    }

    // 读取目录项并打印出文件名
    struct dirent *dp;
    while ((dp = readdir(dir)) != NULL) {
        printf("File Name: %s\n", dp->d_name);
    }

    // 关闭目录
    closedir(dir);

    return 0;
}


        在这个示例中,我们首先使用opendir函数打开当前目录,然后使用readdir函数读取每一个目录项,并打印出它的名字,最后使用closedir函数关闭目录。

        通过这篇文章,你应该已经对C语言中的目录操作有了一定的理解。这些函数提供了对文件系统进行读写的基础工具,我们可以通过组合使用这些函数来实现各种复杂的文件和目录操作。当然,这些只是C语言中关于目录操作的一部分,还有许多其他函数和技术等待你去探索和学习。希望这篇文章对你的学习有所帮助,如果你有任何问题或者建议,欢迎在评论中留言。

        更多C语言Linux系统相关文章,关注专栏:

   手撕C语言

            玩转linux

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉感谢关注🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/45712.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

指针进阶(三)

指针进阶&#xff08;三&#xff09; 指针习题组&#xff1a; 01&#xff1a; int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; }运行结果&#xff1a; 原因&#xff1a;这里a是数组名&a…

Linux:centos7:zabbix4.0(安装,监控》Linux》Windows》网络设备)

环境 centos7&#xff08;zabbix服务器&#xff09;内网ip&#xff1a;192.168.254.11 外网ip&#xff1a;192.168.0.188&#xff08;去网络yum源下载&#xff09; centos7&#xff08;被监控端&#xff09;内网ip&#xff1a;192.168.254.33win10&#xff08;被监控端&…

【后端面经】微服务构架 (1-3) | 熔断:抖抖抖不停?微服务熔断策略让你的系统稳如泰山!

文章目录 一、前置知识1、什么是熔断?2、什么是限流?3、什么是降级?4、怎么判断微服务出现了问题?A、指标有哪些?B、阈值如何选择?C、超过阈值之后,要不要持续一段时间才触发熔断?5、服务恢复正常二、面试环节1、面试准备2、面试基本思路三、总结 在微服务构架中…

Java版本工程项目管理系统源码-全面的工程项目管理

​ ​工程项目管理系统是指从事工程项目管理的企业&#xff08;以下简称工程项目管理企业&#xff09;受业主委托&#xff0c;按照合同约定&#xff0c;代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈&#xff0c;内卷严重&#xff0c;…

ADCS知识点全收录! 如何利用证书服务器对域控进行多角度攻击(上)

在2021年的BlackHat大会上&#xff0c;由Will Schroeder和Lee Christensen发布了关于Active Directory Certificate Services 利用白皮书《Certified Pre-Owned - Abusing Active Directory Certificate Services》&#xff0c;其中包含了大量的针对ADCS的攻击手法&#xff0c;…

JavaFx实现自定义窗口

效果 代码 package cn.juhe.zjsb.task;import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Rectangle2D; import javafx.scene.Cursor; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image…

【Nodejs】文件上传

1.初始化准备 1.1 安装依赖 首先创建一个express-multer-upload工程项目&#xff0c;然后在项目中下好各种依赖包。 multer中间件 Multer 是一个 node.js 中间件&#xff0c;用于处理 multipart/form-data 类型的表单数据&#xff0c;它主要用于上传文件。 注意: Multer 不会…

【Ajax】笔记-JQuery发送请求与通用方法

Get请求 语法格式&#xff1a; $.get(url, [data], [callback], [type]) url:请求的 URL 地址。data:请求携带的参数。callback:载入成功时回调函数。type:设置返回内容格式&#xff0c;xml, html, script, json, text, _default。 准备三个按钮分别测试Get 、Post、通用型方…

概率论的学习和整理21:用EXCEL来做假设检验(未完成草稿)

目录 1 EXCEL可以用来做假设检验 1.1 如何打开 数据分析 和 规划求解 1.2 EXCEL里关于正态分布的准备知识 2 基本的假设检验 2.1 最基本的假设检验&#xff0c;单边的Z检验 2.1 双样本F检验 2.1.1 例题 2.1.2 进行F检验之前需要满足一些假设条件 2.1.3 计算步骤 2.1…

Langchain 新手完全指南

原文&#xff1a;Langchain 新手完全指南 Langchain 可能是目前在 AI 领域中最热门的事物之一&#xff0c;仅次于向量数据库。 它是一个框架&#xff0c;用于在大型语言模型上开发应用程序&#xff0c;例如 GPT、LLama、Hugging Face 模型等。 它最初是一个 Python 包&#x…

实战攻防Demo|如何轻松形成自动响应的安全闭环?

从威胁阻断角度来说&#xff0c;拦住黑客的第一步攻击尤为重要。同样&#xff0c;对于攻击者来说&#xff0c;第一步攻击的成本也往往是最高的。日常工作中人们会遇到很多类型的攻击&#xff0c;但暴力破解或者撞库攻击往往被作为黑客的第一步攻击。这主要源于其技术含量低&…

【网络教程】如何快速的解决WordPress“另一更新正在进行”的问题

文章目录 WordPress提示“另一更新正在进行”解决方案手动删除数据库记录使用插件WordPress提示“另一更新正在进行” 当我们在更新WordPress的插件或者升级WordPress时会出现后台提示“另一更新正在进行”,如下图 当我们点击更新后,出现下图提示 出现上述问题是由于在升级Wo…

平板用的触控笔什么牌子好?ipad第三方电容笔推荐

随着技术的发展&#xff0c;出现了各种各样的平板电容笔。一支好的电容笔&#xff0c;不但可以极大地提升我们的工作效率&#xff0c;还可以极大地提升我们的学习效果。平替的电容笔&#xff0c;无论是在技术方面&#xff0c;还是在质量方面&#xff0c;都还有很大的提升空间&a…

在家下载论文使用哪些论文下载工具比较好

在家下载论文如果不借助论文下载工具是非常艰难的事情&#xff0c;因为很多查找下载论文的数据库都是需要账号权限才可使用的。 例如&#xff0c;我们查找中文论文常用的知网、万方等数据库以及众多国外论文数据库。 在家下载知网、万方数据库论文可用下面的方法&#xff1a;…

Apache pulsar 技术系列-- 消息重推的几种方式

导语 Apache Pulsar 是一个多租户、高性能的服务间消息传输解决方案&#xff0c;支持多租户、低延时、读写分离、跨地域复制&#xff08;GEO replication&#xff09;、快速扩容、灵活容错等特性。在很多场景下&#xff0c;用户需要通过 MQ 实现消息的重新推送能力&#xff0c…

RTI无线电层析成像Matlab仿真数据生成

文章目录 概述初始化环境参数 概述 无线电层析成像是一种通过获取一定区域内多对相对固定的无线通信节点间的某种测量数据后,按照一定的数学处理方法,对区域内的障碍物目标以图像的形式 展现出来的成像技术。 开山之作&#xff1a; J. Wilson and N. Patwari, “Radio tomogra…

教师ChatGPT的23种用法

火爆全网的ChatGPT&#xff0c;作为教师应该如何正确使用&#xff1f;本文梳理了教师ChatGPT的23种用法&#xff0c;一起来看看吧&#xff01; 1、回答问题 ChatGPT可用于实时回答问题&#xff0c;使其成为需要快速获取信息的学生的有用工具。 从这个意义上说&#xff0c;Cha…

天气越热越不能开空调,这是什么道理?

如今正值盛夏&#xff0c;炎热的太阳仿佛要把人烤化。相信很多小伙伴一回到家都会迫不及待地打开空调&#xff0c;在干爽的凉风中完成“自我复活”。然而需要警惕的是&#xff0c;相对密闭的空调房其实早已“暗藏杀机”&#xff0c;VOC、细菌、灰尘等室内“健康杀手”在房间里不…

Latex | 将MATLAB图并导入Latex中的方法

一、问题描述 用Latex时写paper时&#xff0c;要导入MATLAB生成的图进去 二、解决思路 &#xff08;1&#xff09;在MATLAB生成图片的窗口中&#xff0c;导出.eps矢量图 &#xff08;2&#xff09;把图上传到overleaf的目录 &#xff08;3&#xff09;在文中添加相应代码 三…

[ 容器 ] consul 容器服务更新与发现

目录 什么是服务注册与发现什么是consulconsul 部署consul 服务器 registrator服务器consul-templateconsul 多节点 什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承…