linux - 管道中的命令之间有哪些缓冲区?
问题描述
我以为它是 1 个缓冲区,但现在我突然想到它可能是 2 个。
我的意思是在管道中:
cmd1 | cmd2
cmd2
的输出可能是行缓冲的,并且那里没有管道。这应该是由 libcFILE *
流函数管理的缓冲区fwrite()
,或者这个缓冲区也被使用write(3)
?但是,我只记得pipe(7)
谈到了显然在内核中控制的管道缓冲区的大小。
标准输入是否也有缓冲?是否有 3 个缓冲区,1 个在内核空间,2 个在用户空间?
我以前认为read(2)
当管道缓冲区为空时会挂起,但是当 stdin 不是管道而是终端时,我没有管道缓冲区,对吗?如果它没有自己的缓冲区,它是否会根据标准输入是管道、终端还是常规文件来检查不同的缓冲区?
编辑:将问题中的“多少”更改为“什么”。我希望这不是太大的变化。我有兴趣知道缓冲区是什么,而不仅仅是一个数字。
解决方案
推荐阅读
- flutter - 如何在 Lists Flutter 中添加分隔符
- amazon-web-services - AWS Lambda 发布 SNS
- c++ - C++:旧 C 风格的字符串数组问题(如 Char**)
- shell - shell:如何递归地复制具有特殊字符的文件名
- typescript - 在输入三重指令之前找不到 tsconfig.json 中的类型定义 ///
我有这个
tsconfig.json
:{ "extends": "@tsconfig/svelte/tsconfig.json", "include": [ "src/**/*" ], "types": [ "jest", "gapi", "gapi.au
- html - 如何从最后一个元素开始新的 div?
- c++ - 在 Win32 桌面应用程序上创建按钮时出错
- c++ - 我是否需要删除 std::localtime 返回的指针?
- javascript - 如何将用于搜索的内联脚本移到单独的 js 文件中?
- tabulator - 通过拖动底部边框更改表格高度(调整大小)