linux – 我需要刷新命名管道吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 我需要刷新命名管道吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1841字,纯文字阅读大概需要3分钟。
内容图文
![linux – 我需要刷新命名管道吗?](/upload/InfoBanner/zyjiaocheng/960/a4302c4533574130b46f5777f7f0c7e8.jpg)
我无法找到命名管道是否缓冲,因此问题.
该联机帮助页说https://linux.die.net/man/3/mkfifo:
A FIFO special file is similar to a pipe … any process can open it for reading or writing, in the same way as an ordinary file.
管道没有缓冲,不需要冲洗.但在普通文件中,我会fflush(或fsync)文件描述符.
命名管怎么样?
解决方法:
Pipes are not buffered, no need to flush.
实际上我反过来说:对于大多数意图和目的,管道只不过是缓冲区.刷新它们没有意义,因为没有底层设备接收数据.
此外,虽然POSIX没有明确禁止管道I / O的额外缓冲,但它确实提供了足够的行为要求,我认为没有任何方法可以从观察中确定是否发生了这种缓冲,除非fsync()成功.换句话说,即使有额外的缓冲,也不需要fsync()管端.
But in a ordinary file, I
would fflush (or fsync) the file descriptor.
嗯,不,你不会fflush()文件描述符. fflush()对流进行操作,由FILE对象表示,而不是文件描述符.这是一个至关重要的区别,因为大多数流都在C库级别进行缓冲,与下面文件的性质无关.这是fflush()与之交互的库级缓冲区.您可以通过setvbuf()函数控制流的库级缓冲模式.
在提供它的那些系统上,fsync()在不同的较低级别上运行.它指示操作系统确保先前写入指定文件描述符的所有数据都已传送到底层存储设备.换句话说,它会刷新OS级缓冲区.
请注意,您可以通过fdopen()函数将流包装在管道末端文件描述符周围.这不会使管道需要比以前更多地进行冲洗,但是默认情况下流将被缓冲,因此冲洗将与之相关.
还要注意,某些存储设备执行自己的缓冲,因此即使数据已经传递到存储设备,也不能确定它们是否立即持久存在.
How about named pipe?
以上关于流I / O与基于POSIX描述符的I / O的讨论也适用于此.如果通过流访问命名管道,那么它与fflush()的交互将取决于该流的缓冲.
但我想你的问题更多的是os级缓冲和刷新. POSIX似乎没有说明具体的内容,但由于您在标题中标记了[linux]并引用了Linux手册页,因此我提供了以下内容:
The only difference between pipes and FIFOs is the manner in which
they are created and opened. Once these tasks have been accomplished,
I/O on pipes and FIFOs has exactly the same semantics.
内容总结
以上是互联网集市为您收集整理的linux – 我需要刷新命名管道吗?全部内容,希望文章能够帮你解决linux – 我需要刷新命名管道吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。