我只是想知道函数fopen,fclose,socket和closesocket。 当调用fopen或打开一个套接字时,究竟发生了什么(特别是内存明智的)?
打开文件/套接字而不closures它们会导致内存泄漏?
第三,套接字是如何创build的,它们看起来像记忆方面的东西?
我也对操作系统(Windows)在读取套接字和发送数据方面的作用感兴趣。
免责声明:我基本上没有资格谈论这个。 如果有人更有见识,也会很棒。
例如fopen()这样的细节在很大程度上取决于操作系统(例如UNIX也有fopen())。 甚至Windows的版本也可能相差很多。
我会告诉你它是如何工作的,但基本上是猜测。
fillLevel = 0
,其中fillLevel是尚未刷新的缓冲数据量。 如果你打开一个文件而不关闭它,有些东西会泄漏,是的。 FILE结构将泄漏,FS驱动程序的内部数据将泄漏,缓存(如果有的话)也会泄漏。
但是记忆不是唯一会泄漏的东西。 文件本身会泄漏,因为操作系统会认为它不是打开的。 例如,在Windows中,以写模式打开的文件在关闭之前不能再次以写模式打开,这可能会成为问题。
如果您的应用程序没有关闭某个文件而退出,则大多数操作系统将在清理完成后清理。 但这并没有什么用处,因为你的应用程序在退出之前可能会运行很长时间,在这段时间内,它仍然需要正确关闭所有文件。 另外,你不能完全依靠操作系统进行清理,这在C标准中是不能保证的。
一个套接字的实现将取决于套接字的类型 – 网络监听套接字,网络客户端套接字,进程间套接字等。
所有类型的套接字及其可能的实现的完整讨论将不适合在这里。
简而言之:
所有这些东西会泄漏,如果你不关闭插座。
操作系统实现了TCP / IP标准,以太网和其他协议,以调度/分派/接受连接,并通过API(如伯克利套接字)将其提供给用户代码。
操作系统会将网络I / O(与网卡通信)委托给网络驱动程序。