网站开发中职责,电子商务冷门吗,郸城建设银行网站,百度淘宝网1. 来源
从来源的角度看#xff0c;两者能很好的区分开#xff0c;这也是两者最显而易见的区别#xff1a;
open是UNIX系统调用函数#xff08;包括LINUX等#xff09;#xff0c;返回的是文件描述符#xff08;File Descriptor#xff09;#xff0c;它是文件在文件…1. 来源
从来源的角度看两者能很好的区分开这也是两者最显而易见的区别
open是UNIX系统调用函数包括LINUX等返回的是文件描述符File Descriptor它是文件在文件描述符表里的索引。fopen是ANSIC标准中的C语言库函数在不同的系统中应该调用不同的内核api。返回的是一个指向文件结构的指针。 从来源来看两者是有千丝万缕的联系的毕竟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. 缓冲
缓冲文件系统 缓冲文件系统的特点是在内存开辟一个“缓冲区”为程序中的每一个文件使用当执行读文件的操作时从磁盘文件将数据先读入内存“缓冲区”装满后再从内存“缓冲区”依此读出需要的数据。执行写文件的操作时先将数据写入内存“缓冲区”待内存“缓冲区”装满后再写入文件。由此可以看出内存“缓冲区”的大小影响着实际操作外存的次数内存“缓冲区”越大则操作外存的次数就少执行速度就快、效率高。一般来说文件“缓冲区”的大小随机器 而定。fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等。非缓冲文件系统 缓冲文件系统是借助文件结构体指针来对文件进行管理通过文件指针来对文件进行访问既可以读写字符、字符串、格式化数据也可以读写二进制数据。非缓冲文件系统依赖于操作系统通过操作系统的功能对文件进行读写是系统级的输入输出它不设文件结构体指针只能读写二进制文件但效率高、速度快由于ANSI标准不再包括非缓冲文件系统因此建议大家最好不要选择它。open, close, read, write, getc, getchar, putc, putchar等。
一句话总结一下就是open无缓冲fopen有缓冲。前者与read, write等配合使用 后者与fread,fwrite等配合使用。
使用fopen函数由于在用户态下就有了缓冲因此进行文件读写操作的时候就减少了用户态和内核态的切换切换到内核态调用还是需要调用系统调用API:readwrite而使用open函数在文件读写时则每次都需要进行内核态和用户态的切换表现为如果顺序访问文件fopen系列的函数要比直接调用open系列的函数快如果随机访问文件则相反。
这样一总结梳理相信大家对于两个函数及系列函数有了一个更全面清晰的认识也应该知道在什么场合下使用什么样的函数更合适效率更高。