当前位置:网站首页>文件IO及其函数使用
文件IO及其函数使用
2022-08-09 15:03:00 【翔在天上飞】
目录
1、open函数
所需头文件
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
两种写法
int open(const char*pathname,int flags);
int open(const char*pathname,int flags,mode_t mode);
返回值:成功则返回文件描述符,否则返回-1
函数参数:
pathname:指向想要打开的文件路径名,或者文件名。我们需要注意的是,这个路径名是绝对路径名。文件名则是在当前路径下的。
flags:用来控制打开文件的模式
打开文件的方式,以下三种方式必须其一:
O_RDONLY:以只读方式打开文件
O_WRONLY:以只写方式打开文件
O_RDWR:以可读可写的方式打开文件
其余的,和上面的进行或运算:
O_CREAT:如果文件不存在,则创建文件,但同时必须使用第三个参数
O_EXCL:如果文件存在,则出错
O_NOCTTY: 使用本参数时,如文件为终端,那么终端不可以作为调用open()系统调用的那个进程的控制终端
O_TRUNC:如果文件存在,则清空文件中的内容
O_APPEND:文件存在,则追加在文件的末尾
mode:用来设置创建文件的权限(rwx),用一个八进制数表示。当flags中带有O_CREAT时,需要去创建一个新的文件,才需要去设置权限。
2、close函数
头文件:#include <unistd.h>
int close(int fd);
参数:已打开的文件的文件描述符
返回值:成功返回0,失败返回-1
3、read函数
头文件:#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
功能:将从fd所描述的文件中的内容读出,并放入以buf地址开始的一片空间中,count是每次要读的字节数
参数1:文件描述符
参数2:读取到数据保存到buf中
参数3:要读的字节数
返回值:成功读取每次返回读到的字节数,返回0表示已经读完,失败返回-1
4、write函数
头文件:#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
功能:将以buf地址开始的那片空间中的内容,写入到以fd描述的文件中去,每次写入count个字节数
参数1:文件描述符
参数2:要写入的数据存在的首地址
参数3:要写入的字节数(只要count设置的合适,用sizeof,可以一次写完)
返回值:成功返回写入的字节数count,失败返回-1
5、案例(模拟CP)
利用文件IO各函数进行两个文本之间的copy,模拟了虚拟机下的CP命令,此案例对学习文件IO各函数帮助很大,涵盖了各个函数,以下附上程序,读者可以参考学习
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
int main(int argc , char *argv[])
{
//打开文件1,并进行打开成功与否的检测,文件1当是已经有数据存在了的,开的权限是可读
int fr = open(argv[1],O_RDONLY);
if(fr < 0)
{
perror("open error");
return -1;
}
//打开文件2,检测,文件2是待赋值写入的空文本,所以开的权限是可写
int fw = open(argv[2],O_WRONLY);
if(fw < 0)
{
perror("open error");
return -1;
}
//文件操作
char buf[1024] = {0};
while(1)
{
memset(buf,0,sizeof(buf)); //保险起见,每次清空一下
int n = read(fr,buf,sizeof(buf));
if(0 == n)
{
break;
}
else if(n == -1)
{
printf("read error\n");
}
write(fw,buf,sizeof(buf));
}
//关闭文件
close(fr);
close(fw);
return 0;
}

说明:双向箭头表示等价调用,黄色箭头表示数据的流向,buf可以视为一个中间器,在读取出来的时候暂时存一下,之后又写入其他地方
边栏推荐
- 层次分析法
- Heap series_0x08: NT heap debug support_Discover now debug support (DPH)
- C语言,输入一个10以内的随机数,按要求求得表达式的值。
- Heap series _0x05: A diagram analyzes the connection between heap block allocation and FreeLists
- yum安装mariadb数据库之后启动时提示 Failed to start mariadb.service: Unit not found
- Vim实用技巧_3.可视模式和命令模式
- Unity Shader零基础入门1:纯色物体
- Unity Shader零基础入门4:纹理贴图与法线贴图
- 堆(heap)系列_0x0A:3种方法一次性解决堆溢出问题
- Vim practical skills_0.vim - introduction
猜你喜欢
![writeUP-[第五空间2019 决赛]PWN5(待进一步完善待研究内容)](/img/3c/ff6f1dd7402b2ccc442e806e407710.png)
writeUP-[第五空间2019 决赛]PWN5(待进一步完善待研究内容)

The practical skills Vim _1. Vim way of solving problems

图论最短路径求解

websocket协议详解与抓包分析

Monte Carlo simulation

fiddler工具栏及其使用

PE格式系列_0x05:输出表和重定位表(.reloc)

Vim practical skills_4. Manage multiple files (open + split + save + netrw)

Postgraduate Work Weekly (Week 4)

堆(heap)系列_0x08:NT堆调试支持_立刻发现调试支持(DPH)
随机推荐
JS字符串对象基础操作方法
堆(heap)系列_0x0A:3种方法一次性解决堆溢出问题
RTP协议封装音视频媒体数据详解
RAID磁盘阵列详解
输入不定长数组,输入一个字符串,既包含字符,又包含数字,输出数组,输入一个二维数组,字符和数字都可
FFmpeg源码剖析-通用:ffmpeg_parse_options()
MATLAB Solution to Planning Problems - MATLAB in Mathematical Modeling (2nd Edition)
灰色关联分析
Matlab做分布拟合及绘制频率分布直方图
Basic Terms of Machine Learning
Unity Shader零基础入门3:逐像素光照、Blinn-Phong、透明度
【Postgraduate Work Weekly】(Week 5)
Unity Shader 透视效果/XRay
堆(heap)系列_0x06:NT全局标志和gflags.exe一页纸
String的构造方法,其他方法
TCP/IP协议组——完整工作过程分析
FPGA--基础语句、计数器、测试仿真语句(个人学习记录2022.7.20)
Zip包的读取与写入
Heap series _0x03: heap block + malloc/new bottom layer + LFH (WinDbg analysis)
GO 使用 Protobuf实用指南