为什么我的C程序没有打印出来?

时间:2014-03-17 18:01:19

标签: c low-level-io

我的代码应该是在命令行中给出的2个文件中读取,然后将它们打印到STDOUT,除非给出第3个参数,在这种情况下它应该打印到该文件而不是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));
}

1 个答案:

答案 0 :(得分:2)

当你离开第三个论点时,你永远不会写到屏幕上。

带有空格或int fd3=open(ARGV[3],O_WRONLY);

ARGV[3]可能会将fd3设置为-1,而0不是{{1}}。因此,您永远不会写入STDOUT_FILENO,而是写入无效的文件描述符。