第十五章 套接字和标准I/O

标准I/O函数的优点


标准I/O函数的优点

标准I/O函数具有良好的移植性Portability、标准I/O函数可以利用缓冲提高性能。

 

所有函数都具有移植性,为了支持所有操作系统(编译器),这些函数都是按照ANSI C标准定义的。

使用标准I/O函数时会得到额外的缓冲支持。(创建套接字时,操作系统将生成用于I/O的缓冲。此缓冲在执行TCP协议时发挥着重要的作用。此时,若使用标准I/O函数,将会得到额外的另一缓冲的支持。)

 

设置缓冲的主要目的是为了提高性能,但套接字的缓冲主要是为了实现TCP协议而设立的。例如TCP传输中丢失数据将再次传递,而再次传递数据则意味着在某地保存了数据,即存在套接字的输出缓冲中。与之相反,使用标准I/O函数缓冲的主要目的是为了提供性能。

实际上,缓冲并非在所有情况下都能带来卓越的性能。但需要传输的数据越多,有无缓冲带来的性能差异越大。从传输的数据量、数据向输出缓冲移动的次数两个角度说明性能的提供。

发送数据时使用的数据包中含有头信息。头信息与数据大小无关,是按照一定格式填入的


标准I/O函数和系统函数之间的性能对比

P247~P249利用fputs&fgets函数复制文件,基于缓冲的复制 比 基于read&write函数的文件复制程序快!

 

标准I/O函数的几个缺点:

不容易进行双向通信、有时可能频繁调用fflush函数、需要以FILE结构体指针的形式返回文件描述符。

 

 

使用标准I/O函数

创建套接字时返回文件描述符,而为了使用标准I/O函数,只能将其转换为FILE结构体。


利用fdopen函数转换为FILE结构体指针

利用fdopen函数将创建套接字时返回的文件描述符转换为标准I/O函数中使用的FILE结构体指针。


#include<stdio.h>  
FILE *fdopen(int fildes,const char * mode);

成功时返回转换的FILE结构体指针,失败时返回NULL。函数中的第二个参数与fopen函数的打开模式相同。


files:需要转换的文件描述符

mode:将要创建的FILE结构体指针的模式信息。 


利用fileno函数转换为文件描述符(与fdopen函数功能相反)

#include<stdio.h>  
int fileno(FILE * stream); 
成功时返回转换后的文件描述符,失败时返回 -1


《尹圣雨.TCP/IP网络编程》  P246~P251

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值