• 【Linux】基础IO_1



    六、基础IO

    1. C语言的文件接口

    我们知道 文件 = 文件内容 + 文件属性 。即使是一个空文件,仍然会在磁盘中占据空间。那打开文件是什么意思呢?其实文件打开的意思就是:将文件从磁盘中加载到内存中。 文件跟程序一样,被操作系统使用内核数据结构给管理起来了,对文件的操作就转变为对文件的调度。
    我们接下来熟悉和使用C语言中的文件接口。
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    参数:
    在这里插入图片描述

    “r”:只读方式打开文件,文件必须存在。
    “w”:写入方式打开文件,如果文件存在,则清空文件内容;如果文件不存在,则创建新文件。
    “a”:追加方式打开文件,如果文件存在,写入数据时定位到文件末尾;如果文件不存在,则创建新文件。
    “rb”:以二进制只读方式打开文件。
    “wb”:以二进制写入方式打开文件。
    “ab”:以二进制追加方式打开文件。

    不知道大家还记得Linux中的重定向符不,>输出重定向,<输入重定向,>>追加重定向。
    在这里插入图片描述
    重定向符和文件流非常相似,他俩肯定有莫大的关系。既然知道了写操作,我们接下来看看文件读取操作。
    在这里插入图片描述
    在这里插入图片描述

    2. 系统文件I/O

    我们从键盘接收输入,打印到显示器上,但键盘和显示器都是硬件资源,他们统统被操作系统所管理,我们的文件(进程)无法绕过操作系统打开这些资源,所以操作系统必须要提供一些接口来支持文件访问。
    在这里插入图片描述
    我们来用一用:
    在这里插入图片描述
    在这里插入图片描述
    接下来看看怎么写和怎么关闭:
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    open系统调用接口传递标志位(本质是宏)时,还有其他的标志位。
    在这里插入图片描述
    在这里插入图片描述

    我们系统调用接口中都需要 fd 这个参数,这个参数是文件标识符,确定文件的参数。在操作系统内部,进程PCB中存储着一个结构体指针,指向一个文件描述符表,这个表是一个结构体指针数组,内部存的是文件结构体指针,分别指向不同的打开的文件。而这个 fd 就是这个文件表结构体的下标,确定文件。
    在这里插入图片描述
    一般来说,fd = 0 是标准输入文件流(键盘文件),1 是标准输出文件流(显示器文件), 2 是标准错误文件流(显示器文件)。

    fd的分配规则:最小的没有被使用的数组下标,会被分配给最新打开的文件。 所以我们可以:close(1),即关闭stdout流,然后新打开的文件的fd就是1,但是输出函数并不知道,向显示器打印的字符串统统转变成向文件内写入。就实现了重定向的功能。
    在这里插入图片描述
    这里 dup2 函数可以方便实现重定向的功能。


    未完待续

  • 相关阅读:
    Java:Java与Python——顶级编程语言比较
    《痞子衡嵌入式半月刊》 第 56 期
    在线客服系统源码开发实战总结:需求分析及前端代码基本技术方案
    HT513 I2S输入的音频功放的应用场景
    Reggie外卖项目 —— 移动端小程序之手机验证码登录
    单调栈!!!
    react,hooks中的useRef使用
    docker命令图文详解
    合工大现代企业管理期末报告--阿里巴巴企业管理模式探究
    Nacos Config--服务配置
  • 原文地址:https://blog.csdn.net/m0_69828905/article/details/139780333