Linux系统IO实现文件拷贝

3 篇文章 0 订阅
3 篇文章 0 订阅

问题引入:
利用Linux提供的系统IO函数(eg:open , close , read , write ,lseek ),现两个文件的拷贝,文件名从命令行参数传入:
./a.out 11.txt 22.txt

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc,char*argv[])
{
 //打开文件两个文件
 int fd1 = open(argv[1],O_RDONLY);
 if(fd1 == -1)
 {
  perror("open fd1 error:");
  return -1;
 }
 
 int fd2 = open(argv[2],O_WRONLY|O_CREAT|O_TRUNC,0666);
 if(fd2 == -1)
 {
  perror("open fd2 error:");
  close(fd1);
  return -1;
 }
 
 //操作文件
 //一个进行读,一个进行写
 while(1)
 {
  char buf[32];
  int re = read(fd1,buf,32);
  if(re == 0)
  {
   break;
  }
  write(fd2,buf,re);
 }
 
 //关闭文件
 close(fd1);
 close(fd2);
}

关注博主不迷路,博主带你上高速!

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值