![]() |
1
3
我猜你只能在exec'd程序退出后得到它的输出,因为它没有 flush 在每条信息之后。如果是这样的话,你从外面也无能为力。
不能强制正在执行的仅二进制程序刷新。如果您认为非阻塞I/O是解决该问题的一种方法,对不起,但恐怕它是非常正交的。 EDIT:如果exec的程序只使用libc提供的缓冲区(没有实现自己的缓冲区),并且是动态链接的,那么可以通过将它链接到一个修改过的libc来强制它刷新,这个libc刷新每次写入。这将是一个绝望的措施。只有在其他一切都失败的情况下才去尝试。 |
![]() |
2
3
如果你真的想让它工作线缓冲,那么你必须提供一个伪终端作为它的标准输出程序。这进入了一个有趣的领域——伪终端或pty并不那么容易处理。有关POSIX函数,请参阅:
|
![]() |
3
1
注意:根据文件名,我想您使用的是 fifo
根据exec()所执行的程序的不同,您可能会丢失一些输出,或者导致程序失败,因为现在对stdout的写入可能会因EWOULDBLOCK而失败。 IIRC FIFO与管道具有相同的缓冲区大小。每个POSIX的最小值是512字节,通常是4K或8K。 你可能想解释一下为什么你需要这个。与阻塞IO相比,非阻塞IO具有不同的语义,除非您的子进程期望您会遇到各种问题。
stdout是缓冲的,我会在那之后
我会用pipe()代替fifo。Linux的 man pipe 否则,这是很正常的做法。 |
![]() |
4
0
这个
|
![]() |
Yomal · 在java中,如何知道线程池的任务何时结束 7 年前 |
![]() |
Pissu Pusa · 实现非阻塞线程安全的单例日志记录类[关闭] 8 年前 |
![]() |
duy · 在Spring 4中运行并行线程的优雅方式 8 年前 |
![]() |
Roger Johansson · Golang阻塞和非阻塞 9 年前 |
|
latefreak · Python+Tornado用于会计软件 11 年前 |
![]() |
canni · 如何将此代码转换为非阻塞和无锁代码? 11 年前 |
![]() |
Mil0R3 · 回调未在Node.js中异步执行 12 年前 |