linux中open函数和fopen,低级IO与高级IO,文件操作open和fopen的区别

二者都是文件操作,最基本的区别是:

open属于低级IO,返回一个文件描述符,没有缓冲,与read、write等配合使用;

fopen属于高级IO,返回一个文件指针,有缓冲,与fread、fwrite等配合使用。

FlameTowers_ZH-CN10904980589_1366x768.jpg?resize=620%2C349

open是UNIX系统调用,返回值是文件句柄,即文件在文件描述表中的索引。

fopen是ANSI标准中的C语言库函数,返回值是一个指向文件的指针。

低级IO运行在内核态,离内核近:高级IO运行在用户态,离内核远。open为低级IO,fopen为高级IO。这一特性决定了,open由于靠近内核,所以可移植性有限:fopen由于远离内核,是C语言标准函数,可移植性比open强。

涉及到缓冲文件系统,缓冲文件系统的原理是,在内存中开辟一个缓冲区,当执行写操作时,先将数据写入缓存区,待缓冲区满后再将数据写入文件:当执行读操作时,先将数据读入缓冲区,待缓冲区满后再将数据读入内存。缓冲区的大小由机器决定。fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等读写操作均用到缓冲区。

open, close, read, write, getc, getchar, putc, putchar等低级IO函数直接通过操作系统的调用来操作文件,没有使用缓冲区。它们不设置文件指针,只能二进制读写文件,因此效率很高,速度很快。但是由于ANSI标准已经不包括非缓冲文件系统,因此不推荐使用这些函数。

内核态中的设备驱动文件,是不能当作流文件打开的,因此只能使用open。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值