当前位置: 技术问答>linux和unix
apue page113
来源: 互联网 发布时间:2016-11-12
本文导语: apue中文第二版113页这样说: 当以读和写方式打开一个文件时,具有如下限制: 1 如果中间没有fflush fseek fsetpos或rewind, 则输出的背后不能直接跟随输入。 2 如果中间没有fseek fsetpos rewind,或者一个输入操作没有到...
apue中文第二版113页这样说:
当以读和写方式打开一个文件时,具有如下限制:
1 如果中间没有fflush fseek fsetpos或rewind, 则输出的背后不能直接跟随输入。
2 如果中间没有fseek fsetpos rewind,或者一个输入操作没有到达文件尾端,则在输入操作之后不能直接跟随输出。
我想问的是,背后的原因是什么,为什么有这样的限制?
当以读和写方式打开一个文件时,具有如下限制:
1 如果中间没有fflush fseek fsetpos或rewind, 则输出的背后不能直接跟随输入。
2 如果中间没有fseek fsetpos rewind,或者一个输入操作没有到达文件尾端,则在输入操作之后不能直接跟随输出。
我想问的是,背后的原因是什么,为什么有这样的限制?
|
1、输出之后,即使不移动文件指针,即调用一个fseek(fp, 0, SEEK_CUR),也可以跟一个输入
2、与上面类似
应该与文件指针无关
2、与上面类似
应该与文件指针无关
|
1 如果中间没有fflush fseek fsetpos或rewind, 则输出的背后不能直接跟随输入。
2 如果中间没有fseek fsetpos rewind,或者一个输入操作没有到达文件尾端,则在输入操作之后不能直接跟随输出。
-> 两方面。
一是缓冲区的问题。如果没有这几个函数,你前面写的内容有可能还在缓冲区里。后续的读操作就会“错过”这部分数据。
二是文件指针,如果你是在读文件的过程中,文件指针可能不在末尾,这时写则会覆盖数据。这也是为什么2里没有提fflush,因为它不会动文件指针。
2 如果中间没有fseek fsetpos rewind,或者一个输入操作没有到达文件尾端,则在输入操作之后不能直接跟随输出。
-> 两方面。
一是缓冲区的问题。如果没有这几个函数,你前面写的内容有可能还在缓冲区里。后续的读操作就会“错过”这部分数据。
二是文件指针,如果你是在读文件的过程中,文件指针可能不在末尾,这时写则会覆盖数据。这也是为什么2里没有提fflush,因为它不会动文件指针。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。