1个
我正在尝试将文件的内容复制到另一个文件。我也想在屏幕上显示文件的内容,如果可能的话,我想使用系统调用(写)来完成所有这些操作。
这是我的代码
#include<fcntl.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define PERMS 0644
char *workfile = "file1.txt";
char *workfile2 = "file2.txt";
int main(int argc, char *argv[])
{
int fd;
int fd2;
int fd3;
ssize_t nread0;
ssize_t nread;
char buf[1024];
char buf2[1024];
ssize_t nread2;
const char msg[] = "File 3 contains:";
if ((fd= open(workfile, O_RDWR,PERMS)) == -1) {
printf("Couldn't open %s\n", workfile);
exit(1);
}
if ((fd2 = open(workfile2,O_RDWR,PERMS)) == -1) {
printf("Couldn't open %s\n",workfile2);
exit(1);
}
while (nread =read(fd,buf,1024)) {
if (lseek(fd2,0,SEEK_END) < 0) return 1;
if (write(fd,buf,nread) && write(1,buf,nread) < nread) {
close(fd);
close(fd2);
return(-3);
}
}
close(fd);
if (nread ==-1) {
return (-4);
}
return 0;
}
当我也尝试写入屏幕时,的内容file1不会复制到,file2但file1会写入屏幕。
我也尝试过在循环之外添加read和和其单独的缓冲区and 。writewhilessize_t
是什么导致此问题?
在这行上,我认为您想fd2写入复制文件。
另请注意,运算符优先<级比更高&&。在与<运算符比较之前,将写调用括在括号中以进行评估。
if((write(fd2,buf,nread) && write(1,buf,nread)) < nread )
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。