嵌入式---文件IO的学习
程序员文章站
2022-06-08 22:08:39
...
标题文件IO的学习(自己复习用的,错误请指出)
用代码实现linux中cp复制的功能
#include"stdio.h"
#include"unistd.h"
#include"fcntl.h"
#include"string.h"
int main(int argc,char *argv[])//int argc是记录你在命令行敲入的字符串个数,char *argv[]是存放你写入是字符串
{
int rd_fd,wr_fd;//先把要复制的文件读入用户缓存区,再写入目标文件缓存区
char read_buf[128]={0};//用户空间的缓存
int rd_ret=0;//读的函数的返回值,返回值是字节数
if(argc <3)//3个参数,源文件,目标文件,缓存区
{
printf("please input src file and des file\n");
return -1;
}
rd_fd=open(argv[1],O_RDONLY);//以只读的方式打开从命令行敲入的原文件
if(rd_fd <0)
{
printf("open src file %s failure\n",argv[1]);
return -2;
}
printf("open src file %s sucess,rd_fd%d\n",argv[1],rd_fd);//%d是3个参数,读、写,执行
wr_fd=open(argv[2],O_WRONLY);//打开目标文件
if(wr_fd <0)
{
printf("open des file %s failure\n",argv[2]);
return -3;
}
printf("open des file %s sucess wr_fd=%d\n",argv[2],wr_fd);
while(1)//因为原文件大于缓存区时,要分多次写,所有加死循环
{
rd_ret=read(rd_fd,read_buf,128);//给rd_ret返回读函数,包括原文件(命令行输入的),读到用户的缓存区,大小
if(rd_ret <128)//当返回值大于128bit时,表示读完了,跳出循环
break;
write(wr_fd,read_buf,rd_ret);//往目标文件写,写在目标缓存区,写的内容是读的缓存区的内容,写的大小就是读的返回值
memset(read_buf,0,128);//读完了清空缓存
}
//但是跳出循环后,小于128的bit就没有读入,所以再写一次
write(wr_fd,read_buf,rd_ret);
close(rd_fd);
close(wr_fd);
return 0;
}