我正在尝试使用F_SETPIPE_SZ更改管道大小,但在编译时它说它是未声明的?

时间:2013-05-31 18:49:57

标签: pipe fcntl

#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,可能是什么问题?

1 个答案:

答案 0 :(得分:2)

F_SETPIPE_SZ是针对Linux的。你需要添加:

#define _GNU_SOURCE

包括fcntl.h之前。这在手册页的符合部分中有记录。

但请注意,对于具有并发读取和写入的IPC的大多数管道使用,默认大小应该足够,因为管道大小仅与减少上下文切换相关。如果由于长时间存储数据而需要大型管道(例如,因为阅读器不活动),您应该考虑使用临时文件重新考虑解决方案,因为非常大的管道会浪费内核内存。

相关问题