1.什么是IO?
I: input 输入
o: output 输出
I/O操作其实就是对文件的读写
2.I/O分类
(1)标准IO
POSIX 标准:规定 函数功能,返回值,函数的参数
POSIX 标准 统一了函数的接口
本质: 是对系统调用的再次封装
作用:
1. 增强了代码的可移植性,复用性
2. 提高了效率。
标准IO增加了一个【相当重要:缓冲机制】
标准IO printf scanf
(2)文件IO(系统调用)
1. 不带缓冲区
2. 操作系统直接提供的函数接口
3. 调用 系统调用 是很耗费资源的
系统调用 (文件IO)
read() Read() _read()
write() Write() _write()
linux 系统 window系统 mac系统
标准IO(标准库函数)
常见的函数接口:
fopen / fclose 打开文件 / 关闭文件
fgetc / fputc 读1个字符 / 写1个字符
fgets / fputs 读字符串 / 写字符串
fread / fwrite 读二进制文件 / 写二进制文件
fseek 移动文件指针
标准IO的使用 (带缓冲区)
1. fopen
$ man 3 fopen
#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
/****************************************************************
*功能:打开一个文件,返回FILE*类型的流指针
*参数:@path 指定文件路径 相对路径/绝对路径
* @mode 指定文件打开的模式
* r: 以读的方式打开一个文件,同时文件指针指向文件开头
* r+: 以读写的方式打开一个文件,同时文件指针指向文件开头
* w: 以写的方式打开一个文件,如果文件存在清空,如果不存在创建文件,
* 同时文件指针指向文件开头
* w+: 以读写的方式打开一个文件,如果文件存在清空,如果不存在创建文件,
* 同时文件指针指向文件开头
* a: 以写的方式打开一个文件,如果不存在创建文件,如果文件存在以追加方式写,
* 同时文件指针指向文件结尾
* a+: 以读写的方式打开一个文件,如果不存在创建文件,如果文件存在读文件指针在
* 文件开头,写文件指针在文件结尾(追加方式写)
*
*返回值: FILE *
* 成功返回 FILE *(FILE pointer) 流指针
* 失败返回 NULL, 并且更新设置错误码 errno
*****************************************************************/
eg: fopen.c
2. perror
#include <stdio.h>
void perror(const char *s);
#include <errno.h>
int errno;
/****************************************************************
*功能:根据 errno 打印出错误信息
*参数:@s 提示用的字符串 可以写任意字符串
*返回值: void
*****************************************************************/
eg: perror.c
$ sudo chown root:root a.txt // 改变文件所属用户
13
Permission denied: 权限不够
2
No such file or directory: 文件不存在,很可能是路径不错导致错误
3. fclose
#include <stdio.h>
int fclose(FILE *fp);
/**********************************
*功能:关闭一个流指针
*参数:@fp 文件流指针
*返回值: 成功 0
* 失败 EOF -1 更新 errno
***********************************/
4. fgetc
#include <stdio.h>
int fgetc(FILE *stream);
/**********************************
*功能:从指定流中获取一个字符
*参数:@stream 文件流指针
*返回值: 成功返回字符对应的 ASCII码值
* 失败 EOF -1 更新 errno
***********************************/
eg: fgetc.c
5. fputc
#include <stdio.h>
int fputc(int c, FILE *stream);
/**************************************
*功能:输出一个字符到指定文件流中
*参数:@c: 要输出的字符的 ASCII码值
* @stream: 输出到指定文件流
*返回值: 成功 返回写入的 ASCII码值
* 失败 返回 EOF -1 更新 errno
****************************************/
eg: fputc.c
流(stream) 和 流指针(FILE *)
流:
所有的IO操作都是简单的将数据从硬盘读到内存,从内存写到硬盘。这种
数据的移动,就叫做字节流,也就流
流指针 (FILE *) (stream pointer)
在标准IO中,每次成功打开一个文件(fopen),都会返回一个流指针(FILE *).
,这个流指针就描述了一个文件。