一直对fopen和open函数区别还是没弄明白。
fopen:带缓存的操作。是ANSI C标准库中定义的,就是GNU C库中定义的。
open:不带缓存的操作。是在POSIX(可移植操作系统接口)中定义的,是内核提供的接口,属于系统调用。
我认为fopen和open最主要的区别是fopen在用户态下就有了缓存,在进行read和write的时候减少了用户态和内核态的切换,而open则每次都需要进行内核态和用户态的切换;
来自论坛的经典回答:
open属于低级IO,fopen是高级IO。
open返回一个文件描述符(用户程序区的),fopen返回一个文件指针。
opem无缓冲,fopen有缓冲。
open与 read, write 等配合使用, fopen与 fread, fwrite等配合使用。
fopen是在open的基础上扩充而来的,在大多数情况下,用fopen。
所谓系统调用,就是内核提供的、功能十分强大的一系列的函数。这些系统调用由操作系统内核提供,运行于内核核心态,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现。系统调用是用户程序和内核交互的接口,而普通的库函数调用由函数库或用户自己提供,运行于用户态。