我想用系统调用预分配存储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);
我得到一个有洞的文件还是一个没有洞的“真实”文件?第二个是我的目标。