标准IO: 文件的打开与关闭函数 fopen & fclose
(1) 流(stream)和文件(file)
流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为"流
", 而将具体的实际设备叫做文件。流是一个逻辑设备, 具有相同的行为。因此, 用来进行磁盘文件写的函数也同样可以用
来进行打印机的写入。在Turbo C2.0中有两种性质的流: 文字流( text stream)和二进制(binary stream)。对磁盘来说
就是文本文件和二进制文件。本软件为了便于让读者易理解Turbo C2.0语言而没有对流和文件作特别区分。
(2) 文件指针FILE
实际上FILE是一个新的数据类型。它是Turbo C2.0的基本数据类型的集合, 称之为结构指针。有关结构的概念将在第>四节中详细介绍, 这里只要将FILE理解为一个包括了文件管理有关信息的数据结构, 即在打开文件时必须先定义一个文件>指针。
(3) 以后介绍的函数调用格式将直接写出形式参数的数据类型和函数返回值的数据类型。例如: 上面打开文件的函数, 返回一个文件指针, 其中形式参数有两个, 均为字符型变量(字符串数组或字符串指针)。本软件不再对函数的调用格式作
详细说明。
fopen();
功能: 打开文件
头文件: #include <stdio.h>
函数原型: FILE *fopen(const char *path, const char *mode);
参数说明: 第一个形式参数表示文件名, 可以包含路径和文件名两部分.如:
"B:TEST.DAT"
"C://TC//TEST.DAT"
如果将路径写成"C:/TC/TEST.DAT"是不正确的, 这一点要特别注意。
第二个形式参数表示打开文件的类型。关于文件类型的规定参见下表。
表 文件操作类型
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
字符 含义
───────────────────────────────────────────────────
"r" 以只读方式打开文件,该文件必须存在。
"r+" 以读/写方式打开文件,该文件必须存在。
"rb+" 以读/写方式打开一个二进制文件,只允许读/写数据。
"rt+" 以读/写方式打开一个文本文件,允许读和写。
"w" 打开只写文件,若文件存在则长度清为 0,即该文件内容消失,若不存在则创建该文件。
"w+" 打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
"a" 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾>,即文件原先的内容会被保留(EOF 符保留)。
"a+" 以附加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文
件尾后,即文件原先的内容会被保留(原来的 EOF 符不保留)。
"wb" 以只写方式打开或新建一个二进制文件,只允许写数据。
"wb+" 以读/写方式打开或建立一个二进制文件,允许读和写。
"wt+" 以读/写方式打开或建立一个文本文件,允许读写。
"at+" 以读/写方式打开一个文本文件,允许读或在文本末追加数据。
"ab+" 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。"
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
返回值: 文件顺利打开后,指向该流的文件指针就会被返回.如果文件打开失败则返回 NULL,并把错误代码存在 errno 中
打开方式总结:各种打开方式主要有三个方面的区别
1、打开是否为二进制文件,用“b”标识。
2、读写的方式,有以下几种:只读、只写、读写、追加只写、追加读写这几种方式。
3、对文件是否必 须存在、以及存在时是清空还是追加会有不同的响应。具体判断如下图。
╭ 是 ╭ 清空
文件是否必须存在 ┤ ╭ 存在 ┤
╰ 否 ┤ ╰ 追加
╰ 不存在 ─ 新建
fclose();
功能: 关闭fopen打开的文件
头文件: #include <stdio.h>
函数原型: int fclose(FILE *stream);
返回值: 如果流成功关闭,fclose 返回 0,否则返回EOF(-1).(如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF.)
注意
在文件操作时,需要注意以下几点问题:
1、在定义文件指针时,要将文件指针指向空;如 FILE *fp = NULL;
2、文件操作完成后,需要将文件关闭,一定要注意,否则会造成文件所占用内存泄露和在下次访问文件时出现问题。
3、文件关闭后,需要将文件指针指向空,这样做会防止出现游离指针,而对整个工程造成不必要的麻烦;如:fp = NULL;
perror();
功能: 用来将上一个函数发生错误的原因输出到标准设备(stderr)。
头文件: #include <stdio.h>
函数原型:void perror(const char *s);
例:
#include <stdio.h> #include <stdlib.h> int main() { FILE *fp = NULL; fp = fopen("tmp","r+"); if(fp == NULL) { perror("tmp"); exit(); } puts("OK!"); fclose(fp); fp = NULL; ; } 运行结果: [root@Yelong io]# gcc fopen.c [root@Yelong io]# ./a.out /home/tmp: No such file or directory
标准IO: 文件的打开与关闭函数 fopen & fclose的更多相关文章
- C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭
迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器 ...
- Linux C 文件与目录2 文件的打开与关闭
文件的打开与关闭 open和close 文件的打开指的是从磁盘中找到一个文件,返回一个整形的打开文件顺序的编号.打开的文件处于可读.可写状态.文件的关闭指的是释放打开的文件,是文件处于不可读写的状态. ...
- python文件的打开与关闭
#文件的打开 #open(文件名,访问模式) f=open('test.txt','w') #文件的关闭 f.close() 访问模式 说明 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是 ...
- python_文件的打开和关闭
文件对象 = open('文件名','使用方式')rt:读取一个txt文件wt: 只写打开一个txt文件,(如果没有该文件则新建该文件)会覆盖原有内容at:打开一个txt文件,并从文件指针位置追加写内 ...
- 标准 IO 测试 可以打开多少流
#include <stdio.h> #include <string.h> #include <errno.h> //trerror(errno) int mai ...
- 标准IO:常用函数集合
stdio : 标准IO (1) 流(stream)和文件(file) 流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为 ...
- UNIX高级环境编程(7)标准IO函数库 - 二进制文件IO,流定位,创建临时文件和内存流
1 二进制IO(Binary IO) 在前一篇我们了解了逐字符读写和逐行读写函数. 如果我们在读写二进制文件,希望以此读写整个文件内容,这两个函数虽然可以实现,但是明显会很麻烦且多次循环明显效率很低. ...
- 标准IO函数以及基本知识点总结
什么是标准IO呢?有哪些特点? 标准IO是标准c库提供的对文件操作的函数接口.他的特点是:1 带缓存,2 大部分都调用系统接口函数实现.(c库就是一种实现好的函数接口,作用是屏蔽下层细节.提供上层接口 ...
- [APUE]标准IO库(上)
一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...
随机推荐
- Neo4j 第五篇:批量更新数据
相比图形数据的查询,Neo4j更新图形数据的速度较慢,通常情况下,Neo4j更新数据的工作流程是:每次数据更新都会执行一次数据库连接,打开一个事务,在事务中更新数据.当数据量非常大时,这种做法非常耗时 ...
- centos nginx-1.10.3 安装
wget http://nginx.org/download/nginx-1.13.1.tar.gz nginx 依赖 pcre 库,要先安装pcre,因为nginx 要在rewrite 要解析正则表 ...
- 一天搞定CSS: 浮动(float)与inline-block的区别--11
浮动: 使元素脱离文档流,按照指定的方向发生移动,遇到父级的边界或者相邻的浮动元素就会停下来. inline-block: inline-block是指行内块元素,它具有行内元素和块元素两者的特点,可 ...
- 前端单元测试框架-Mocha
引言 随着前端工程化这一概念的产生,项目开发中前端的代码量可谓是'急剧上升',所以在这种情况下,我们如何才能保证代码的质量呢,对于框架,比如React.Vue,因为有自己的语法规则,及时每个开发人员的 ...
- cocoapod升级
1.0 重新安装问题 cd /user/xx/.cocoapod/repos rm -rf master pod setup /user/xx/.cocoapod/repos 查看目录文件夹大小: d ...
- (转)让浏览器支持Webp
转载:https://segmentfault.com/a/1190000005898538?utm_source=tuicool&utm_medium=referral Webp介绍 web ...
- javascript中event.clientX和event.clientY用法的注意事项
今天做项目用到了event.clientX和event.clientY,给元素定位,用定位的时候,让top和left等于事件元素的的坐标 <!DOCTYPE html> <html& ...
- webpack2教程--从入门到放弃
开车之前,先介绍一些npm的命令: :D 进入D盘 mkdir webapp 创建webapp文件夹 cd webapp 进入webapp文件夹 mkdir webapp && cd ...
- JavaScript练习笔记整理·3 - 6.25
欢迎和大家一起来讨论~ 基础练习(1): 我的解答为: function array_diff(a, b) { if (b == "") return a; return ...
- Service 中添加同步块防止并发 重复
Service 中添加同步块防止并发 重复. synchronized(this){}