【发布时间】:2014-03-17 18:01:19
【问题描述】:
我的代码应该读取命令行中给出的 2 个文件,然后将它们打印到 STDOUT,除非给出第三个参数,在这种情况下,它应该打印到该文件而不是 STDOUT。 我觉得一切都是正确的,但是当我运行程序时,什么都没有打印出来。有什么你能发现的,为什么不呢?一双新的眼睛总是有帮助的。
int main(int ARGC, char *ARGV[]) {
char buf1[1024];
char buf2[1024];
int n=0;
int m=0;
int fd=open(ARGV[1],O_RDONLY);
int fd2=open(ARGV[2],O_RDONLY);
int fd3=open(ARGV[3],O_WRONLY);
do {
int n= read(fd,buf1,sizeof(buf1));
if(n<0) {
perror("read error1");
}
if(fd3!=0) {
write(fd3,buf1,n);
}
if(fd3==0) {
write(STDOUT_FILENO,buf1,n);
}
} while(n==sizeof(buf1));
do{
int m=read(fd2,buf2,sizeof(buf2));
if(m<0) {
perror("read error2");
}
if(fd3!=0) {
write(fd3,buf2,m);
}
if(fd3==0) {
write(STDOUT_FILENO,buf2,m);
}
} while(m==sizeof(buf2));
}
【问题讨论】:
-
我的眼睛因试图跟随您不一致的缩进而受伤。
-
啊,那不那么痛苦了。谢谢,好的。
-
您为什么期望
f3被设置为0? -
@alk 是对的。应初始化为 0,然后仅当 argc > 3 时才将其设置为
open的结果。在您的代码中,如果未定义的行为不影响您,它将为 -1。 -
“脚本”?您使用的是 C 解释器吗? C 通常产生“程序”:)
标签: c low-level-io