linux - Bash:如果管道 IO 空闲则关闭

标签 linux bash pipe

如果管道流空闲了一段时间,如何关闭程序?

比如说:

一些程序 | closeidlepipe -t 500 |其他程序

是否有一些程序 closeidlepipe 可以在空闲一段时间后关闭 (-t 500)?

timeout可以在一段时间后关闭,但不与“idle”区别。

更新

重要的是要注意 someprogram 输出无穷无尽的二进制数据流。数据可能包含空字符 \0 并且应该逐字传送。

最佳答案

这是执行此操作的程序核心的一般形式。

while(1) {
    struct timeval tv;
    tv.m_sec = 0;
    tv.m_usec = 500000;
    int marker = 1;
    select(1, &marker, NULL, NULL, &tv);
    if (marker == 0) exit(1);
    char buf[8192];
    int n = read(0, buf, 8192);
    if (n < 0) exit(2);
    char *b = buf;
    while (n)
    {
        int l = write(1, b, n);
        if (l <= 0) exit(3);
        b += l;
        n -= l;
     }
}

关于linux - Bash:如果管道 IO 空闲则关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40617948/

相关文章:

java - 如何解决在 Java 中找不到符号?

linux - 安装和删除 DNSMasq 后本地服务器/Apache 无法工作 - macOS Sierra

c - 为 linux 编译 mozlz4 时遇到问题

linux - 登录后自动运行 Bash 脚本以同步 Git 存储库

bash - 循环遍历 CSV 文件并在读取时创建新的 csv 文件?

bash - 2 while 读取循环?

linux - 管道打开 '|' 和 '|-' 之间的区别(安全管道打开)

c - 管道的 self 实现,如何知道有多少进程对我的管道有文件描述符?

bash - 在命令之间转义管道输出

linux - 有人能告诉我这个代码片段的作用吗