linux c 复制拷贝文件

本文详细介绍了在Linux环境下使用系统调用和文件流两种方法进行文件复制的过程。通过具体代码示例,展示了open、read、write及fread、fwrite等函数的使用方法,深入解析了文件描述符与文件流指针在文件操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种方法:例如 linux 下的系统调用

#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

char buff[1024];
int len;
int main(int argc, char const *argv[])
{
    char const *src_path = argv[1];
    char const *des_path = argv[2];
    int fd, fd2;

    fd	= open(src_path, O_RDWR | O_CREAT);
    fd2 = open(des_path, O_RDWR | O_CREAT);
    while (len = read(fd, buff, 1024))
    {
        write(fd2, buff, len);
    }

    close(fd);
    close(fd2);

    return 0;
}

这里主要 用到的函数是 open,read,write


其中open 函数:

第一个参数为要打开文件的路径,第二个参数是功能flag,O_RDWR表示以读写方式打开文件,O_CREAT表示如果文件不存在则创建

返回一个文件描述符,表示打开了的文件

其中 read 函数:

第一个参数是一个文件描述符,表示:从该文件描述符表示的文件读取数据

第二个参数是把从文件读到的信息放在一个缓冲数组中

第三个参数是读一次读多少字节

其中 write 函数:

第一个参数,是把数据写到哪里(写到哪个文件描述符中)

第二个参数:把缓冲数组中的数据写到文件描述符中

第三个参数:表示一次写多少字节

注意:最好向上面代码那样用一个while循环来读写数据,这样的话,read 中的第三个参数就不用设置成太大,因为他会把数据全读完才退出循环
 

第二种方法:用文件流

#include <stdio.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>

char buff[1024];
int len;
int main(int argc, char const *argv[])
{
    FILE *in, *out;
    char const * src_path = argv[1];    //要被拷贝的文件路径
    char const * des_path = argv[2];    //拷贝的文件放在哪里(路径)

    in	= fopen(argv[1], "r+");
    out = fopen(argv[2], "w+");

    while (len = fread(buff, 1, sizeof(buff), in))
    {
        fwrite(buff, 1, len, out);
    }

    pclose(in);
    pclose(out);

    return 0;
}

两种方法其实有异曲同工之妙,第一种方法的文件描述符 = 第二种方法的文件流指针 in 和 out。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值