一尘不染

F_SETPIPE_SZ未声明

linux

我包括以下标题:

#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>

我也尝试使用

#define _GNU_SOURCE

之前#include <unistd.h>,但这也无济于事。

我尝试使用fcntl并将其F_SETPIPE_SZ作为第二个参数传递,但我不断收到此错误消息:

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

我实际上发现我不需要它,但是我很好奇为什么我不能使用它。

谢谢。

因此,感谢Chrono Kitsune,这是解决方案:

 #define _GNU_SOURCE

在任何包含之前。


阅读 641

收藏
2020-06-03

共2个答案

一尘不染

因此,有了Chrono Kitsune,这就是解决方案:

#define _GNU_SOURCE

在任何包含之前。

2020-06-03
一尘不染

F_SETPIPE_SZ / F_GETPIPE_SZ是相对较新的。较旧的内核(例如RHEL6中使用的2.6.32)没有它们。如果您查看/usr/include/linux/fcntl.h且未定义这些常量,则此API将无法正常工作,并且无论您要构建什么,都必须找到某种绕过它的方法。

2020-06-09