如何查看自己电脑Linux系统进程间通信pipe缓冲区大小?

在终端使用ulimit -a命令

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31384
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31384
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited 

会显示出当前系统各种参数上限,pipesize一项返回是8,单位是512bytes,也就是4K。

在 Linux 系统中,管道的缓冲区大小是有限的,一般为 4KB 或 64KB,取决于系统的实现和版本。这个缓冲区大小是内核中的一个常量,需要注意的是,管道的缓冲区大小对应的是单个写操作和单个读操作的数据量,而不是整个管道的数据量。如果写入的数据量超过了管道缓冲区的大小,写操作可能会被阻塞,直到有足够的空间来存储数据。同样地,读取操作也可能会被阻塞,直到有数据可读。在使用管道进行进程间通信时,需要注意管道缓冲区的大小限制,以避免数据丢失或阻塞等问题。

如果一次性写入4K数据,管道会塞满,写阻塞。

1.  当管道中无数据时,读操作阻塞;当管道中无数据的时候,将写端关闭,读操作立即返回

2.  当管道中,写满(64k)数据时,写操作阻塞,必须空出4k的空间,写操作继续,直到写满为止。

3.  将读端关闭,如果继续进。行写操作,会导致管道破裂,内核会向进程发送SIGPIPE信号(通常为Broken pipe)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值