C F_SETPIPE_SZ未声明

C F_SETPIPE_SZ未声明,c,linux,fcntl,C,Linux,Fcntl,我已包括以下标题: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> 在之前#包括,但它也没有帮助 我尝试使用fcntl并将其

我已包括以下标题:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
之前#包括
,但它也没有帮助

我尝试使用
fcntl
并将其作为第二个参数传递给
F_SETPIPE_SZ
,但我一直收到以下错误消息:

错误:“F_SETPIPE_SZ”未声明(此函数首次使用)

事实上我发现我不需要这个,但我只是好奇为什么我不能用它

多谢各位

多亏了Chrono Kitsune,以下是解决方案: 放

在任何包含之前。

因此,感谢您:

在任何包含之前


你还应该注意Chrono Kitsune的另一个。

F_SETPIPE_SZ/F_GETPIPE_SZ是相对较新的。较旧的内核(例如RHEL6中使用的2.6.32)没有。如果您在/usr/include/linux/fcntl.h中查看,并且这些常量没有定义,那么这个API将不起作用,您必须找到某种方法在您正在构建的任何东西中绕过它。

您如何调用
fcntl
。你能在你的问题中发表这一点吗?在包含任何标题之前,你应该
#定义_GNU_SOURCE
。我怀疑这会有帮助,但值得一提。
uname-r
显示了什么?如果小于2.6.35,则不应使用
F_SETPIPE_SZ
。我的手册页记录了自Linux 2.6.35以来可用的手册页。@ChronoKitsune没有这样定义。启用它的正式方法是通过cli:gcc--std=gnu blablabla。相反,将其作为答案发布。您可以回答自己的问题,一两天后您就可以接受了。@hustmphrr您是对的,但由于
\u GNU\u SOURCE
是一个Linux glibc功能测试宏(),就像
\u POSIX\u C\u SOURCE
\u XOPEN\u SOURCE
一样,在包含任何头之前,只需在每个文件的基础上定义宏是完全合理的。手册页明确说明允许使用此选项。重要的一点是在包含任何头之前定义它,这意味着在命令行或文件中。
#define _GNU_SOURCE
 #define _GNU_SOURCE
#define _GNU_SOURCE