Lei牛可斯 — basis of 嵌入式AI
Linux文件IO(标准I/O<一>)
– 一、标准IO
– 二、流[FILE]
– 三、流的打开与关闭
– 四、读写流
↓
一、 标准IO
- 一句话理解:用标准C写出来的一组具有输入输出的API(应用程序编程接口)函数
- 必须要知道的两个名词:缓冲机制、系统调用。
- 标准IO通过缓冲机制减少系统调用的次数从而达到实现更高效率的处理
二、 流[FILE]
-
FILE:标准IO用一个结构体类型来存放打开文件的相关信息[一个FILE结构体代表一个打开的文件]
-
流(stream):FILE又被称为流
-
一句话理解:标准IO的所有操作都是围绕FILE来进行
-
流分为二进制流、文本流
- 在Windows下:文本流( 回车换行:r+n)和二进制流(n)有区别
- 在Linux下:文本流(n)和二进制流(n)无区别
- 当程序需要移植到Windows下运行时,要考虑用到二者区别,用二进制流 -
流的缓冲类型
- 全缓冲[打开普通文件时,默认是全缓冲]:当流的缓冲区无数据(写操作)、无空间(读操作)时,进行IO操作
- 行缓冲[标准输入输出(当流和一个终端关联)时]:当在输入和输出遇到换行符(n)时,进行IO操作
- 无缓冲[输出错误流数据时]:标准错误流输出时数据,直接写入文件,流不进行缓冲 -
标准IO预定义三个流:stdin【标准输入流】 / stdout 【标准输出流】/ stderr【标准错误流】
三、流的打开与关闭
打开
-
打开一个标准IO流
**FILE *fopen(const char path, const char mode);
成功时返回流指针,出错时返回NULL;- path 是流的路径
- mode是流的打开方式(r(b)/r+b w(b)/w+b a(b)/a+b)
#include<stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
if ((fp = fopen('demo.txt', "w+")) == NULL) {
perror("fopen error");
return -1;
}
...
return 0;
}
- perror是标准IO处理错误信息的方式之一:先输出字符串s,在输出错误号对应的错误信息
- 如果是上面程序出错将会输出:fopen error:No such file or directory
关闭
-
关闭一个标准IO流
*int fclose(FILE stream);
成功返回0;失败返回EOF,并设置errno(errno存放错误号)- 流关闭时自动刷新缓冲中的数据并释放缓冲区
- 流一旦关闭就不能执行任何操作
四、读写流
-
流支持不同的读写方式:
- 读写一个字符:fgetc()/fputc() 一次读/写一个字符
- 读写一行:fgets()/fputs() 一次读/写一行
按字符输入输出
-
按字符输入
- int fgetc(FILE *stream);
- 成功时返回读取的字符;若到文件末尾或者出错时返回EOF(-1)
###部分代码块
FILE *fp;
int ch, count;
if ((fp = fopen(argv[1], “r”)) == NULL ) {
perror(“fopen”);
return -1;
}
while ((ch = fgetc(fp) != EOF) {
count++;
}
printf(“total bytes %d n”, count);
-
按字符输出
- int fputc(int c, FILE *stream);
- 成功时返回写入的字符;出错时返回EOF(-1)
###部分代码块
FILE *fp;
int ch;
if ((fp = fopen(argv[1], “w”)) == NULL) {
perror(“fopen”);
return -1;
}
for (ch = ‘a’; ch <= ‘z’; ch++) {
fputc(ch, fp);
}
按行输入输出
-
按行输入
- char *fgets(char *s, int size, FILE *stream);
- 成功时返回s,到文件末尾或者出错时返回NULL
- 遇到’n’或已输入size-1个字符时返回,最后总是包含’’
###部分代码块
#define N 6;
char buf[N]
fgets(buf, N, stdin);
printf(“%s”, buf);
- 假设键盘输入分别是:abcd<回车> abcdef<回车>,buf中的内容是?
-
按行输出
- int fputs(conts char *s, FILE *stream);
- 成功时返回输出的字符个数,出错时返回EOF(-1)
###部分代码块
FILE *fp;
char buf[] “hello world”;
if((fp = fopen(argv[1], “a”)) == NULL) {
perror(“fopen”);
return -1;
}
fputs(buf, fp);
OK了,迪尔 friends,this 章节 is over,见 you next
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
二维码