fopen与Open区别

open和fopen的区别

open 是系统调用 返回的是文件句柄,文件的句柄是文件在文件描述副表里的索引,fopen是C的库函数,返回的是一个指向文件结构的指针。

文件描述符是linux下的一个概念,linux下的一切设备都是以文件的形式操作.如网络套接字、硬件设备等。当然包括操作文件。fopen是标准c函数。返回文件流而不是linux下文件句柄。

设备文件不可以当成流式文件来用,只能用openfopen是用来操纵正规文件的,并且设有缓冲的,跟open还是有一些区别

一般用fopen打开普通文件,用open打开设备文件

fopen是标准c里的,而open是linux的系统调用.他们的层次不同.fopen可移植,open不能


我认为fopen和open最主要的区别是fopen在用户态下就有了缓存,在进行read和write的时候减少了用户态和内核态的切换,而open则每次都需要进行内核态和用户态的切换;表现为,如果顺序访问文件,fopen系列的函数要比直接调用open系列快;如果随机访问文件open要比fopen快。

文件流指针可以通过fileno函数转换成文件句柄。

对文件操作可以直接使用fopen,在用fgetc或者fgets,fread来操作文件,个人更喜欢把文件通过mmap映射到内存上(驱动的方法),在使用内存相关的函数,这样方便一点。


摘自论坛的经典回答:
前者属于低级IO,后者是高级IO。
前者返回一个文件描述符(用户程序区的),后者返回一个文件指针。
前者无缓冲,后者有缓冲。
前者与 read, write 等配合使用, 后者与 fread, fwrite等配合使用。
后者是在前者的基础上扩充而来的,在大多数情况下,用后者。


exit 和return 的区别

exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。

return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。

C库函数大全网站:http://www.cplusplus.com/reference/cstdio/scanf/
————————————————
版权声明:本文为CSDN博主「fzjcycp」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014379540/article/details/52388804

发布了4 篇原创文章 · 获赞 167 · 访问量 60万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章