-1

私のコードは、コマンドラインで指定された 2 つのファイルを読み取り、3 番目の引数が指定されていない限り、それらを 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));
}
4

1 に答える 1

2

3 番目の引数を省略した場合、画面に書き込むことはありません。

int fd3=open(ARGV[3],O_WRONLY);空またはガベージARGV[3]は に設定される可能性がfd3ありますが-1、これは ではありません0。したがって、STDOUT_FILENO に書き込むことはありませんが、代わりに無効なファイル記述子に書き込みます。

于 2014-03-17T18:22:39.417 に答える