0


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>intmain(int argc,char*argv[]){
    FILE *fp;if((fp =fopen('demo.txt',"w+"))==NULL){perror("fopen error");return-1;}...return0;}
- perror是标准IO处理错误信息的方式之一:先输出字符串s,在输出错误号对应的错误信息 
- 如果是上面程序出错将会输出:fopen error:No such file or directory
关闭
  • 关闭一个标准IO流 *int fclose(FILE stream); 成功返回0;失败返回EOF,并设置errno(errno存放错误号)- 流关闭时自动刷新缓冲中的数据并释放缓冲区- 流一旦关闭就不能执行任何操作

四、读写流

  • 流支持不同的读写方式: 1. 读写一个字符:fgetc()/fputc() 一次读/写一个字符2. 读写一行: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个字符时返回,最后总是包含’\0’
###部分代码块
#defineN6;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


本文转载自: https://blog.csdn.net/Lsir___/article/details/122690066
版权归原作者 雷纳克斯AI(Linux-AI) 所有, 如有侵权,请联系我们删除。

“Lei牛可斯 --- basis of 嵌入式AI”的评论:

还没有评论