【发布时间】:2012-02-17 00:46:05
【问题描述】:
考虑以下代码行:
while((n = read(STDIN_FILENO, buff, BUFSIZ)) > 0)
据我了解,read/write 函数是非缓冲 I/O 的一部分。那么这是否意味着read() 函数每次从 stdio 调用只会读取一个字符?或者换句话说,n 的值将是
-1 in case of error
n = 0 in case of EOF
1 otherwise
如果不是这样,上面的read()函数什么时候会返回,为什么?
注意:我还认为read() 会等到它成功从标准输入中读取BUFSIZ 的字符数。但是如果可读取的字符数少于BUFSIZ,会发生什么情况?读取会永远等待还是直到 EOF 到达(unix 上的Ctrl + D 或 Windows 上的Ctrl + Z)?
另外,假设 BUFSIZ = 100 和 stdin = ACtrl+D(即 EOF 紧跟在单个字符之后)。现在while loop 将迭代多少次?
【问题讨论】:
-
作为一个参考,我相信你可以从
0read,这是标准输入,但只能使用stdin和fread()。 -
是的,你说得对……谢谢!!由于标准输入是
FILE *类型,它不能与read一起使用 -
或
STDIN_FILENO如果您想贴标签。 -
@Dave,那个,我不知道。谢谢!