c - 管道的尺寸是多少

标签 c linux

<分区>

Possible Duplicate:
Pipe buffer size is 4k or 64k?

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

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

    • 有没有办法在创建时指定管道的大小,这样我就可以确保管道中有足够的写入空间?
    • 写入管道是否昂贵?管道是如何实现的?写入管道是否会影响某些 mmap 文件或内存缓冲区?

最佳答案

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

关于c - 管道的尺寸是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13905486/

相关文章:

c - 如何通过 DirectFB 使用鼠标

Python virtualenv -> venv/bin/python 中的新 python 可执行文件

linux - 交叉编译 libSDL

linux - 如何在单括号中使用 grep?

c - sqlite 增加返回的 blob 的大小

c - 如何获取数字序列然后打印最后 5 个?

linux - 如何为 MT4 制作 DLL(使用 Linux)?

C - 应用程序套接字,在 do-while 中的 read() 之前不执行 printf()

c - 如何获取 const char * 的值

c++ - 如何检测文件是否被覆盖?,