问题描述
我的程序打开一个文件,并想要为其设置O_DIRECT
。但是程序假定块大小为512。因此,我需要检查该大小。 man 2 open
建议这样做ioctl(filesystem_fd,BLKSSZGET,&block_size)
。
我的问题是:如何从普通文件filesystem_fd
中获得此fd
?
解决方法
您不需要这样做。如果您想知道文件所在文件系统的块大小,只需查看st_blksize。那是:
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc,char **argv)
{
struct stat sb;
char *name = argc > 1 ? argv[1] : argv[0];
if( stat(name,&sb) == -1 ) {
perror(name);
return EXIT_FAILURE;
}
printf("Block size: %d\n",(int)sb.st_blksize);
return EXIT_SUCCESS;
}