给出以下设置:
popen()
)stdout
已设置为行缓冲(_IOLBF
)stdout
(select()
,poll()
或epoll()
)上的数据stdout
或fgets()
),父母将从孩子的getline()
中读取[查看流如何设置为行缓冲,我们可以安全地假设只有一行要读取,或者在缓冲区可能有多行等待的情况下,这意味着我们必须调用[ C0]或fgets()
,直到达到getline()
为止(对于非阻塞流,则为EOF
/ EAGAIN
)?
我们可以安全地假设只有一行可以读取,或者在缓冲区可能有多行等待的情况下,这意味着我们必须调用
EWOULDBLOCK
或fgets()
直到它们到达[C0 ](对于非阻塞流,则为getline()
/EOF
)?
我从EAGAIN
中窃取了相关部分(又链接到C11标准):
当对行进行行缓冲时,当遇到换行符时,字符将作为块与主机环境进行传输。
因此,行缓冲并不意味着所有数据都被缓冲在一行中,而是在有新行时立即发送数据。
因此,您的问题的答案是可能正在等待读取多行的情况(当然,这取决于您的子进程实际发送的内容)。