1

/etc/passwd ファイルをバイト単位で読み取り、std o/p に表示したい。これが私のコードです

void main(int argc, char *argv[])
{
  int fd, ch;
  int ret;
  if((fd = open("/etc/passwd",O_RDONLY)) == -1);
      perror("open");
  while((ret = read(fd, &ch, sizeof(ch))) != 0)
      putchar(ch);

}

正しくコンパイルされますが、open:Success が表示されます。コンテンツを表示できないのはなぜですか。何か問題がありますか?

4

2 に答える 2

1

if の閉じ括弧の後にセミコロンがあってはなりません。それが問題の原因です。セミコロンは事実上、条件が true の場合に実行される null ステートメントです。fd が -1 に等しくないため、perror が呼び出されます。

于 2013-01-17T01:45:23.920 に答える
0

の引数putchar()intの範囲の値を持つ です。そのため、ファイルからunsigned char全体を読み取って、intそれを 1 文字として出力しようとするべきではありませんunsigned char。のタイプを に変更するだけでこれを実現できchますunsigned char

行末の余分なセミコロンは、が成功した場合でもifyour が表示される理由です。perror()open()

于 2013-01-17T01:48:22.863 に答える