POSIX兼容系统中C语言fopen与open对比及底层调用查询
问题解答
在POSIX兼容的操作系统中,C标准库函数fopen()底层实际调用的系统调用是open(),部分支持更安全的路径解析接口的新版本系统中,也可能根据传入的路径参数选择调用openat(),但常规场景下默认调用的都是open()。
相关补充说明:
fopen()是用户态C标准库封装的高级I/O接口,返回的FILE*指针内部已经封装了open()返回的内核文件描述符,同时还维护了用户空间缓冲区、读写偏移、错误状态等额外信息。- 你提到的
fopen()配合后续fread()/fwrite()顺序读写比直接调用open()加read()/write()更快,本质是因为标准库的用户缓冲区减少了用户态和内核态的切换次数,不是fopen()本身打开文件的速度比open()快。 - 后续通过
FILE*执行的读写操作默认不会每次都触发系统调用,只有缓冲区满、主动调用fflush()或者关闭文件的时候,才会批量调用read()/write()系统调用和内核交互。
内容的提问来源于stack exchange,提问作者Daniel Bandeira
相关产品推荐
相关产品推荐

