Lei牛可斯 — basis of 嵌入式AI

Lei牛可斯 — basis of 嵌入式AI

Linux文件IO(标准I/O<一>)

– 一、标准IO

– 二、流[FILE]

– 三、流的打开与关闭

– 四、读写流

一、 标准IO

  • 一句话理解:用标准C写出来的一组具有输入输出的API(应用程序编程接口)函数
  • 必须要知道的两个名词:缓冲机制、系统调用。
  • 标准IO通过缓冲机制减少系统调用的次数从而达到实现更高效率的处理Lei牛可斯 --- basis of 嵌入式AI

二、 流[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存放错误号)

    • 流关闭时自动刷新缓冲中的数据并释放缓冲区
    • 流一旦关闭就不能执行任何操作

四、读写流

  • 流支持不同的读写方式
    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’
###部分代码块
#define N 6;
char buf[N]
fgets(buf, N, stdin);
printf(“%s”, buf);
 - 假设键盘输入分别是:abcd<回车>  abcdef<回车>,buf中的内容是?

Lei牛可斯 --- basis of 嵌入式AI

  • 按行输出
    – 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

版权声明:本文为博主雷纳克斯AI(Linux-AI)原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/Lsir___/article/details/122690066

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年1月25日 下午5:58
下一篇 2022年2月8日 上午10:49

相关推荐