1

ファイルの行数を計算する必要がありますが、:、、...などの「簡単な」関数を使用せずに計算する必要がありfopenます。fscanffgets

意味私はこれを行うことはできません:

int calculateLines(char *filename)
 {
     FILE *myFile;
     char c;
     int myLines = 0;

     myFile = fopen(filename, "r");

     if(myFile == NULL)
         return 0;

     while ((c = fgetc(f)) != EOF)
         if(c == '\n')
             myLines++;

     fclose(f);

     if(c != '\n')
         myLines++;

     return myLines;
 }

そのために、私はシステムコール、、、、&のみをread使用できます。writecloseopenfork

私がこれまでに行ったことから、私は次のように思います:

  • 次のファイルを開きますopensomeResult = wrapper_open(argv[1],O_RDONLY,0);
  • 次の行を次のreadように読み取る:readを操作して、次の行を読み取ることはできますか?私はそのチュートリアルで確認しようとしましたが、手ぶらで来ました。
4

1 に答える 1

2

を使用して行ごとに実際に読み取ることはできませんread。代わりに、データのブロック(任意の数の行、およびおそらくいくつかの部分的な行が含まれている可能性があります)を読み込みます。そのブロックの改行文字をカウントし、ファイルの最後に到達するまで読み取り/カウントプロセスを繰り返します。

于 2012-04-22T23:06:25.827 に答える