【问题标题】:reading lines of text in a nonblocking way以非阻塞方式读取文本行
【发布时间】:2016-07-07 08:15:44
【问题描述】:

在 C 程序中,我想从标准输入读取文本行。 同时我想处理来自另一个文件描述符的数据。

我尝试使用poll 等待两个源中的任何一个变得可读并相应地处理它们。但是 poll 需要裸文件描述符,并且要读取带有 fgets 之类的整行,我需要一个 FILE 句柄。

我可以使用fileno 或fdopen 来“转换”它们,但混合使用这两种方法似乎不是一个好主意。

那么,有没有一种不阻塞或线程等待文本行的好方法?

【问题讨论】:

  • 为什么不使用像read()这样的系统调用来读取标准输入?
  • read 直到行尾才能轻松阅读。这意味着我需要实现自己的类似于 FILE 的缓冲基础架构。
  • fdopen 在我看来是正确的方式。你试过了吗?
  • 请注意,当poll() 返回时,因为stdin 有更多数据,这并不意味着有整行并且fgets() 不会阻塞。

标签: c file-descriptor


【解决方案1】:

你可以使用任何你想要的多路复用(select()、poll()、epoll_wait())。但是你不应该从stdin 和fgets() 阅读,因为多路复用对于我们是否有完整的线路一无所知。所以在某些情况下它可能会阻塞。你应该编写自定义的行读取函数,这将表明还没有完整的行并立即返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2013-09-03
    • 2010-11-19
    相关资源
    最近更新 更多