用于fopen等C语言运行时库函数的FILE结构体和用于open等系统调用的fd数字有何不同?fopen最终是怎样调用open的?
时间: 2024-06-05 17:10:57 浏览: 130
C语言常用的库函数总结
FILE结构体和fd数字的主要区别在于它们所属的环境不同。FILE结构体是由C语言运行时库函数维护的,而fd数字是由操作系统维护的。FILE结构体是一个抽象的数据结构,它封装了底层的文件描述符,提供了一系列用于文件读写的高层次函数接口,比如fgets、fputs、fread、fwrite等。fd数字则是一个具体的整数,用于标识底层的文件描述符。
在C语言中,fopen最终会调用open系统调用。当调用fopen时,C运行时库会先调用一系列涉及文件打开模式和权限等参数的函数接口(如fopen_s),以生成一个附带了这些参数的FILE结构体。然后,它会调用open函数,获取一个底层的文件描述符,并将之存储到FILE结构体的成员中。最后,fopen将FILE结构体的指针作为返回值返回给用户。
阅读全文