来自文件fd的文件系统fd

问题描述

我的程序打开一个文件,并想要为其设置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;
}