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

4

1 回答 1

2

F_SETPIPE_SZ是特定于 Linux 的。您需要添加:

#define _GNU_SOURCE

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

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

于 2013-06-04T21:43:10.087 回答