F_SETPIPE_SZ undeclared

旧时模样 提交于 2019-11-30 09:04:01

问题


I have included following headers:

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

I have also tried to use

#define _GNU_SOURCE

before #include <unistd.h>, but it also does not help.

I try to use fcntl and pass it F_SETPIPE_SZ as second argument, but I keep getting this error message:

error: ‘F_SETPIPE_SZ’ undeclared (first use in this function)

I actually found out that I don't need this, but I'm just curious why I can't use it.

Thank you.

So here's solution, thanks to Chrono Kitsune: Put

 #define _GNU_SOURCE

before any includes.


回答1:


So here's the solution, thanks to Chrono Kitsune:

Put

#define _GNU_SOURCE

before any includes.

You should also pay attention to Chrono Kitsune's other comment.




回答2:


F_SETPIPE_SZ/F_GETPIPE_SZ are relatively recent. Older kernels (e.g. 2.6.32 as used in RHEL6) don't have them. If you look in /usr/include/linux/fcntl.h and these constants aren't defined, then this API isn't going to work and you'll have to find some way to bypass it in whatever you're building.



来源:https://stackoverflow.com/questions/25411892/f-setpipe-sz-undeclared

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!