开发者社区 问答 正文

如何仅使用linux系统调用将两个文件合并为第三个文件?

涉及到与C代码交互的linux系统调用时,我是一个完全菜鸟。到目前为止,我已经可以打开一个文件,仅此而已。我不确定如何将第二个文件合并到第三个文件中。

例如,我的file1具有简单的文本内容,而file2具有相同的文本内容,如何仅使用linux系统调用将这两个内容合并到file3中?我知道我必须使用lseek更改指针,但是不确定如何利用它。

这是我到目前为止所拥有的...对于这种稀缺我深表歉意:

我相信这需要file1并将其复制到file2

#include <fcntl.h>
#include <unistd.h>

int copyfile(const char *file1, const char *file2)
{
    int infile, outfile;
    ssize_t nread;
    char buffer[BUFSIZE]

    if( (infile = open(file1, O_RDONLY)) == -1 )
        return (-1);

    if( (infile = open(file2, O_WRONLY|O_CREATE|O_TRUNC, PERM)) == -1 )
    {
        close (infile);
        return (-2);
    }

    /*read from file1 BUFSIZE chars at a time*/
    while ( nread = read (infile, buffer, BUFSIZE) )
    {
        // write buffer to output file
        if (write (outfile, buffer, nread) < nread)
        {
            close(infile);
            close(outfile);
            return (-3);
        }
    }
    close (infile)
    close (outfile)

    if (nread == -1)
        return (-4);
    else
        return(0);
}

文件将在终端中这样输入:

展开
收起
祖安文状元 2020-01-07 13:59:17 839 分享 版权
1 条回答
写回答
取消 提交回答
  • 您可以copy_file_range为此使用系统调用。它比使用read和write调用更快,因为复制是在内核内部完成的。从man页面:

    copy_file_range()系统调用在两个文件描述符之间执行内核内复制,而没有将数据从内核传输到用户空间然后再传输回内核的额外费用。

    2020-01-07 13:59:24
    赞同 展开评论