- 标准I/O函数具有良好的移植性;
- 标准I/O函数可以利用缓冲提高性能;
- 使用标准I/O函数传输数据时,经过两个缓冲;
- TCP的缓冲:用来实现TCP协议;因为丢失数据时要重传,重传的数据就保存在缓冲区;
- I/O函数的缓冲:提高性能;
见Code/syscpy.cpp, Code/stdcpy.cpp;
- 不容易进行双向通信;
- 有时可能频繁调用fflush函数;
- 需要以FILE结构体指针的形式返回文件描述符;
因为切换读写工作状态时应调用fflush函数,这会影响基于缓冲的性能提高;
创建套接字时返回的是文件描述符,而为了使用标准I/O函数,只能将其转换为FILE结构体指针;
#include <stdio.h>
FILE * fdopen(int filedes, const char *mode);
- filedes:需要转换的文件描述符;
- mode:将要创建的FILE结构体指针的模式信息;
- 成功时返回FILE结构体指针,失败则为NULL;
使用实例见Code/desto.cpp;
#include <stdio.h>
int fileno(FILE *stream);
- 成功返回转换后的文件描述符,失败返回-1;
对回升服务器端和客户端的套接字操作改为基于标为I/O函数的数据交换形式;
修改的对象为:
- 回声服务器端:echo_server.cpp;
- 客户端:echo_client.cpp;
实例见Code/echo_stdserv.cpp, Code/echo_stdclnt.cpp;