用C语言编写文件复制程序。分别使用系统调用read (fd,buf,nbytes)、write(fd, buf,nbytes)和文件的库函数fread(buf,size,nitems,fp)、fwrite(buf,size,nitems,fp),编写一个文件复制程序。
时间: 2024-02-03 21:15:18 浏览: 22
使用系统调用read和write函数的文件复制程序示例代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#define MAX_BUF_SIZE 4096 // 缓冲区大小
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Usage: %s source_file dest_file\n", argv[0]);
exit(1);
}
int source_fd = open(argv[1], O_RDONLY); // 打开源文件,只读方式
if (source_fd == -1) {
perror("open source file failed");
exit(1);
}
int dest_fd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644); // 创建目标文件,写入方式
if (dest_fd == -1) {
perror("create dest file failed");
exit(1);
}
char buf[MAX_BUF_SIZE];
ssize_t nread, nwrite;
while ((nread = read(source_fd, buf, MAX_BUF_SIZE)) > 0) { // 读取源文件数据
nwrite = write(dest_fd, buf, nread); // 写入目标文件
if (nwrite == -1) {
perror("write dest file failed");
exit(1);
}
}
if (nread == -1) {
perror("read source file failed");
exit(1);
}
close(source_fd);
close(dest_fd);
return 0;
}
```
使用文件的库函数fread和fwrite函数的文件复制程序示例代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_BUF_SIZE 4096 // 缓冲区大小
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Usage: %s source_file dest_file\n", argv[0]);
exit(1);
}
FILE *source_fp = fopen(argv[1], "rb"); // 打开源文件,二进制只读方式
if (source_fp == NULL) {
perror("open source file failed");
exit(1);
}
FILE *dest_fp = fopen(argv[2], "wb"); // 创建目标文件,二进制写入方式
if (dest_fp == NULL) {
perror("create dest file failed");
exit(1);
}
char buf[MAX_BUF_SIZE];
size_t nread, nwrite;
while ((nread = fread(buf, 1, MAX_BUF_SIZE, source_fp)) > 0) { // 读取源文件数据
nwrite = fwrite(buf, 1, nread, dest_fp); // 写入目标文件
if (nwrite != nread) {
perror("write dest file failed");
exit(1);
}
}
if (ferror(source_fp)) {
perror("read source file failed");
exit(1);
}
fclose(source_fp);
fclose(dest_fp);
return 0;
}
```