标准 IO
ANSI C 设计的一组用文件IO 封装的操作库函数
(1)IO: input output
I: 键盘是标准输入设备 ====》默认输入就是指键盘 /dev/input
O: 显示器是标准输出设备 ==》默认输出就是指显示器
(2)文件
Linux中一切都是文件,文件用来存储数据(数据,指令)
分类:
- :普通文件
D:目录文件
c :字符设备
B:块设备
L:软连接(或符号链接)
P:管道文件-----系统用内存虚拟出的文件
S:套接字文件
(3)stdio.h
<stdio.h>在路径 /usr/include/stdio.h下
usr :user resource
so:动态库(或共享库):命名规则:lib 开头,so 结尾 ----/usr/lib
(4)man 手册的使用:
man man :所有man的帮助
System calls :系统调用
Library calls:一般都是跨平台的
查函数:man 数字(2或3) 函数名
(5)stream(流)
①文件流(File Streams):在 C 语言的标准 I/O 库(stdio.h)中,使用 FILE 指针来操作文件流。例如,通过 fopen 函数打开一个文件会返回一个 FILE 指针,然后可以使用 fread、fwrite、fgets、fputs 等函数对流进行读写操作。
②网络流(Network Streams):在网络编程中,通过套接字(Socket)进行数据传输时,可以将套接字视为一种流。数据可以像在文件流中一样进行发送和接收。
③标准输入输出流(Standard Input/Output Streams):stdin(标准输入)、stdout(标准输出)和 stderr(标准错误输出)是在程序执行时默认可用的流。
④字节流和字符流:在处理数据时,可能会涉及字节流(处理原始的字节数据)和字符流(处理字符数据,并根据特定的编码进行转换)。
文件读写
1.步骤
①打开文件;②io操作,读写操作;③关闭文件
2.文件打开
FILE *fopen(const char *path, const char *mode);
读指针和写指针是同时进行的
(1)功能:打开一个文件并建立一个流
(2)参数:①path:要打开文件的路径;
②mode:
r : 只读,文件不存在报错,文件存在则只读打开
r+:读写,文件不存在报错,文件存在则读写打开
w :只写,文件不存在则创建,文件存在则清0只写打开
w+:写读,文件不存在则创建,文件存在则清0写读打开
a :追加可写,文件不存在则创建,文件存在则追加只写,定位到文件最后增加内容
a+:追加读写,文件不存在则创建,文件存在则追加读写打开
返回值: 成功返回建立的文件流指针;失败返回NULL
3.读写操作相关:
(1)fgetc
int fgetc(FILE *stream);
①功能:从流中读取一个字符
②参数:stream:文件流指针
③返回值:成功返回读到字符的ASCII码值,读到文件末尾返回EOF;失败返回EOF -1
(2)fgets
char *fgets(char *s, int size, FILE *stream);
①功能:从stream流对象关联的文件中获取size大小字节的文本数据
并存储到s对应的本地内存(栈区数组,堆区内存)
②参数: s---要存储数据的本地内存; size---要获取的数据长度,单位字节;stream---要获取的目标文件流对象,可以是stdin ,程序会阻塞等待,如果是普通文件fp 则指向文件第一行数据。
③返回值:成功返回指向有效数据的首地址,一般等于s的地址;失败 或者 文件末尾 NULL
(3)fread
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
①功能:从指定的stream对象中获取nmemb个大小为size字节的数据块到ptr所在的本地内存中。
②参数:ptr---要存储数据的本地内存一般是数组或者结构体指针;size---单个数据块的元数据大小,最小单元的大小;nmemb---要获取的数据块的个数,拷贝的数据块个数;stream---要获取数据的源文件流对象,如果是stdin,表示从键盘获取数据,如果是fp文件,则表示从普通文件获取。
③返回值:成功 小于等于nemeb的整数,表示获取的数据长度;失败 小于0,结尾 0。
(4)fwrite
size_t fwrite(const void *ptr, size_t size,size_t nmemb, FILE *stream);
①功能:从ptr所在本地内存中取出nmemb个大小为size的数据块写入到stream流对应的文件流对象中。
②参数:ptr--- 要写的数据块地址,一般是数组或者结构体指针;size --- 要写的数据块元数据大小,单位是字节;nmemb--- 要写的数据块的个数;stream ---要写的目标文件流对象。如果是stdout则表示数据会写到终端屏幕显示,如果是fp的普通文件则会写入到文件中。
③返回值:成功 小于等于nmemb 的个数;失败 <0