Possible Duplicate:
Pipe buffer size is 4k or 64k?
在linux中,哪个头文件指定管道上可写的大小?
我捕获每个可配置周期主应用程序的延迟,并将该数据写入管道。一个单独的报告过程读取了这个管道。通常,主应用程序每秒交换大约10000条消息。因此,给定1秒的周期,主应用程序为每个消息交换收集10k个延迟数据点,然后将它们写到秒边界上的管道。在这个场景中我有以下问题
是否可以在创建时指定管道的大小,以便确保管道中有足够的写空间?
给管道写东西贵吗?管道是如何实现的?对管道的写操作是针对某个mmap文件还是内存缓冲区?
最佳答案
有没有办法在创建时指定管道的大小?也许 吧。从Linux2.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/