该问题来自社区帖: https://bbs.csdn.net/topics/616233367.为符合问答规范, 该问题经过ChatGPT优化
我需要在Linux上编写一个程序,实现将一个文件的内容剪切到另一个文件上的功能,类似于mv命令。要求只能使用open()、read()、write()和close()系统调用。
我需要在Linux上编写一个程序,实现将一个文件的内容剪切到另一个文件上的功能,类似于mv命令。要求只能使用open()、read()、write()和close()系统调用。
关注这是一个比较基础的文件操作问题,可以通过以下步骤实现:
使用 open() 系统调用打开源文件和目标文件。
使用 read() 系统调用从源文件读取数据(可以创建一个缓冲区来存储要读取的数据),然后使用 write() 系统调用将数据写入目标文件。
重复执行步骤2,直到源文件中的所有数据都已复制到目标文件中。
使用 close() 系统调用关闭文件。
以下是一个参考代码示例(仅作参考,请根据您的具体需求进行调整):
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
if (argc != 3) {
write(STDERR_FILENO, "Usage: ./mycp <source_file> <destination_file>\n", 47);
return 1;
}
int fd_src = open(argv[1], O_RDONLY);
if (fd_src < 0) {
write(STDERR_FILENO, "Failed to open source file.\n", 28);
return 1;
}
int fd_dst = open(argv[2], O_CREAT | O_WRONLY, 0644);
if (fd_dst < 0) {
write(STDERR_FILENO, "Failed to open destination file.\n", 33);
return 1;
}
char buffer[1024];
ssize_t num_read = 0;
ssize_t num_written = 0;
while ((num_read = read(fd_src, buffer, sizeof(buffer))) > 0) {
num_written = 0;
while (num_written < num_read) {
ssize_t res = write(fd_dst, &buffer[num_written], num_read - num_written);
if (res < 0) {
write(STDERR_FILENO, "Failed to write to destination file.\n", 37);
close(fd_src);
close(fd_dst);
return 1;
}
num_written += res;
}
}
close(fd_src);
close(fd_dst);
return 0;
}