如何使用statx syscall?

时间:2018-12-17 07:59:45

标签: c linux stat

Ubuntu 18.04

我正在尝试使用Linux内核statx中引入的4.11 syscall。有一个手动输入:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>           /* Definition of AT_* constants */

int statx(int dirfd, const char *pathname, int flags,
             unsigned int mask, struct statx *statxbuf);

所以我试图自己写一个例子:

const char *dir_path = NULL;
const char *file_path = NULL;
//read from command line arguments
int dir_fd = open(dir_path, O_DIRECTORY);

struct statx st; //<--------------------------- compile error
statx(dir_fd, file_path, 0, &statx);

但是它根本无法编译。错误是sizeof(statx)未知。实际上,它不是在sys/stat.h中定义的,而是在linux/stat.h中未包含的sys/stat.h中定义的。但是在包含linux/stat.h之后,问题就没有了

int statx(int dirfd, const char *pathname, int flags,
             unsigned int mask, struct statx *statxbuf);

我希望从那以后

$ uname -r
4.15.0-39-generic

,并且我可以使用比4.11更新的4.15.0-39(通用)

怎么了?

1 个答案:

答案 0 :(得分:2)

当前,由于glibc不为statx调用提供包装器,因此您必须使用内核定义。因此,要么从内核中复制statx结构定义,要么从Linux内核提供的API中使用它。 struct statx当前在linux/stat.h中定义。

linux提供了对here可用的statx的示例调用。