fopen(),fclose()究竟是如何工作的?

前端之家收集整理的这篇文章主要介绍了fopen(),fclose()究竟是如何工作的?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我只是想知道fopen,fclose,socket和closesocket的功能.当调用fopen或打开套接字时,究竟发生了什么(尤其是内存明显)?

可以打开文件/套接字而不关闭它们会导致内存泄漏?

第三,如何创建套接字,他们看起来像记忆聪明?

我还在操作系统(Windows)的角色中读取套接字并发送数据.

解决方法

免责声明:我几乎不合资格谈论这个.如果有更多知识的人发贴也是如此.

fopen()如何实现的细节在很大程度上取决于操作系统(例如UNIX也有fopen()).甚至Windows版本可能会有很大的不同.

我会给你我的想法,它的运作方式,但它基本上是猜测.

>调用时,fopen会在堆上分配一个FILE对象.请注意,FILE对象中的数据是无文档的 – FILE是一个opaque struct,您只能从代码中使用指针到FILE.
> FILE对象被初始化.例如,像fillLevel = 0的那样,fillLevel是尚未刷新的缓冲数据量.
>对文件系统驱动程序(FS驱动程序)的调用打开文件并提供一个句柄,将其放在FILE结构中的某处.

>为了做到这一点,FS驱动程序计算出与所请求的路径相对应的硬盘地址,内部记住这个硬盘地址,以便以后可以实现对fread等的调用.

> FS驱动程序使用一种索引表(存储在HDD中)来计算与所请求路径对应的HDD地址.根据文件系统类型 – FAT32,NTFS等,这将有很大的不同.
> FS驱动程序依靠HDD驱动程序来执行HDD的实际读写操作.

>文件可能会在RAM中分配缓存.这样,如果用户请求读取1个字节,则C可以读取KB,以防止后续读取将是即时的.
>从fopen返回指向分配的FILE的指针.

如果你打开一个文件,不要关闭它,有些东西会泄漏,是的. FILE结构将泄漏,FS驱动程序的内部数据将泄漏,缓存(如果有的话)也会泄漏.

但记忆不是唯一会泄漏的事情.该文件本身将泄漏,因为操作系统会认为它是不开放的.这可能会成为一个问题,例如在Windows中,在写入模式下打开的文件无法在写模式下再次打开,直到它被关闭.

如果您的应用程序退出而不关闭一些文件,大多数操作系统将在之后清理.但这并没有太多的用处,因为你的应用程序可能会在退出之前运行很长时间,在这段时间内,它仍然需要正确关闭所有的文件.此外,您不能完全依靠操作系统来清理您 – C标准中不能保证.

套接

套接字的实现将取决于套接字的类型 – 网络监听套接字,网络客户端套接字,进程间插座等.

所有类型的套接字及其可能的实现的完整讨论将不适用于此.

简而言之:

>就像文件一样,套接字在RAM中保存一些信息,描述与其操作相关的事情,例如远程主机的IP.
由于性能原因,它也可以在RAM中存储高速缓存
>它可以容纳有限的操作系统资源,如开放端口,使其无法使用其他应用程序

如果不关闭插座,所有这些都会泄漏.

操作系统在套接字中的作用

OS实施TCP / IP标准,以太网和其他协议,用于安排/调度/接受连接,并通过像Berkeley Sockets这样的API使其可用于用户代码.

操作系统将把网络I / O(与网卡的通信)委托给网络驱动程序.

原文链接:https://www.f2er.com/c/111787.html

猜你在找的C&C++相关文章