linux——open与fopen的区别

fopen,fread,fwrite,fseek,fclose

fgetc,fputc,feof

open与fopen的区别

1、来源

open是UNIX系统调用函数(包括linux),返回的是文件描述符,它是文件在文件描述符表里的索引。

fopen是ANSIC标准中c语言库函数,在不同的系统中应该调用不同的内核api,返回的是一个指向文件结构的指针。

2、移植性

fopen是c标准函数,具有良好的移植性。

open是UNIX系统调用,移植性有限。

3、试用范围

open:特定情况下必须要用open,比如进程中的管道,比如硬件驱动,是基于linux内核写的代码,有一定移植限制

fopen:一般用来操纵普通正规文件的。

4、open配合read和write使用,

fopen配合fread和fwrite使用,

不能互相使用

5、文件io层次

open属于低级io,fopen属于高级io

open、read、write发送文件给内核,让内核访问文件。

fopen在用户空间就可以完成,在缓冲区操作,对内核依赖程度较低

6、缓冲

   fopen有缓冲区,open无缓冲区

    使用fopen函数,有缓存,对文件读写的时候就减少了用户态和内核态的切换(切换到内核态调用还是需要调用系统调用API:read、write);而使用open函数,再文件读写时则每次都要进行内核态和用户态的切换;表现为,如果顺序访问文件,fopen比直接调用open系列函数快,随机访问open比较快。

你可能感兴趣的:(linux_文件编程,linux)