Linux系统编程001–系统IO

1. 文件系统:用来存储、组织、管理文件的一套方式、协议

2. 文件

  • 文件的属性:i-node唯一表示一个文件的存在与否
  • 文件的内容

3. Linux系统如何实现文件的操作?

硬件层:
    inode(属性)--->文件的内容
Linux内核:
    struct inode{}用来描述一个文件的屋里inode的信息【链表保存】,系统识别到一个文件的存在,
    就会为它创建一个struct inode,一个文件只会唯一对应一个struct inode

    struct file{}用来描述一个已经打开的文件:
        文件状态标记(如:O_RDONLY、O_WRONLY......)
        文件的偏移量/offset(类似“光标”)

    struct inode*
        每一个打开的文件都会对应一个struct file
        一个文件可以被多个不同的进程打开,一个进程也可以打开多个文件

    操作文件的过程:
        struct file---> struct inode--->硬件上面的inode--->文件的内容
        linux为了屏蔽文件操作的具体细节,为每一个进程创建一个“进程文件表项”,
        保存每一个进程打开的文件的 struct file* 的数组
        struct file*fds[]
            0  struct file*--->struct inode......

            1  struct file*--->struct inode......

            ......

    linux再提供操作文件的函数接口:
        fd = open()
        打开一个指定的文件,返回“进程文件表项”的下标,
        int  "文件描述符":在linux应用中,用来描述一个已经打开的文件,每一个打开的文件都有有个唯一的id,
                            后续操作这个文件,都是通过这个id操作该文件
        read(fd)
        write(fd)
        close(fd)
        ......

    linux系统提供的这些用于操作文件的接口函数(open,read.....),我们称为“系统IO”
    系统IO:操作系统提供的对文件的输入输出的接口

4. Linux系统IO的使用

文件的操作步骤

  • 打开文件 open()
NAME
    open, openat, creat - open and possibly create a file
    打开或者创建(创建并打开)一个文件
SYNOPSIS
    #include <sys types.h>
    #include <sys stat.h>
    #include <fcntl.h>

    int open(const char *pathname, int flags);
    int open(const char *pathname, int flags, mode_t mode);
        pathname&#xFF1A;&#x8981;&#x6253;&#x5F00;&#x6216;&#x8005;&#x521B;&#x5EFA;&#x7684;&#x6587;&#x4EF6;&#x540D;&#xFF0C;&#x5E26;&#x8DEF;&#x5F84;(&#x4E0D;&#x5E26;&#x8DEF;&#x5F84;&#x8868;&#x793A;&#x5F53;&#x524D;&#x8DEF;&#x5F84;)
        flags&#xFF1A;&#x6253;&#x5F00;&#x6587;&#x4EF6;&#x7684;&#x6807;&#x8BB0;
            O_RDONLY:&#x53EA;&#x8BFB;
            O_WRONLY:&#x53EA;&#x5199;
            O_RDWR:&#x8BFB;&#x5199;
            &#x4EE5;&#x4E0A;&#x4E09;&#x4E2A;&#x6807;&#x8BB0;&#x53EA;&#x80FD;&#x9009;&#x4E00;&#x4E2A;&#xFF08;&#x6587;&#x4EF6;&#x7684;&#x6253;&#x5F00;&#x65B9;&#x5F0F;&#xFF09;
            O_APPEND&#xFF1A;&#x8FFD;&#x52A0;&#x6807;&#x8BB0;&#xFF0C;&#x6253;&#x5F00;&#x6587;&#x4EF6;&#x540E;&#xFF0C;&#x6587;&#x4EF6;&#x7684;&#x504F;&#x79FB;&#x91CF;&#x4F1A;&#x5728;&#x6587;&#x4EF6;&#x7684;&#x672B;&#x5C3E;&#x3002;&#xFF08;&#x9ED8;&#x8BA4;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x8BFB;&#x548C;&#x5199;&#x7684;&#x6807;&#x8BB0;&#x5728;&#x6587;&#x4EF6;&#x7684;&#x5F00;&#x5934;&#xFF09;
            O_CREAT&#xFF1A;&#x521B;&#x5EFA;&#x6807;&#x8BB0;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x5B58;&#x5728;&#xFF0C;&#x5219;&#x521B;&#x5EFA;&#x6587;&#x4EF6;
            O_EXCL&#xFF1A;&#x8BE5;&#x6807;&#x8BB0;&#x4E00;&#x822C;&#x548C;O_CREAT&#x914D;&#x5408;&#x4F7F;&#x7528;&#xFF0C;&#x7528;&#x6765;&#x6D4B;&#x8BD5;&#x6587;&#x4EF6;&#x662F;&#x5426;&#x5B58;&#x5728;
                    &#x5982;&#x679C;&#x6307;&#x5B9A;O_CREAT | O_EXCL,&#x5E76;&#x4E14;&#x6587;&#x4EF6;&#x5B58;&#x5728;&#xFF0C;&#x5219;open&#x4F1A;&#x5931;&#x8D25;&#xFF0C;&#x5E76;&#x4E14;errno&#x8BBE;&#x7F6E;&#x4E3A;EEXIST,&#x8868;&#x793A;&#x6587;&#x4EF6;&#x5DF2;&#x5B58;&#x5728;
            O_TRUNC&#xFF1A;truncate  &#x622A;&#x77ED;&#xFF0C;&#x6E05;&#x9664;&#x6587;&#x4EF6;&#x5185;&#x5BB9;
            O_NONBLOCK&#xFF1A;&#x975E;&#x963B;&#x585E;&#x65B9;&#x5F0F;&#x6253;&#x5F00;&#x6587;&#x4EF6;
                        &#x975E;&#x963B;&#x585E;&#xFF1A;&#x4E0D;&#x7B49;&#x5F85;
                        &#x5982;&#x679C;&#x6587;&#x4EF6;&#x6CA1;&#x6709;&#x5185;&#x5BB9;&#xFF0C;read&#x4E0D;&#x4F1A;&#x7B49;&#x5F85;&#xFF0C;&#x76F4;&#x63A5;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x9519;&#x8BEF;
                        &#x5982;&#x679C;&#x6587;&#x4EF6;&#x6CA1;&#x6709;&#x7A7A;&#x95F4;&#x4E86;&#xFF0C;write&#x4E0D;&#x4F1A;&#x963B;&#x585E;&#xFF0C;&#x76F4;&#x63A5;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x9519;&#x8BEF;
                        &#x963B;&#x585E;&#xFF1A;&#x7B49;&#x5F85;
                        &#x5982;&#x679C;&#x6587;&#x4EF6;&#x6CA1;&#x6709;&#x5185;&#x5BB9;&#xFF0C;read&#x4F1A;&#x7B49;&#x5F85;(&#x76F4;&#x5230;&#x6709;&#x6570;&#x636E;&#x6216;&#x51FA;&#x9519;)
                        &#x5982;&#x679C;&#x6587;&#x4EF6;&#x6CA1;&#x6709;&#x7A7A;&#x95F4;&#x4E86;&#xFF0C;write&#x4F1A;&#x963B;&#x585E;&#xFF0C;(&#x76F4;&#x5230;&#x6709;&#x7A7A;&#x95F4;&#x6216;&#x51FA;&#x9519;)
                        &#x3002;&#x3002;&#x3002;&#x3002;&#x3002;&#x3002;
            &#x591A;&#x4E2A;&#x6807;&#x8BB0;&#x4F7F;&#x7528;&#x201C;|&#x201D;&#x94FE;&#x63A5;(&#x6807;&#x8BB0;&#x662F;&#x4F7F;&#x7528;&#x4F4D;&#x57DF;&#x5B9E;&#x73B0;&#x7684;)
            O_RDWR | O_CREAT | O_TRUNC
        mode:&#x6307;&#x5B9A;&#x521B;&#x5EFA;&#x7684;&#x6587;&#x4EF6;&#x7684;&#x6743;&#x9650;&#xFF0C;&#x5F53;&#x7B2C;&#x4E8C;&#x4E2A;&#x53C2;&#x6570;&#x5E26;&#x6709;O_CREAT&#x65F6;&#xFF0C;&#x6307;&#x5B9A;&#x521B;&#x5EFA;&#x7684;&#x6587;&#x4EF6;&#x7684;&#x6743;&#x9650;
        &#x8FD4;&#x56DE;&#x503C;&#xFF1A;&#x6210;&#x529F;&#x6253;&#x5F00;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x8FD4;&#x56DE;&#x6253;&#x5F00;&#x6587;&#x4EF6;&#x7684;&#x6587;&#x4EF6;&#x63CF;&#x8FF0;&#x7B26;&#xFF08;>2 && int&#xFF08;&#x4E0B;&#x6807;&#xFF09;&#xFF09;
              &#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4F1A;&#x81EA;&#x52A8;&#x4E3A;&#x6BCF;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x6253;&#x5F00;&#x4E09;&#x4E2A;&#x6587;&#x4EF6;&#xFF1A;
              &#x6807;&#x51C6;&#x8F93;&#x5165;&#x6587;&#x4EF6;&#xFF1A;&#x6587;&#x4EF6;&#x63CF;&#x8FF0;&#x7B26; STDIN_FILENO (0)
              &#x6807;&#x51C6;&#x8F93;&#x51FA;&#x6587;&#x4EF6;&#xFF1A;&#x6587;&#x4EF6;&#x63CF;&#x8FF0;&#x7B26; STDOUT_FILENO (1)
              &#x6807;&#x51C6;&#x51FA;&#x9519;&#x6587;&#x4EF6;&#xFF1A;&#x6587;&#x4EF6;&#x63CF;&#x8FF0;&#x7B26; STDERR_FILENO (2)
              &#x5931;&#x8D25;&#x8FD4;&#x56DE;-1&#xFF0C;&#x540C;&#x65F6;errno&#x88AB;&#x8BBE;&#x7F6E;
     errno&#x662F;&#x4E00;&#x4E2A;&#x5168;&#x5C40;&#x53D8;&#x91CF;&#xFF0C;&#x662F;&#x7528;&#x6765;&#x4FDD;&#x5B58;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x51FA;&#x9519;&#x7684;&#x9519;&#x8BEF;&#x7801;
         &#x5934;&#x6587;&#x4EF6;&#xFF1A; #include<srrno.h>
         &#x8DEF;&#x5F84;&#xFF1A;/usr/include/errno.h
         perror &#x628A;&#x9519;&#x8BEF;&#x7801;&#x5BF9;&#x5E94;&#x7684;&#x9519;&#x8BEF;&#x5B57;&#x7B26;&#x4E32;&#x6253;&#x5370;&#x51FA;&#x6765;
         perro("user indi");
            user indi:&#x7528;&#x6237;&#x81EA;&#x5DF1;&#x7684;&#x63D0;&#x793A;&#x4FE1;&#x606F;
            &#x6253;&#x5370;&#x51FA;&#x6765;&#x7684;&#x5F62;&#x5F0F;&#xFF1A;&#x7528;&#x6237;&#x81EA;&#x5DF1;&#x7684;&#x63D0;&#x793A;&#x4FE1;&#x606F;&#xFF1A;&#x7CFB;&#x7EDF;&#x9519;&#x8BEF;&#x7801;&#x7684;&#x63D0;&#x793A;&#x4FE1;&#x606F;
    int creat(const char *pathname, mode_t mode);</srrno.h></fcntl.h></sys></sys>
  • 对文件的操作(读、写…)
  • 关闭文件
//&#x5173;&#x95ED;&#x6587;&#x4EF6;
NAME
    close - close a file descriptor
SYNOPSIS
    #include <unistd.h>
    int close(int fd);
        close&#x662F;&#x7528;&#x6765;&#x5173;&#x95ED;fd&#x6307;&#x5B9A;&#x7684;&#x6587;&#x4EF6;
        fd:file descriptor &#x6587;&#x4EF6;&#x63CF;&#x8FF0;&#x7B26;
        &#x8FD4;&#x56DE;&#x503C;&#xFF1A;
            &#x6210;&#x529F;&#xFF1A;&#x8FD4;&#x56DE;0
            &#x5931;&#x8D25;&#xFF1A;&#x8FD4;&#x56DE;-1&#xFF0C;&#x540C;&#x65F6;errno&#x88AB;&#x8BBE;&#x7F6E;</unistd.h>

Original: https://www.cnblogs.com/emolife/p/16694090.html
Author: imagelife
Title: Linux系统编程001–系统IO

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/577804/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 重启电脑后Mysql无法在cmd运行

    问题描述:如果在cmd窗口显示 &#x2018;mysql&#x2019;&#x4E0D;&#x662F;&#x5185;&#x90…

    Linux 2023年6月15日
    0145
  • C语言之初认识

    1.低级语言可以简明说:非常接近底层语言 2.可移值性:可以嵌入各大系统中 3.简单性:语法简单,语法规则没有太大限制,c语言的代码要求比较随意,一行可以写入多行语句,每条语句写完…

    Linux 2023年6月8日
    090
  • JavaScript快速入门-02-基本语法

    2 基本语法 2.1 JavaScript简介 JavaScript 是一门 解释型语言,其代码在客户端中执行前不需经过编译,而是直接由浏览器解释执行。主要用作 客户端脚本语言,在…

    Linux 2023年6月7日
    0113
  • HTML笔记整理–下节

    欢迎来到HTML基础笔记下节部分! 内联样式 当特殊的样式需要应用到个别元素时,就可以使用内联样式。 使用内联样式的方法是在相关的标签中使用样式属性。样式属性可以包含任何 CSS …

    Linux 2023年6月13日
    083
  • docker 安装nextcloud+onlyoffice+mysql

    环境 类目 版本 备注 操作系统 centos 7 64位 Docker 最新版 Docker compose 最新版 暂时没有用上可以不安装 nextcloud 最新版 only…

    Linux 2023年5月27日
    0105
  • VMware服务关闭后一定要重启

    重要的事情说三遍:服务暂时关闭记得重启,服务暂时关闭记得重启,服务暂时关闭记得重启!!! VMware服务由于安装补丁的需要我暂时把服务关闭了,于是我遇到了尴尬的一幕,于是乎发现上…

    Linux 2023年6月7日
    0121
  • docker容器编排原来这么丝滑~

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 概念介绍: Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Doc…

    Linux 2023年6月14日
    0103
  • 深入Go Map的使用技巧

    原文链接:https://www.zhoubotong.site/post/60.html之前写过一篇文章,Go map定义的几种方式以及修改技巧,今天发现还可以深入探讨下开发中容…

    Linux 2023年6月6日
    0123
  • haproxy

    1. haproxy简介 2. haproxy配置文件解析 3. haproxy搭建httpd负载均衡 4. 启动haproxy自带的监控界面 haproxy简介 HAProxy是…

    Linux 2023年6月13日
    0138
  • Django中信号的使用

    信号种类及用法 Django中提供了”信号调度”,用于在框架执行操作时解耦. 一些动作发生的时候,系统会根据信号定义的函数执行相应的操作 Django中内置…

    Linux 2023年6月14日
    0103
  • php uniapp 支付宝app支付,前后端实战源码

    uniapp端,前端代码 app.php端代码 Original: https://www.cnblogs.com/xiaofengzheng/p/16457966.htmlAut…

    Linux 2023年6月7日
    087
  • NoteOfMySQL-10-触发器与事件

    触发器是由事件来触发某个操作,这些事件包括insert语句、update语句、delete语句,当数据库系统执行这些事件时,就会激活触发器执行相应的操作。事件调度器(event s…

    Linux 2023年6月14日
    0100
  • ShardingSphere-proxy-5.0.0容量范围分片的实现(五)

    一、修改配置文件config-sharding.yaml,并重启服务 # Licensed to the Apache Software Foundation (ASF) unde…

    Linux 2023年6月14日
    0145
  • Linux安装cmatrix代码雨教程

    一:介绍 cmatrix代码雨是Linux的系统屏保界面;执行cmatrix不仅可以练习简单的编译安装软件三部曲,还可以执行cmatrix命令做出代码雨,提升文化实力 二:成品演示…

    Linux 2023年5月27日
    0113
  • zabbix监控配置

    zabbix监控配置 zabbix监控配置 zabbix通过web界面配置邮件告警 zabbix配置客户端监控 创建主机组 创建监控主机并将主机加入主机组 添加监控项 配置触发器 …

    Linux 2023年6月13日
    0101
  • Java常见知识点总结

    1 重载 && 重写 重载: 发生在同一个类中, 方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 重写: 发生在父…

    Linux 2023年6月7日
    0101
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球