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函数的错误进行处理,适合这样 的情况