10.9 综合:我该使用哪些I/O函数
I/O函数分类
- 标准I/O函数
- RIO函数
- Unix I/O函数
标准I/O函数
- fopen fdopen
- fread fwrite fscanf fprintf sscanf sprintf
- fget fputs fflush fseek fclose
适合大多数情况,如果遇到对网络的输入输出,会出现问题
限制1
一个输入函数不能跟随在一个输出函数之后
在fflush刷新缓冲区,或者fseek,fsetpos,rewind重置当前文件位置后,可以跟随规避:
在使用输入的函数之前,都刷新缓冲区限制2
一个输出函数不能跟随在一个输入函数之后
如果一个输入函数没遇到EOF,后面不能跟一个输出函数,在调用fseek,fsetpos或者 rewind后可以跟随
然而,在网络输入输出时,对socket用lseek是非法的,所以建议不要使用标准I/O函数 来操作socket
- 规避:
对同一个套接字打开两个流,一个输入,一个输出,但是这样也存在问题,在关闭的时候,会有一个close失败,在线程化的程序中关闭一个关闭的套接字问题很严重
RIO函数
建议使用RIO这样的函数来处理套接字的输入和输出,在UNP卷一上,全部使用了包裹函数来处理socket的输入和输出,RIO函数只是对Unix I/O函数的错误进行处理,适合这样 的情况