日期:2014-05-16  浏览次数:20732 次

apue理解问题
本帖最后由 ssjssh 于 2013-11-19 10:02:17 编辑
好吧,昨天有人在stackoverflow上吧我发的一段话翻译了一下,我现在还是不能理解,大家解释一下。

当从标准IO库获取输入时,不论是(a)以非缓冲流,还是(b)以行缓冲流(要求数据从内核中取出)形式,所有的行缓冲输出流都会被清除。(b)中需要“要求数据??从内核中取出”这个限定,是因为所请求的数据也许已在缓冲中,这样就不需要从内核中读取了。当然,所有来自非缓冲流的输入,即(a)情况,都需要从内核获得数据。

------解决方案--------------------
首先给你讲一下输出:行缓冲输出就是遇到'\n'或者缓冲区满了则输出(清空缓冲区)。同理行缓冲输入也一样。标准输入输出在内核无非就是一小段内存,你一直往里存总有满的时候,一直从里读总有空的时候,其表现形式是在读的时候阻塞,标准写阻塞一般很少遇到,因为内核总能及时处理。
现在给你讲一下非缓冲和行缓冲:行缓冲的意思是:内核检测到输入中断后将数据放到缓冲区里,等待用户读取,如果用户没有读取,那么检测到'\n'或者缓冲区满了就清空缓冲;非缓冲:如果没有用户读取,则直接将数据抛弃,如果有则将数据给用户。这里的用户指read之类的函数。