根据手册页,我在包含
_GNU_SOURCE
之前定义了 <fcntl.h>
:
#include <stdio.h>
#define _GNU_SOURCE /* For Linux's fallocate(). */
#define HAVE_FALLOCATE 1
#include <fcntl.h>
int main(void)
{
printf("%d\n", FALLOC_FL_KEEP_SIZE);
}
我编译的:
gcc-13 -std=gnu2x c.c
但这失败了:
error: `FALLOC_FL_KEEP_SIZE` undeclared (first use in this function)
有关环境的一些统计数据:
OS: Linux Mint 21.2 x86_64
Kernel: 5.15.0-112-generic
GLIBC Version: GNU C Library (Ubuntu GLIBC 2.35-0ubuntu3.8) stable release 2.35
Compiler: gcc version 13.1.0 (Ubuntu 13.1.0-8ubuntu1~22.04)
运行
grep -r FALLOC_FL_KEEP_SIZE /usr/include
返回:
/usr/include/linux/falloc.h:#define FALLOC_FL_KEEP_SIZE 0x01 /* default is extend size */
/usr/include/linux/falloc.h: * with fallocate. Flag FALLOC_FL_KEEP_SIZE should cause the inode
运行 grep -r FALLOC_FL_KEEP_SIZE /usr/include 返回:
您假设
/usr/include/linux/falloc.h
已 #included
进入您的程序;不是的。
您可以通过以下方式验证:
gcc -E c.c | grep falloc
您可以通过添加实际的包含来解决此问题:
#include <linux/falloc.h>