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

  • 本文关键字:编译 未声明 SZ SETPIPE 管道 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,有什么问题吗?

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

#define _GNU_SOURCE

在包含fcntl.h之前。这在手册页的符合一节中有记录。

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

相关内容

  • 没有找到相关文章

最新更新