作业day3
请使用dup2 + fgets + printf 实现文件拷贝功能、
文件1:
复后文件:
#define BUFFER_SIZE 1024
void file_copy(const char* src_file, const char* dest_file) {
int src_fd, dest_fd;
char buffer[BUFFER_SIZE];
// 打开源文件
src_fd = open(src_file, O_RDONLY);
if (src_fd == -1) {
perror("打开源文件失败");
exit(EXIT_FAILURE);
}
dest_fd = open(dest_file, O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (dest_fd == -1) {
close(src_fd);
perror("打开目标文件失败");
exit(EXIT_FAILURE);
}
// 将标准输入重定向到源文件
dup2(src_fd, STDIN_FILENO);
// 将标准输出重定向到目标文件
dup2(dest_fd, STDOUT_FILENO);
close(src_fd);
close(dest_fd);
// 使用 fgets 和 printf 实现文件拷贝
while (fgets(buffer, BUFFER_SIZE, stdin)) {
printf("%s", buffer);
}
printf("文件拷贝完成。\n");
}
int main(int argc, const char* argv[]) {
if (argc != 3) {
fprintf(stderr, "用法: %s <源文件> <目标文件>\n", argv[0]);
return EXIT_FAILURE;
}
const char* src_file = argv[1];
const char* dest_file = argv[2];
file_copy(src_file, dest_file);
return EXIT_SUCCESS;
}