Linux软件编程——标准IO(2025.2.14)
目录
一、操作系统
1.重点内容
2.学习方法
二、文件操作
1. 必要性
2. Linux文件类型
3. Linux文件操作方法
4.文件操作思想
5.标准IO
6.函数接口
(1)fopen打开文件
(2)fputc字符写入文件
(3)fclose关闭文件
(4)fgetc字符读取
(5)fputs字符串写入文件
(6)fgets字符串读取
一、操作系统
1.重点内容
(1)文件操作:一切皆文件
(2)多任务:线程、进程
(3)网络编程
(4)服务器+数据库
2.学习方法
(1)大量的函数接口
(2)框架性、流程性强
二、文件操作
1. 必要性
(1)保存数据(掉电数据不丢失)
(2)一切皆文件:鼠标,键盘,显示器.....
操作硬件设备
2. Linux文件类型
按文件类型的首字母共分7类:
b | 块设备文件 | 存储设备 |
c | 字符设备文件 | 输入输出设备:键盘、鼠标、显示器 |
d | 目录文件 | |
- | 普通文件 | xxx.c xxx.txt a.out xxx.jpg xxx.mp4 |
l | 软连接文件 | |
s | 套接字文件 | 网络通信 |
p | 管道文件 | 进程间通信 |
3. Linux文件操作方法
I: input O:output
(1)标准IO
标准C库提供的一套文件操作接口。
(2)文件IO(属于系统调用)
Linux内核为Linux系统提供的一套文件操作接口
4.文件操作思想
(1)打开文件
(2)读文件、写文件
(3)关闭文件
5.标准IO
<stdio.h>
(1)打开文件 fopen()
(2)读文件、写文件:fgetc()/fputc()、fgets()/fputs()、fread()/fwrite()
(3)关闭文件 fclose()
6.函数接口
(1)fopen打开文件
FILE * fopen(const char * pathname, const char * mode);
①功能:打开一个文件,并且将文件关联到一个流上
②参数:
pathname : 要打开的文件名的指针
mode:打开方式
"r" | 以只读方式打开,文件必须存在 |
"r+" | 以读写方式打开,文件必须存在 |
"w" | 以只写方式打开,文件不存在:创建,文件存在:清空 |
"w+" | 以读写方式打开,文件不存在:创建,文件存在:清空 |
"a" | 以追加写的方式打开,文件不存在:创建 |
"a+" | 以读写方式打开,文件不存在:创建,文件存在:可追加写或从头读 |
③返回值:
成功:FILE * :文件流指针
失败:NULL
拓展:
文件流:数据从文件流入和流出体现的字节流
FILE * ------>文件流指针
标准IO:将一个打开的文件和一个文件流指针(FILE *)关联,
后面操作文件,皆面向文件流指针
(2)fputc字符写入文件
int fputc(int c, FILE * stream);
①功能:将一个字符写入到文件
②参数:
c:写入的字符
stream:要写入的文件流指针
③返回值:
成功:写入字符的ASCII值
失败:EOF (-1)
拓展:
od -c 文件名
查看文件中的字符
练习:
1. 使用fputc将"hello world"写入到1.txt文件中
(3)fclose关闭文件
int fclose(FILE * stream);
①功能:关闭一个文件
②参数:stream:文件流指针
③返回值:
成功:0
失败:EOF (-1)
(4)fgetc字符读取
int fgetc(FILE * stream);
①功能:从文件中读取一个字符
②参数:
stream:要读的文件流指针
③返回值:
成功:读到的字符的ASCII值
失败:EOF
到达文件末尾:EOF
./a.out filename aaa bbb ccc
main(int argc, char *argv[])
{
}
拓展:
fgetc和fputc如何读写终端:
终端:文件
操作系统默认打开了三个流:
FILE *
stdin -------->标准输入流-----》键盘
stdout -------->标准输出流------》显示屏(终端)
stderr -------->标准出错流------》显示屏(终端)
阻塞:
练习:实现文件的拷贝:
./a.out srcfile dstfile
fgetc/fputc : 一个字节读写文件
ASCII文件和二进制文件
-(普通文件) :ASCII文件:xxx.c xxx.h xxx.txt
'2''0''2''5' -—-> 0011 0010 0011 0000 0011 0010 0011 0101
二进制文件: a.out xxx.jpg xxx.png xxx.mp3
2025 -—-> 0000 0000 0000 0000 0000 0111 1110 1001
(5)fputs字符串写入文件
int fputs(const char * s, FILE * stream);
①功能:将字符串写入到文件
②参数:
s:要写入的字符串的首地址
stream:文件流指针
③返回值:
成功:>=0
失败:EOF
(6)fgets字符串读取
char * fgets(char * s, int size, FILE * stream);
①功能:从文件中读取一行数据(遇到\n停止)
②参数:
s:读取到的数据存放的首地址
size:期待读到的字节数
stream:要读的文件流指针
③返回值:
成功:返回存储数据的首地址(s)
失败:NULL
读到文件末尾:NULL
注:几种读取数据的函数的比较
scanf:遇到空格或者tab停止读取
fgets:遇到\n停止读取
gets:
fgets和gets的区别:
1. fgets会保留\n字符,gets会去掉\n
2. gets是危险的,没有size的限制
3. fgets最多读取size-1个字符
4. fgets遇到\n停止读取