在一个C程序中,我想从stdin读取文本行。同时,我希望处理来自另一个文件描述符的数据。
我尝试使用poll来等待任何一个源变为可读,并相应地处理它们。然而,poll需要裸文件描述符,而对于像fgets这样读取整行的操作,我需要一个FILE句柄。
我可以使用fileno或fdopen来“转换”它们,但混合使用两者似乎不是一个好主意。
因此,有没有一种好的方法可以等待文本行而不阻塞或线程化?
我尝试使用poll来等待任何一个源变为可读,并相应地处理它们。然而,poll需要裸文件描述符,而对于像fgets这样读取整行的操作,我需要一个FILE句柄。
我可以使用fileno或fdopen来“转换”它们,但混合使用两者似乎不是一个好主意。
因此,有没有一种好的方法可以等待文本行而不阻塞或线程化?
read()
之类的系统调用从标准输入读取数据? - MikeCATread
函数不能轻易地读取到行末。这意味着我需要实现自己的缓冲基础设施,类似于FILE
。 - michasfdopen
看起来对我来说是正确的。你试过了吗? - Jabberwockypoll()
因为stdin
有更多数据而返回时,并不意味着整行数据已经到达,因此fgets()
仍然可能会阻塞。 - Sergiofgets()
函数,如果在stdin
上没有完整的行,则返回类似于EAGAIN
的内容。 - Sergio