#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,可能是什么问题?
答案 0 :(得分:2)
F_SETPIPE_SZ
是针对Linux的。你需要添加:
#define _GNU_SOURCE
包括fcntl.h
之前。这在手册页的符合部分中有记录。
但请注意,对于具有并发读取和写入的IPC的大多数管道使用,默认大小应该足够,因为管道大小仅与减少上下文切换相关。如果由于长时间存储数据而需要大型管道(例如,因为阅读器不活动),您应该考虑使用临时文件重新考虑解决方案,因为非常大的管道会浪费内核内存。