システムコールでストレージを事前に割り当てたいfcntl
。これを行うための私のコードは次のとおりです。
fstore_t store = {F_ALLOCATECONTIG, F_PEOFPOSMODE, 0, length, 0};
int ret = fcntl(fd, F_PREALLOCATE, &store);
if (ret == -1) {
store.fst_flags = F_ALLOCATEALL;
ret = fcntl(fd, F_PREALLOCATE, &store);
}
変数ret
は-1
、そのコードを実行した後ではありません。fstat
同じファイル ハンドルを呼び出してファイル サイズを取得すると、 stat.st_size = 0
. しかし、値store.fst_bytesalloc
は の値と同じですlength
。
どうすればいいですか?電話すると
ftruncate(fd, length);
穴のあるファイルを取得するのですか、それとも穴のない「実際の」ファイルですか? 2つ目は私の目標です。