1

Linux システム コールを使用すると、 openreadが呼び出されます。読み取り呼び出しは 3 つのパラメーターを受け入れます

read(File descriptor, Buffer array, Size of the buffer array);

私の質問は、引数 #3 に関連しています。バッファ配列に読み込みたい複数のテキスト ファイルがあるとします。しかし、私の知る限り、C にはVectorArrayListなどの動的なサイズの構造はありません。

ファイルのサイズを計算する簡単な方法はありますか?

4

4 に答える 4

7

ファイルのサイズを決定してから、そのファイルに対してmmap()stat()を呼び出すこともできます。ファイルは、メモリを必要とせずに「配列」として表示されます。malloc()

于 2012-09-10T18:05:30.103 に答える
2

Linux を使用している場合はstat(2)、ファイル サイズを取得するために使用できます。この構造体には、合計サイズをバイト単位で示すstatフィールドが含まれています。st_size


メモリ内のファイル全体を読み取るのが本当に最善の方法ですか?

于 2012-09-10T17:59:15.627 に答える
2

効率的かどうかはわかりませんが、ファイルの最後に移動してそこから長さを取得するのは「簡単」です。

    fseek(readf, 0, SEEK_END);
    fileLen=ftell(readf);
    buffer=(char *)malloc(fileLen);
于 2012-09-10T18:04:30.417 に答える
1

通常は、固定長のバッファに読み込み、各「レコード」を動的に割り当てられた構造体 (たとえば、malloc() で struct* または char*) にコピーします。

cnicutar が提案したように、ファイルを "stat" し、そのサイズのバッファーを malloc() して、ファイルを一度に読み取ることもできます。

于 2012-09-10T18:01:30.387 に答える