博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux 中 open和fopen的区别
阅读量:4167 次
发布时间:2019-05-26

本文共 1202 字,大约阅读时间需要 4 分钟。

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等配合使用。 
后者是在前者的基础上扩充而来的,在大多数情况下,用后者。 
 
open 是Linux/Unix系统调用 返回的是文件句柄,文件的句柄是文件在文件描述副表里的索引,

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

fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api 

linux中的系统函数是open,fopen是其封装函数。 
fopen最终还是要调用底层的系统调用open。

转载地址:http://lzexi.baihongyu.com/

你可能感兴趣的文章
初始化时共享内存的key值和信号量初始化的key值可以一样
查看>>
linux创建线程之pthread_create
查看>>
pthread_attr_init线程通俗举例讲解与线程属性
查看>>
进程和线程的区别
查看>>
int main(int argc,char* argv[])详解,以及与int main()有什么区别
查看>>
SourceInsight全工程查找替换方法
查看>>
C语言chdir()函数:改变当前的工作目录
查看>>
Linux下的函数执行时间的统计方法(测试某个函数的执行时间)
查看>>
调整内核printk的打印级别(启动脚本中运行 echo 0 4 0 7 > /proc/sys/kernel/printk 关闭所有内核打印)
查看>>
临时关闭打开console办法
查看>>
Linux中gmtime和localtime的区别(time_t格式转换为tm格式)
查看>>
如果函数传递的是结构体,小心在调用的参数中给指针重新赋值(拿tm结构体举例)
查看>>
使用nm命令获取linux的可执行文件里或动态库中的所有函数名称
查看>>
动态库编写 头文件.h注意事项
查看>>
多个动态库的依赖问题(先后顺序务必注意)
查看>>
二叉树的最大深度
查看>>
N 叉树的最大深度
查看>>
剑指 Offer 52. 两个链表的第一个公共节点 & 相交链表
查看>>
剑指offer 03.数组中的重复数字(四种办法!哎,就是全!)
查看>>
三层--对你的认识再多一点
查看>>