文件描述符拷贝

文件描述符拷贝

#include <unistd.h>

//根据oldfd描述符生成一个新的文件描述符,生成新的文件描述符的原则是:最小的,未用的

int dup(int oldfd);

//根据oldfd生成一个新的文件描述符    ,但是这个新的文件描述符可以指定为具体的值

int dup2(int oldfd, int newfd);

例子:

int main(int argc,char *argv[])

{

//定义变量

int src=0;

int dst=0;

 

//判断argc

if(argc<0)

{

printf("用法:%s 源文件 目的文件\n",argv[0]);

exit(0);

}

 

//打开文件

src=open(argv[1],O_RDONLY,0644);

dst=open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0644);

if((src<0)||(dst<0))

{

perror("open");

exit(0);

}

 

//文件拷贝

char buf[8]={0};

int len=0;

while((len=read(src,buf,sizeof(buf)))==sizeof(buf))

{

write(dst,buf,sizeof(buf));

memset(buf,0,sizeof(buf));

}

write(dst,buf,len);

 

//关闭文件

close(src);

close(dst);

 

return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux中,可以使用系统调用进行文件拷贝操作。以下是一个使用系统I/O实现文件拷贝的示例代码: ```c #include <fcntl.h> #include <unistd.h> #define BUF_SIZE 4096 int main(int argc, char *argv[]) { int source_fd, dest_fd; ssize_t bytes_read, bytes_written; char buffer[BUF_SIZE]; // 检查命令行参数 if (argc != 3) { printf("Usage: %s <source_file> <destination_file>\n", argv[0]); return 1; } // 打开源文件 source_fd = open(argv[1], O_RDONLY); if (source_fd == -1) { perror("open"); return 1; } // 创建目标文件 dest_fd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644); if (dest_fd == -1) { perror("open"); close(source_fd); return 1; } // 从源文件读取数据并写入目标文件 while ((bytes_read = read(source_fd, buffer, BUF_SIZE)) > 0) { bytes_written = write(dest_fd, buffer, bytes_read); if (bytes_written != bytes_read) { perror("write"); close(source_fd); close(dest_fd); return 1; } } // 关闭文件描述符 close(source_fd); close(dest_fd); return 0; } ``` 你可以将上述代码保存为一个.c文件(例如copy.c),然后通过以下命令编译并运行: ``` gcc copy.c -o copy ./copy <source_file> <destination_file> ``` 其中,`<source_file>`是源文件的路径,`<destination_file>`是目标文件的路径。注意替换这两个占位符为你实际的文件路径。 这段代码使用了`open`、`read`和`write`等系统调用来进行文件的打开、读取和写入操作,通过循环逐块拷贝数据,直到源文件读取完毕。请确保在运行代码时有足够的权限来读取和写入文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值