涉及到与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);
}
文件将在终端中这样输入:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您可以copy_file_range为此使用系统调用。它比使用read和write调用更快,因为复制是在内核内部完成的。从man页面:
copy_file_range()系统调用在两个文件描述符之间执行内核内复制,而没有将数据从内核传输到用户空间然后再传输回内核的额外费用。