实现一个 cp 的功能 (非缓冲区的文件操作): 格式:./a.out 1.txt 2.txt 将 1.txt 复制一份,命名为 2.txt ./a.out 1.txt 2.txt 主函数传参
时间: 2024-11-06 22:20:21 浏览: 27
实现一个简单的cp命令功能(非缓冲区的文件操作),你可以创建一个名为`a.out`的C程序,例如使用stdio库中的fopen、fwrite和fclose函数。以下是基本的步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义复制文件的函数
void copy_file(const char* src_filename, const char* dst_filename) {
FILE* src = fopen(src_filename, "rb"); // 打开源文件以读模式
if (src == NULL) {
perror("Failed to open source file");
exit(EXIT_FAILURE);
}
FILE* dst = fopen(dst_filename, "wb"); // 打开目标文件以写模式
if (dst == NULL) {
perror("Failed to open destination file");
fclose(src);
exit(EXIT_FAILURE);
}
size_t bytes_read;
while ((bytes_read = fread(&buffer[0], sizeof(char), BUFFER_SIZE, src)) > 0) {
fwrite(buffer, sizeof(char), bytes_read, dst); // 逐块复制数据
}
if (ferror(src) || ferror(dst)) {
perror("Error reading or writing files");
fclose(src);
fclose(dst);
exit(EXIT_FAILURE);
}
fclose(src); // 关闭源文件
fclose(dst); // 关闭目标文件
}
int main(int argc, char** argv) {
if (argc != 3) {
fprintf(stderr, "Usage: %s <source> <destination>\n", argv[0]);
return EXIT_FAILURE;
}
const char* src_filename = argv[1];
const char* dst_filename = argv[2];
copy_file(src_filename, dst_filename);
printf("File copied successfully.\n");
return 0;
}
```
在这个程序中,我们首先检查命令行参数是否包含两个文件名。然后,打开源文件进行二进制读取,并将内容逐块复制到目标文件中。最后关闭所有文件并输出复制成功的消息。
阅读全文