博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fopen函数mode模式说明以及与open函数区别
阅读量:7227 次
发布时间:2019-06-29

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

函数头文件:

#include <stdio.h>
函数原型:
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fd, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);
mode具体的有
"r"(只读模式打开),
“r+"(读写模式打开),
"w"(只写模式打开,如果不存在会新建,如果有会内容清零),
"w+"(读写模式打开,如果不存在会新建,如果有会内容清零),
"a"(追加模式只写),
"a+"(追加模式读写),
"b"(二进制文件打开,在Linux加不加此模式无区别。
        window下有区别,回车换行符“0x0A”和“0x0D 0x0A”,例如如果原始文件为二进制(0x0A),拷贝到不以二进制打开的文件时,0x0A会被转成Ox0D 0x0A,导致文件变大)
fopen 是标准的C 函数,用来操作普通的磁盘文件,设有缓冲,返回的是指向文件结构的指针。
open是Linux下的系统调用,比fopen处于更低级的位置,没有设缓冲,返回的是文件句柄,即在文件描述副表的索引,除了操作普通磁盘文件,还可以操作字符设备,网络套接字等设备文件
open是低级IO,fopen是高级IO。
open返回文件句柄,fopen返回文件指针。
open无缓冲,fopen有缓冲。
open对应read和write, fopen对应fread和fwrite.
open需要切换内核态和用户态,fopen不需要。
引用介绍缓冲文件系统和非缓冲文件系统:
缓冲文件系统
缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。一般来说,文件“缓冲区”的大小随机器 而定。
fopen, fclose, fread, fwrite, fgetc, fgets, fputc, fputs, freopen, fseek, ftell, rewind等
非缓冲文件系统
缓冲文件系统是借助文件结构体指针来对文件进行管理,通过文件指针来对文件进行访问,既可以读写字符、字符串、格式化数据,也可以读写二进制数 据。非缓冲文件系统依赖于操作系统,通过操作系统的功能对文件进行读写,是系统级的输入输出,它不设文件结构体指针,只能读写二进制文件,但效率高、速度 快,由于ANSI标准不再包括非缓冲文件系统,因此建议大家最好不要选择它。open, close, read, write, getc, getchar, putc, putchar 等。

转载于:https://www.cnblogs.com/wudymand/p/9226408.html

你可能感兴趣的文章
mongodb--安装和初步使用教程
查看>>
ES6简单总结(搭配简单的讲解和小案例)
查看>>
text-decoration与color属性
查看>>
如何使用Mybatis第三方插件--PageHelper实现分页操作
查看>>
PyCharm搭建GO开发环境(GO语言学习第1课)
查看>>
Android交互
查看>>
提醒我喝水chrome插件开发指南
查看>>
列表数据转树形数据
查看>>
Java新版本的开发已正式进入轨道,版本号18.3
查看>>
从零开始的webpack生活-0x009:FilesLoader装载文件
查看>>
在electron中实现跨域请求,无需更改服务器端设置
查看>>
gitlab-ci配置详解(一)
查看>>
听说你叫Java(二)–Servlet请求
查看>>
案例分享〡三拾众筹持续交付开发流程支撑创新业务
查看>>
FreeWheel业务系统微服务化过程经验分享
查看>>
移动互联网下半场,iOS开发者如何“高薪”成长?
查看>>
Atlassian是怎样进行持续交付的?且听 Steve Smith一一道来
查看>>
Web Storage相关
查看>>
[PHP内核探索]PHP中的哈希表
查看>>
Apache-drill Architechture
查看>>