标准I/O介绍及缓冲区

学习目的

Linux I/O进程课程学习的目的:学习编写linux应用程序(即使用的APP)

Linux文件的种类(在linux中可以说一切皆文件)

  1. 常规文件 r(平时编写的.c .h等文件都是常规文件)

  1. 目录文件 d(在linux中通常所说的文件呀,做为路径使用)

  1. 字符文件 c(例如鼠标,键盘等)

  1. 块设备文件 b (例如优盘、磁盘等)

  1. 管道文件 p (后面会讲)

  1. 套接字文件 s (会面会讲)

  1. 符号链接文件 I (就是平常用的APP快捷键)

IO的概念

I input 输入设备 比如键盘鼠标都是input设备 用数字0表示

O outp 输出设备 比如显示器 用数字1表示

优盘、网盘既是输入设备也是输出设备

系统调用和库函数

系统调用就是操作系统提供的接口函数

如果我们把系统调用封装成库看书就可以起到隔离的作用,提供程序的可移植性。

pirntf就是库函数然后调用了系统调用才在显示器上显示字符(库函数也可以使用操作系统提供的函数接口,一般不直接以调用操作系统提供的函数接口,因为种系统提供的函数接口是不同的,因此直接调用需要修改大量代码;库函数在每个系统中都可以被调用,库函数也是一种标准IO,一般在主流操作系统上都实现了C库),示意图如下:

标准I/O介绍及缓冲区_第1张图片

标准I/O通过缓冲机制,减少系统调用,实现更高的效率(比如系统调用一个文件是时间示1s,而不在意文件的大小,那么让文件在一个缓冲区进行聚集,到一定数量之后再一次调用,能够节省时间提高效率)

标准I/O - 流

FILE

标准IO用一个结构体类型来存放打开的文件的相关信息

标准IO的所有操作都是围绕FILE来进行

流(stream)

FILE又被称为流(stream)

流又分为文本流和二进制流(windows中创建的记事本就是文本流,但是在记事本中的内容显示乱码的时候就是二进制流)

Windows和linux的换行符区别

Windows是\r 、\n

linux是\n

缓冲区概念

为了减少操作IO设备的次数,提高运行效率,在内存里面设置缓冲区,缓冲区分为全缓冲和行缓冲以及无缓冲(无缓冲基本不使用)

全缓冲:缓冲区满才输出

行缓冲:遇到换行符输出(程序结束也可以输出)

三种标准IO

标准I/O介绍及缓冲区_第2张图片

缓冲区代码演示

#include //头文件就是标准IO的意思,std就是标准的意思

int main(int argc, const char *argv[])
{
    printf("helloworld")//因为printf里面没有换行符,且程序也没结束,因此显示器上面不能打印出来东西
    
    while (1) {
        sleep(1);
    }
}

#include //头文件就是标准IO的意思,std就是标准的意思

int main(int argc, const char *argv[])
{
    int i;
    for (i = 0; i < 1025; i++)
    {
        printf("A");//能打印出来1024个A,因为缓冲区最大空间为1k
    }
    
    while (1) {
        sleep(1);//sleep函数是释放cpu给其他应用程序使用的库函数,使用的头文件是#include 
    }
}

查看头文件的方法 man 2 库函数 或者man 3 库函数

你可能感兴趣的:(linux)