【发布时间】:2017-02-28 22:24:03
【问题描述】:
从这个post 听起来fgets() 是一个阻塞调用,但是,this 手册页显示如果设置为非阻塞,它将返回NULL 和errno 将是EWOULDBLOCK 如果没有数据可以读取,那么我的假设是确实可以将其用作非阻塞。
我知道select()和朋友们,我只是想知道将其用作非阻塞是否安全?如果不是,那是什么原因?
【问题讨论】:
-
定义“安全”。如果您正确使用它,那么是的,它是“安全的”。
-
正常使用。听起来好像将其用作非阻塞是不正确的,但如果是这样,那么我想这就回答了这个问题。谢谢
-
如果底层 fd 是常规文件(不是管道、tty、fifo 或套接字),即使您将其设置为非阻塞,在 Linux 上读取仍将阻塞。
-
感谢您澄清这一点。它正在从标准输入读取。
-
如果您在重定向下运行程序,Stdin 可能是常规文件。
标签: c fgets nonblocking