目录的读写

news2025/2/24 10:17:25
一、文件流和字符描述的转换
1.1、fileno

要求的是内存大小一致

fileno FILE* fp -> int fd fgets(,); int fileno(FILE *stream);

功能: 获得一个文件流指针中的文件描述符

参数: stream:文件流指针

返回值: 成功返回文件描述符 失败返回-1

如果没有特殊要求的,关闭封装度高的函数。

1.2.fdopen

int fd -> FILE *fp FILE *fdopen(int fd, const char *mode);

功能: 这是一个函数,不是强制类型转换 将文件描述符转化为文件流指针

参数: fd:已经打开的文件描述符 mode: "r" "r+" "w" "w+" "a" "a+"

返回值: 成功返回文件流指针 失败返回NULL

二、目录相关操作
2.1 操作流程
  1. 打开目标目录  
  2. 读取目录
  3. 关闭目录

目录 当文件看,只不过操作函数和操作文件函数不一样。

2.2 opendir 打开目录

DIR *opendir(const char *name);

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

参数: name:目录名

返回值: 成功返回目录流指针 失败返回NULL

* dir 是通过opendir 获取的,他代表的是整个目录 ;在系统里面叫目录入口,也叫做目录流指针

2.3.readdir 读目录

readdir struct dirent *readdir(DIR *dirp)

功能: 从目录流中读取文件信息并将保存信息的结构体 地址返回

参数: dirp:目录流指针

返回值: 包含文件信息的结构体 出错或者读到目录流末尾返回NULL

  •  * info 代表目录的一项,目录里面有很多,要想拿多个,多次调用即可

  • 想把文件都读出来,那么我们直接循环读出来,因为我们也不知道他有多少个

  • 我们只需要关注文件名和类型

  • 判断type 类型和这个宏相不相等,这个宏代表的是文件的类型,宏在里面用的其实是数字保存

  •   DT_BLK      This is a block device.

  •   DT_CHR      This is a character device.

  •    DT_DIR      This is a directory.

  • DT_FIFO     This is a named pipe (FIFO).

  •  DT_LNK      This is a symbolic link.           

  • DT_REG      This is a regular file.

  • DT_SOCK     This is a UNIX domain socket.

  • DT_UNKNOWN  The  file  type  could not be deter‐mined.
     

2.4 closedir关闭目录

int closedir(DIR *dirp);

功能:关闭之前已经打开的目录流对象

参数:opendir的返回结果中目录流对象

返回值:成功 0 失败 -1;、

对目录读进行操作的代码示例 

#include<stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main(int agrc,char *argv[])
{
    DIR* dir  = opendir("./");
    if(NULL == dir)
    {
        printf("opendir error");
        return 1;
    }
    while(1)
    {
        struct dirent * info = readdir(dir);
        if(NULL == info)
        {
            break;
        }
        switch(info->d_type)
        {
            case DT_DIR:
            printf("目录  ");
            break;
            case DT_BLK:
            printf("块设备  ");
            break;
            case DT_CHR:
            printf("字符设备  ");
            break;
            case DT_REG:
            printf("普通文件  ");
            break;
            default:
            printf("其他  ");
            break;
        }
        printf("%s\n",info->d_name);
    }
    closedir(dir);
2.5.getcwd

getcwd等价于命令pwd char *getcwd(char *buf, size_t size)

buf 接收当前的

屁股后面会放\0

路径,创建一个buf 功能: 获得当前的工作路径

参数: buf:保存工作路径空间的首地址 size:保存路径空间的长度(buf 的最大长度)

返回值: 成功返回包含路径空间的字符串首地址 失败返回NULL

2.6.mkdir

int a =200; int mkdir(const char *pathname, mode_t mode);//777 666 --x--x--x (mode 给权限) 功能: 创建一个目录 666-权限给的是775,默认是775,但由于umask的值,和目录和文件的权限与其有关,将这个数减掉。

对于目录来说 x 是cd 看起能不能切换进去。

目录名不能重名,文件也不能重名,区分大小写

参数: pathname:路径 mode: mode & ~umask 0002

写好之后进去会自动做该操作

返回值: 成功返回0 失败返回-1

2.7.rmdir

rm -fr rmdir int rmdir(const char *pathname);

功能: 删除一个空目录文件

前提是空目录,./ ../ 这是一个空目录,我们认为其是空目录

参数: pathname:目录文件的名字 返回值: 成功返回0 失败返回-1

 2.8 stat

1.stat 获取文件的详细属性 ()

int stat(const char *path, struct stat *buf);

INODE (文件在硬盘上的编号,也就是位置)

文件名和内容分开放;软连接删掉没有影响,但是硬链接删除之后,软连接就无法正常使用

st 结构体变量不需要我们填写,由函数进行填写

重点

ino_t

mode_t 文件的类型以及权限(类似777)

注意在代码书写的过程中,换行的时候将优先级的放在第二行前

gid_t 组号

st_size 字节数

时间在系统中记得是从1970年1月1号之后到现在的总秒数,一秒一记

mode 模式无法直接出来,需要调用inode,调用宏文件进行判断。宏判断特定7位上是不是1

判断权限 进行位运算,在其mode 里面由=有32位,低9位就是 实际上的权限位置,我们进行系统里面的宏运算,进行位运算,来判断其权限

功能: 获得文件的属性

参数: pzath: 文件的路径

buf: 属性存放空间的首地址

返回值: 成功返回0 失败返回-1

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在Zoom中集成自己的app?一个简单的例子

一、注册zoom 账号、以便在zoom app maketplace创建app。 二、安装git、node.js、vscode开发环境&#xff08;略&#xff09;。 三、注册ngrok账号&#xff0c;获得一个免费的https静态域名。 四、配置zoom app(wxl)&#xff0c;设置上一步获得的https静态域名&#xff0c;验证…

2024 年 7 月区块链游戏研报:市场波动与数据分化的挑战与机遇

作者&#xff1a;Stella L (stellafootprint.network) 数据来源&#xff1a;Footprint Analytics 游戏研究页面 7 月份&#xff0c;加密货币市场波动显著&#xff0c;价格表现各异。比特币和 Solana 表现抢眼&#xff0c;与此同时&#xff0c;以太坊在美国市场推出现货以太坊…

8.3 字符串中等 306 Additive Number 423 Reconstruct Original Digits from English

306 Additive Number //累加数&#xff1a;除了前两个数&#xff0c;其余数都等于前两个加起来&#xff0c;至少包括三个数 //难点找到前两个数 //条件1&#xff1a;至少包括三个数–>确定前两个数字的最大长度 len n/3 看下方注意1 //条件2&#xff1a;遇到0默认归属于他…

Axure RP界面设计初探:基础操作与实用技巧

Axure RP是目前流行的设计精美的用户界面和交互软件。Axure RP提供了一组丰富的RP。 UI 控件&#xff0c;这些控件根据它们的应用领域进行分类。作为Axure的国产替代品&#xff0c;它可以在线协同工作&#xff0c;浏览器可以在不下载客户端的情况下立即打开和使用。如果以前用A…

护眼灯到底有没有用?一文曝光护眼灯的三大好处!

护眼台灯进入大众的视野&#xff0c;但种类多样&#xff0c;其质量也是参差不齐。不少人一直有着”护眼灯到底有没有用&#xff1f;“质疑&#xff0c;作为学生&#xff0c;课业多且繁重&#xff0c;再加上电子设备普遍普及&#xff0c;眼睛受承受的压力日渐增大。因此&#xf…

如何快速实现MODBUS TCP转Profinet——泗博网关EPN-330

泗博网关EPN-330可作为PROFINET从站&#xff0c;支持与西门子S7-200 SMART/300/400/1200/1500全系列PLC以及具有PROFINET主站的系统无缝对接&#xff0c;而Modbus TCP端&#xff0c;可以与Modbus TCP从站设备、主站PLC、DCS系统以及组态软件等进行数据交互。 通过EPN-330&…

【算法设计题】编写算法,统计带头节点的单链表L的实际元素个数,第5题(C/C++)

目录 第5题 统计带头节点的单链表L的实际元素个数 得分点&#xff08;必背&#xff09; 题解&#xff1a;统计带头节点的单链表L的实际元素个数 代码解答 详细解释 举例说明 &#x1f308; 嗨&#xff0c;我是命运之光&#xff01; &#x1f30c; 2024&#xff0c;每日百…

第二证券:沪指涨0.31%,电力、煤炭等板块拉升,卫星导航概念活跃

7日早盘&#xff0c;沪指盘中发力上扬&#xff0c;深证成指、创业板指震荡翻绿&#xff0c;场内超2700只个股飘绿。 到午间收盘&#xff0c;沪指涨0.31%报2876.17点&#xff0c;深证成指跌0.04%&#xff0c;创业板指跌0.16%&#xff0c;上证50指数涨0.34%&#xff0c;两市算计…

Leetcode每日刷题之字符串相加(C++)

在学习的同时也不要忘记适当练习&#xff0c;本题字符串相加主要在于字符串类型与整数类型的转化&#xff0c;要将字符串类型转化为整数类型计算后转化为字符串类型输出即可。 思路解析 根据题中给出的信息&#xff0c;我们不可以使用库函数计算大整数&#xff0c;也不能直接将…

代码随想录算法训练营第四天(二)|面试题 02.07. 链表相交 142.环形链表II

面试题 02.07. 链表相交 题目&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环…

视频号直播回放怎么下载?

一、如果是下载自己直播回放视频&#xff1a; 方法一&#xff1a;视频号助手 打开网址&#xff1a;视频号助手 登陆账号后。下面路径&#xff0c;先点击成回放&#xff0c; 后就可以在下面路径&#xff0c;下载全场回放 但是这种有个缺点&#xff0c;就是不能分段下载。这样…

C语言----计算开机时间

计算开机时间 实例说明 编程实现计算开机时间&#xff0c;要求在每次开始计算开机时间时都能接着上次记录的结果向下记录。 实现过程&#xff1a; 1. 在TC中创建一个C文件。 2. 引用头文件&#xff0c;代码如下: #include <stdio.h> 3. 定义结构体time&#xff0c;用来…

AI绘画 | Stable Diffusion后期处理—无需ControlNet也能轻松高清放大图像与老旧照片修复,SD新手必看教程

大家好&#xff0c;我是画画的小强 分享了这么多期AI绘画Stable DIffusion的入门教程和一些常用的插件玩法后&#xff0c;不知道大家有没有发现&#xff0c;SD还有一个功能&#xff0c;似乎没怎么用到过&#xff0c;它就是—后期处理。 今天就给大家分享一下SD中的 “后期处理…

python 空list如何表示

创建空列表&#xff1a; L List() 或者&#xff1a; L [] 这时L就是一个空列表。 需要注意的是&#xff0c;空列表不是None&#xff0c;因此 L [] If L is not None:# 这里的代码总是会被执行 检查列表是否为空要使用len()&#xff1a; L [] if len(L):# 这里的代码不会执…

单词拆分——LeetCode

139.单词拆分 题目 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用 示例 1&#xff1a; 输入: s &qu…

idea使用free流程,2024idea免费使用

1.先到官网下载&#xff0c;这里选择win系统的&#xff0c;点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好&#xff0c;安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…

AD域服务器中的用户和计算机管理面板中的账户显示异常

如果发现新建用户时在用户和计算机管理面板中发现显示的用户名不是预期中的效果&#xff0c;可以检查用户的完整DN&#xff0c;其中DN中的CN的值决定了你在用户和计算机管理面板中显示的内容是什么。 &#xff08;由于本人使用Python代码完成新建AD域账号时&#xff0c;发现新…

leetcode-27-移除元素

原理&#xff1a; 1、统计数组nums中出现val的次数n&#xff1b; 2、利用循环进行n次删除nums中的val; 3、返回nums的长度 代码&#xff1a;

你的Java项目还在等待吗?快来学会线程池,解放你的性能!

文章目录 你的Java项目还在等待吗&#xff1f;快来学会线程池&#xff0c;解放你的性能&#xff01;1 什么是线程池&#xff1f;为什么需要它&#xff1f;2 线程池的参数有哪些&#xff1f;3 不同类型的线程池有哪些配置&#xff1f; 你的Java项目还在等待吗&#xff1f;快来学…

ctfhub文件包含

文件包含 url http://challenge-41cbfbe04828b338.sandbox.ctfhub.com:10800/ 构造url&#xff0c;利用hackabar进行Post data修改测试 http://challenge-41cbfbe04828b338.sandbox.ctfhub.com:10800/?fileshell.txt ctfhubsystem("ls"); ctfhubsystem("ls…