系统调用和库函数

来源:互联网 发布:linux exit 0 头文件 编辑:程序博客网 时间:2024/06/03 07:25

一直对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)实现。系统调用是用户程序和内核交互的接口,而普通的库函数调用由函数库或用户自己提供,运行于用户态。

原创粉丝点击