TCP/IP网络编程第15章多种I/O函数复习总结

先了解以下标准IO和系统IO或者叫文件IO的大致区别,具体细节化的区别下面慢慢展开。

标准IO是ANSI C建立的一个标准IO模型,是一个标准数据函数包和stdio.h头文件种的定义,所以很明显标准IO的有很高的可移植性。并且采用了缓冲机制。
而文件IO属于低级IO,是操作系统提供的基本IO服务,与OS绑定,特定于linux或unix平台,因此并没有很高的可移植性。不带缓存。

以上是大致区别。

下面仔细说说标准IO
先用一个很明显的图,清楚明了的介绍以下标准IO的缓冲区和套接字缓冲区的关系。
在这里插入图片描述

套接字的缓冲作用是为了实现TCP协议而设定的,即TCP传输种丢失数据时将再次传递,而能做到再次传递就是因为在套接字的输出缓冲中保存了数据。
而标准IO的缓冲主要目的就是为了提高性能。

这种性能的提高,是在需要传输的数据越多的时候带来的提高越大。
关于性能是否提高还有如何提高了,可以从以下两个角度自行考察。

传输的数据量
数据向输出缓冲移动的次数

对于传输的数据量:每次发送数据时使用的数据包中都含有头信息,头信息与数据大小无关,即无论数据如何如何,头信息的大小就那么些不会变化,所以很明显,传输的数据越多,如果没有缓冲的话,每次都会多加上头信息的大小,但是如果有缓冲,本来需要这么些数据需要十次传输,需要多十个头信息,而现在只需要一个头信息,缓冲满了再发送即可,很明显节省了九个头信息的大小。

对于另一个角度也是用上面的想法考察即可。

优点结束,那就是谈谈缺点了,因为对于一个东西你仅仅会用是没什么大用的,你得知道它的优点和缺点,因为我们要做到的是灵活的去使用它。

有如下缺点:

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

第一个缺点是因为每次切换读写状态时都应调用fflush函数。这也会影响因为缓冲带来的性能的提高。

第二个缺点是fflush,而关于fflush函数,是用来冲洗流中的信息的。上面说了缓冲满了再发送,万一它没满的时候也想发送该怎么办呢。就是用fflush来推以下消息。

第三个缺点是因为,回想一下,正常情况下我们都要用到文件描述符来对套接字进行操作,而不是FILE结构体指针。

所以就有文件描述符和结构体指针互换的操作了。
在这里插入图片描述

发布了75 篇原创文章 · 获赞 26 · 访问量 7674

猜你喜欢

转载自blog.csdn.net/qq_40962234/article/details/104250956