• 技术文章 >运维 >linux运维

    Linux中open和fopen的区别有哪些

    青灯夜游青灯夜游2022-04-29 19:00:28原创554

    区别:1、open是UNIX系统调用函数,而fopen是ANSIC标准中的C语言库函数;2、open的移植性没fopen好;3、fopen只能操纵普通正规文件,而open可以操作普通文件、网络套接字等;4、open无缓冲,fopen有缓冲。

    本教程操作环境:linux5.9.8系统、Dell G3电脑。

    linux系统:open与fopen的区别

    1、来源

    从来源的角度看,两者能很好的区分开,这也是两者最显而易见的区别:

    open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符(f'd),它是文件在文件描述符表里的索引;

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

    2、移植性

    这一点从上面的来源就可以推断出来,`fopen`是C标准函数,因此拥有良好的移植性;而`open`是UNIX系统调用,移植性有限。如windows下相似的功能使用API函数`CreateFile`。

    3、适用范围

    open返回文件描述符,而文件描述符是UNIX系统下的一个重要概念,UNIX下的一切设备都是以文件的形式操作。如网络套接字、硬件设备等。当然包括操作普通正规文件(Regular File)。

    fopen是用来操纵普通正规文件(Regular File)的。

    4、文件IO层次

    如果从文件IO的角度来看,前者属于低级IO函数,后者属于高级IO函数。低级和高级的简单区分标准是:谁离系统内核更近。低级文件IO运行在内核态,高级文件IO运行在用户态。

    5、缓冲

    一句话总结一下,就是open无缓冲,fopen有缓冲。前者与read, write等配合使用, 后者与fread,fwrite等配合使用。

    使用fopen函数,由于在用户态下就有了缓冲,因此进行文件读写操作的时候就减少了用户态和内核态的切换(切换到内核态调用还是需要调用系统调用API:readwrite);

    而使用open函数,在文件读写时则每次都需要进行内核态和用户态的切换;

    表现为,如果顺序访问文件,fopen系列的函数要比直接调用open系列的函数快;如果随机访问文件则相反。

    相关推荐:《Linux视频教程

    以上就是Linux中open和fopen的区别有哪些的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:linux
    上一篇:什么是linux交叉编译 下一篇:linux中m4是什么
    千万级数据并发解决方案

    相关文章推荐

    • linux下安装zip的命令有哪些• linux怎么关闭selinux• linux怎么查询mac地址• linux怎么安装mongodb• php在windows和linux中有什么区别吗• 手机远程linux工具有哪些
    1/1

    PHP中文网