管子的大小是多少

时间:2012-12-16 21:07:03

标签: c linux

  

可能重复:
  Pipe buffer size is 4k or 64k?

  1. 在linux中,哪个头文件指定了可在管道上写入的大小?

  2. 我在每个可配置周期捕获主应用程序的延迟,并将该数据写入管道。一个单独的报告过程会读取该管道。通常,主应用程序每秒交换大约10,000条消息。因此,给定一秒的周期,主应用程序为每个消息交换收集10k延迟数据点,然后将它们写入第二个边界的管道。我在这个场景中有以下问题

    • 有没有办法在创建时指定管道的大小,所以我可以确保管道中有足够的写入空间?
    • 管道写入是否昂贵?管道是如何实施的?管道写入是针对某些mmap文件还是内存缓冲区?

1 个答案:

答案 0 :(得分:1)

  • 是否可以在创建时指定管道的大小? 可能。从Linux 2.6.35开始,您可以使用fcntl(2)F_SETPIPE_SZ操作将管道缓冲区设置为/proc/sys/fs/pipe-max-size。在早期版本中,没有,但我想您可以使用套接字机制。对于大多数用途来说它会慢一些,但你可以指定缓冲量达到wmem_max,请参阅socket(7),并且你对内核内存分配有一定的其他控制。
  • 对管道的写入是否昂贵? 否。但是写入(2)内核调用,因此管道I / O应该被缓冲如果可能的话。
  • 如何实现管道?使用内核代码将数据传入和传出系统缓冲区缓存。
  • 对管道的写入是针对某些mmap文件还是内存缓冲区?它是内存缓冲区