3

シークを使用して C プログラミングでファイル サイズを取得しようとしています。fseek、stat.size も も使用できませんftell。実行する必要があるカスタム オペレーティング システム UNIX があります。

シークを使用するだけでファイルサイズを調べるにはどうすればよいですか? 出来ますか?

  FILE *fd = open(argv[1], "r");

  if(fd == NULL)
  {
    printf("Not able to open the file : %s\n", argv[1]);
    return;
  }

  // Set the pointer to the end
  seek(fd, 0, SEEK_END);
4

3 に答える 3

7

seek? おそらくということですlseekマニュアルページを見てください。何をlseek返しますか?

于 2011-10-13T16:24:26.193 に答える
4

offset = 0withを使用する構文whence = SEEK_ENDがファイル オフセットをファイルの末尾に配置するかどうか疑問に思っているだけの場合は、「はい」、少なくとも「標準f/lseek()」については正しいと思います。

lseek()ファイルオフセットを直接返す必要があります。fseek()次の場合ftell()、ファイルオフセットが取得されます。

于 2011-10-13T17:29:10.680 に答える
1

通常、open()ではなく int を返しますFILE *。戻り値 >= 0 をチェックする必要があり ます。 fopen()from<stdio.h>は a を返します FILE *。また、fopen()fseek()は C 標準ライブラリの一部です。UNIX の open() は POSIX の一部です。したがって、一般的にfopen()/fseek()の方が移植性が高くなります。

あなたが本当にカスタムの「Unix ライクな」環境を使用している場合、それがもはや当てはまらない場合 (つまり、代わりにカスタム API を使用している unistd.h場合) は、ここでより多くの情報を提供せずに良い答えを出すことはできません。あなたが実際に実行しているOSを教えてもらえますか?

lseek()または、ルターが提案したように、通常の を使用している場合はの戻り値を確認してください<unistd.h>

于 2011-10-13T17:00:04.107 に答える