系统调用和库函数

本文详细解析了fopen和open两种文件操作函数的区别,包括缓存操作、返回值类型、缓冲特性以及与内核态和用户态的交互方式。深入探讨了两者在实际应用中的优劣对比。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值