嵌入式学习——Linux高级编程复习(标准IO)——day36

作者 : admin 本文共3183个字,预计阅读时间需要8分钟 发布时间: 2024-06-9 共4人阅读

1. 标准IO概念——(有缓存、流指针)

(1)标准IO是编程语言中处理输入和输出的一种通用方法,涉及以下三个预定义的文件指针:

        1. stdin:标准输入,通常默认关联到键盘输入。

        2. stdout:标准输出,通常默认关联到屏幕输出。

        3.  stderr:标准错误,同样通常关联到屏幕输出。

        注意:stdin、stdout、stderr程序默认打开

(2)除此之外,标准IO库还支持文件操作,通过fopen打开文件,fclose关闭文件,以及fread, fwrite, fscanf, fprintf等函数进行读写操作。此外,它还处理不同类型的缓冲策略(全缓冲、行缓冲、无缓冲)来优化I/O性能。

(3)标准IO的一个重要特点是它对字符流进行了抽象,使程序可以一致地处理文本和二进制数据

        ASCLL码文件:程序代码、文本文件 ——  fgetc/fputc、fgets/fputs 、fprintf/fscanf

        二进制文件:音视频、图片、压缩包  ——  fwrite/fread

(4)标准IO是一种有缓存的IO形式(接收了一部分内容后给到linux内核中)

         标准IO是库函数,库函数可以在Windows和Linux系统中都能运行

2. 流和流指针

2.1 流

        你声明一个FILE *fp ,并把fopen(某个文件)返回的值赋予fp这两个动作就相当于建立了一个水龙头,当你用getc(fp)之类的输入函数读取文件字符时就相当于拧开了水龙头,每读取一个字符,这个文件就像水一样的流动一下,fp所指的地址自然就向后移动了一位。

        int ch;

                while((ch=getc(fp))!=EOF)

        putchar(ch);

        这个循环,可以读取一个文件的所有字符。如果不是流的话,ch永远是第一个字符,不会更新。也可以理解为,fp自动++(一个字符的大小)。

2.2 流指针

        它主要用于跟踪文件的当前位置以及指示下一个读取或写入操作将在文件中进行的位置。流指针的主要作用是跟踪文件的位置,这样在进行文件读写操作时就知道从哪里开始读取或者写入数据。在文件读取时,流指针会自动向前移动,以便指向下一个要读取的数据;而在文件写入时,流指针也会相应地移动,以便确保数据被写入到正确的位置。

2. 标准IO——函数接口整理

    1.打开文件    fopen
    2.读写文件
                        fgetc/fputc
                        fgets/fputs 
                        fprintf/fscanf

                        fwrite/fread
    3.关闭文件    fclose

    4. 流的定位函数接口

                        fseek、rewind、ftell

2.1 fopen

        1. 定义

              FILE *fopen(const char *pathname, const char *mode);

        2. 功能

                打开一个文件,并与文件建立一个流

        3. 参数

                pathname:指向文件路径字符串的首地址的指针

                mode:指向一个字符串的指针
                    “r”        只读打开               文件存在只读打开,文件不存在报错
                    “r+”      读写打开               文件存在读写打开,文件不存在报错
                    “w”       只写打开               文件存在清0只写打开,文件不存在创建文件
                    “w+”     写读打开               文件存在清0写读打开,文件不存在创建文件
                    “a”        追加只写打开        文件存在追加只写打开,文件不存在创建文件
                    “a+”      追加读写打开        文件存在追加写读打开,文件不存在创建文

        4. 返回值

                成功返回一个文件流指针
                失败返回NULL

        5. 示例程序

#include 

int main(void)
{
	FILE *fp = NULL;

	fp = fopen("file.txt", "a");
	if (NULL == fp)
	{
		perror("fail to fopen");
		return -1;
	}

	return 0;
}

        6. 注意

                perror功能和printf类似,但perror能打印出错的原因

2.2 fclose

        1. 定义

              int fclose(FILE *stream); 

        2. 功能

                关闭文件流指针对应的流

        3. 参数

                stream:文件流指针 

        4. 返回值

                成功返回0 
                失败返回EOF(-1)

        5. 示例程序

#include 

int main(void)
{
	FILE *fp = NULL;

	fp = fopen("a.txt", "w");
	if (NULL == fp)
	{
		perror("fail to fopen");
		return -1;
	}
	
	fclose(fp);

	return 0;
}

        6. 注意

        正常情况下都会关掉,不用在意返回值

2.3 fputc

        1. 定义

                  int fputc(int c, FILE *stream);

        2. 功能

                    向流中写入c对应的字符

        3. 参数

                    c:写入流中的字符对应的ASCII码值
                    stream:文件流指针

        4. 返回值

        5. 示例程序

        6. 注意

2.4 fgetc

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.5 fputs

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.6 fgets

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.7 fwrite

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.8 fread

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.9 fprintf

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.10 fscanf

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.11 fseek

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.4 rewind

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

2.4 ftell

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

3. 缓存

3.1 全缓存

3.2 行缓存

3.3 不缓存

3.4 setvbuf

        1. 定义

        2. 功能

        3. 参数

        4. 返回值

        5. 示例程序

        6. 注意

本站无任何商业行为
个人在线分享 » 嵌入式学习——Linux高级编程复习(标准IO)——day36
E-->