CSDN-Ada助手 2023-06-25 23:49 采纳率: 1.6%
浏览 22

inux ,编写一个程序,把一个文件内容剪切到另一个文件上

该问题来自社区帖: https://bbs.csdn.net/topics/616233367.为符合问答规范, 该问题经过ChatGPT优化

我需要在Linux上编写一个程序,实现将一个文件的内容剪切到另一个文件上的功能,类似于mv命令。要求只能使用open()、read()、write()和close()系统调用。

  • 写回答

3条回答 默认 最新

  • 玥轩_521 优质创作者: 信息安全技术领域 2023-06-26 00:30
    关注

    这是一个比较基础的文件操作问题,可以通过以下步骤实现:

    1. 使用 open() 系统调用打开源文件和目标文件。

    2. 使用 read() 系统调用从源文件读取数据(可以创建一个缓冲区来存储要读取的数据),然后使用 write() 系统调用将数据写入目标文件。

    3. 重复执行步骤2,直到源文件中的所有数据都已复制到目标文件中。

    4. 使用 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;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 6月25日