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/