微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在bash中设置从命名管道读取的管道而不阻塞

我正在寻找一个子进程,其中一个文件描述符被打开到给定的管道,这样open()调用就不会挂起,等待管道的另一端接收连接.

展示:

$mkfifo /tmp/foobar.pipe
$some_program --command-fd=5 5</tmp/foobar.pipe

在这种情况下,some_program直到某个进程打开/tmp/foobar.pipe才能运行;但是,some_program即使没有接收到命令也会产生有用的效果,因此所需的行为是some_program立即执行的.

通过执行备用脚本语言(python,perl等)或使用O_NONBLOCK标志打开/tmp/foobar.pipe的C包装器来执行此操作的机制是显而易见的;我正在寻找一种纯粹的bash解决方案,如果有可能的话.

在设置管道时打开FD读/写而不是只读可防止阻塞.

更具体一点:

$mkfifo /tmp/foobar.pipe
$some_program --command-fd=5 5<>/tmp/foobar.pipe

防止不希望的阻塞行为,因为5<> / tmp / foobar.pipe在RW模式下打开(与在5< /tmpobfo.pipe中以只读模式打开相反),尽管O_NONBLOCK仍然设置.感谢waldner on irc://irc.freenode.org/#bash这个指针.

原文地址:https://www.jb51.cc/bash/386975.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐