嵌入式---文件IO的学习

标题文件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;
}

00212124701688.png?x-oss-在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值