F_SETPIPE_SZ未申报

我已经包含以下标题:

#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'未声明(首次在此函数中使用)

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

谢谢。

所以这里的解决scheme,感谢Chrono Kitsune:Put

  #define _GNU_SOURCE 

之前有任何包括。

所以这是解决方案 ,感谢Chrono Kitsune :

 #define _GNU_SOURCE 

之前有任何包括。

您还应该注意Chrono Kitsune的其他评论 。

F_SETPIPE_SZ / F_GETPIPE_SZ是相对较新的。 较老的内核(例如RHEL6中使用的2.6.32)没有它们。 如果你看看/usr/include/linux/fcntl.h这些常量没有被定义,那么这个API不会起作用,你将不得不寻找一些方法绕过它,无论你正在构建什么。