Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
#include <unistd.h> #include <fcntl.h> int exec[2]; int pipesize = 8192; if(pipe(exec) ==-1) { perror("pipe"); return -1; } fcntl(exec[1],F_SETPIPE_SZ,&pipesize);
我正在运行此代码,但我收到一条错误消息,提示 F_SETPIPE_SZ 未声明。我使用的是 Ubuntu 13.04,可能是什么问题?
F_SETPIPE_SZ是特定于 Linux 的。您需要添加:
F_SETPIPE_SZ
#define _GNU_SOURCE
在包括fcntl.h. 这记录在手册页的符合部分中。
fcntl.h
但是请注意,默认大小对于 IPC 的大多数管道使用以及并发读写来说应该足够了,因为管道大小仅与减少上下文切换有关。如果您需要一个大管道,因为您要长时间存储数据(例如,因为阅读器不活动),您应该考虑使用临时文件重新考虑您的解决方案,因为非常大的管道会浪费内核内存。