linux 中 open和fopen的区别

open和fopen的区别:
主要区别是涉及到系统,而不是缓冲。带f的是标准IO,代码可以移植。

不带f只能在UNIX/LINUX系统调用。 open一个是整数,fopen一个是指针(FILE *)。 二者区别大致可以总结为以下几点:
1,fread是带缓冲的,read不带缓冲.
2,fopen是标准c里定义的,open是POSIX中定义的.
3,fread可以读一个结构.read在linux/unix中读二进制与普通文件没有区别.
4,fopen不能指定要创建文件的权限.open可以指定权限.
5,fopen返回指针,open返回文件描述符(整数).
6,linux/unix中任何设备都是文件,都可以用open,read.

1.非缓冲文件系统
缓冲文件系统是借助文件结构体指针来对文件进行管理,通过文件指针来对文件进行访问,

既可以读写字符、字符串、格式化数据,也可以读写二进制数据。非缓冲 文件系统依赖于操作系统,

通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,

只能读写二进制文件,但效率高、速度快,由于 ANSI标准不再包括非缓冲文件系统,因此建议大家最好不要选择它。
open, close, read, write, getc, getchar, putc, putchar 等
2.缓冲文件系统
缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,

当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”,

装满后再从 内存“缓冲区”依此读入接收的变量。执行写文件的操作时,

先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。

由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,

内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。

一般来说,文件“缓冲区”的大小随机器 而定。
fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等

前者属于低级IO,后者是高级IO。
前者返回一个文件描述符(用户程序区的),后者返回一个文件指针。
前者无缓冲,后者有缓冲。
前者与 read, write 等配合使用, 后者与 fread, fwrite等配合使用。
后者是在前者的基础上扩充而来的,在大多数情况下,用后者。
http://blog.chinaunix.net/u/21067/showart_213410.html
open 是Linux/Unix系统调用 返回的是文件句柄,文件的句柄是文件在文件描述副表里的索引,

fopen是C的库函数,返回的是一个指向文件结构的指针。

fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api
linux中的系统函数是open,fopen是其封装函数。
fopen最终还是要调用底层的系统调用open。

原文地址:https://www.cnblogs.com/med-dandelion/p/4532296.html