IO(文件)
文件: 一组相关数据的有序集合
文件名: 这组相关数据的一个名称
linux里面对文件的处理:
思想: 一切皆文件 ,文件用来存储数据(数据、指令)
linux文件类型(7中)
b -- block -- 块设备文件 --- 硬盘(存储设备)
c -- character -- 字符设备文件 --- 鼠标
d -- directory -- 目录文件
- -- regular -- 普通文件
l -- link -- 软连接文件 --- 类似windows的快捷方式
p -- pipe -- 管道文件 --- 实现操作系统中 进程间的一些 信息交换(通信)
s -- socket -- 套接字文件 --- 网络的时候 (进程间的通信)
文件操作
文件操作三步骤:
1.打开
2.读写
3.关闭
Linux提供的两种文件操作方式:
文件编程:
1.标准IO --- 库函数 -------标准c库函数,
2.文件IO --- 系统调用-------Linux内核为用户提供的函数接口
系统调用:Linux内核为用户提供的函数接口
库函数:标准c库函数, 对Linux内核中系统调用的封装
标准IO库:
1.标准io的概念
1975 Dennis Ritchie编写, IO库,
从C语言的标准,ANSI c
IO input output
I: 键盘是标准输入设备 ====》默认输入就是指键盘 /dev/input
O: 显示器是标准输出设备 ==》默认输出就是指显示器
Linux操作系统当中IO都是对文件的操作
C一部分,任何支持标准C的系统都可使用标准IO实现文件存储
标准IO在UNIX上是对文件IO的封装
一般都是对普通文件操作是一种有缓存的IO 在文件IO和用户程序之间,
加入缓冲区,可以有效减少系统调用的次数,节省系统IO调度资源
操作方法
1.打开 -- fopen //FILE open
2.读写 --
fgetc / fputc 读出、写入单个字符
fgets / fputs 读出、写入一行字符
fread / fwrite 读出、写入指定长度数据
3.关闭 -- fclose
满手册的定义
man手册
标准man手册分为8个章节:
man 1 用户命令
man 2 系统调用
man 3 c函数库调用
man 4 设备文件和特殊文件
man 5 配置文件和格式
man 6 游戏相关
man 7 杂项,总述
man 8 管理类命令
函数接口
补充说明
流:
数据从文件当中流入和流出所体现出来的字节流叫做流
FILE 结构定义的对象(FILE * 指向的对象)称之为流对象,FILE *叫文件流指针
标准IO将对文件的操作转换成了对"流"的操作。
所以,标准IO的文件相关的函数都是围绕着 FILE进行的
FILE * fp
FILE * fp;//流指针------关联一个文件
FILE * 实际上是指向了一块内存空间(缓存,fileno)
FILE *fp <->【FILE结构体[缓存,fileno]】//堆区(malloc)
1.fopen
#include <stdio.h>
FILE* fopen(const char *path, const char *mode);
功能:
流打开函数 (打开文件,并关联到一个流)
参数:
@path --要打开的文件的文件名(字符串形式)
@mode --打开文件的操作模式
r ---打开文件做读操作
注意:
文件必须存在
r+ 打开文件做读写操作
注意:
文件必须存在
w 打开文件做写操作
注意:
如果文件已经存在,则会将文件清空为0
如果文件不存在,则会创建一个新文件。
w+ 打开文件做读写操作
注意:
如果文件已经存在,则会将文件清空为0
如果文件不存在,则会创建一个新文件。a 打开文件做写操作
注意:
如果文件已经存在,则在文件末尾进行写入
如果文件不存在,则会创建一个新文件。
a+ 打开文件做读写操作
注意:
如果文件已经存在,则在文件末尾进行写入
如果文件不存在,则会创建一个新文件。
返回值:
成功 FILE * (文件流指针)
失败 NULL 并且 设置 errno 表明错误原因
2.fclose
int fclose(FILE *fp);
功能: 关闭文件流指针
参数:
fp:文件流指针
返回值:
成功返回0
失败返回EOF(-1)
注意:fopen操作完毕后使用fclose关闭,否则会产生内存泄漏
不要重复调用fclose
3.fputc
int fputc(int c, FILE *stream);
功能:向流中写入一个字符
参数:
c:要写入的字符
stream:文件流指针
返回值:
成功返回 写入的字符ASCII码值
失败返回 EOF
4.fgetc
int fgetc(FILE *stream);
功能:
从流中读取一个字符
参数:
stream:文件流指针
返回值:
成功返回读到字符的ASCII码值
读到文件末尾 返回 EOF
失败返回EOF EOF
操作系统在运行一个程序时,会默认打开三个流:
stdin FILE* 标准输入流 ---->键盘
stdout FILE* 标准输出流 ---->屏幕
stderr FILE* 标准出错流 ---->屏幕
gets scanf getchar -> stdin
puts printf putchar -> stdout
perror -> stderr