• 文件描述符


    参考:https://www.jb51.net/article/138686.htm

    前言

    Linux将所有内核对象当做文件来处理,系统用一个size_t类型来表示一个文件对象,比如对于文件描述符0就表示系统的标准输入设备STDIN,通常情况下STDIN的值为键盘,如read命令就默认从STDIN读取数据,当然STDIN的值是可以改变的,比如将其改成其他文件,这样的话想read等命令就会默认从相应的文件读取数据了。

    默认标准文件描述符

    每个进程启动时默认都会有三个标准的文件描述符:

    • stdin 0 号描述符, 代表输入设备, 进程从它读入数据;
    • stdout 1 号描述符, 进程往其中写入数据;
    • stderr 2 号描述符, 进程会往其中写入错误信息;

    文件描述符的操作

    Shell 中对文件描述符的操作由三部分组成: (Left, Operation, Right):

    • Left 可以是 0-9 的数字, 代表第 n 号文件描述符;
      Left 还可以为 &, 表示同时操作 stdout 和 stderr
    • Right 可以是文件名或 0-9 的数字, 当 Right 是数字时必须要加上 & 符号, 表示引用第 n 号文件描述符;
      Right 还可以为 &-, 此时表示关闭 Left 描述符, 例如 2<&- 表示关闭 stderr;
    • Operation 可以为 < 或 >;
      为 < 时表示以读模式复制 Right 到 Left, 此时如果没有指定 Left 的话, 则为默认值 0;
      当为 > 表示以写模式复制 Right 到 Left, 此时如果没有指定 Left 的话, 则为默认值 1;
      Operation 和 Left 之间不能有空格;
      当 Right 为文件名时, Operation 和 Right 可以有空格, 否则也不能有空格;

    当存在多个文件描述符的操作时, 会按照从左往右的顺序依次执行. 例如通过命令 cmd 3>&1 1>&2 2>&3 3>&- 就可以交换 stdin 和 stdout.

  • 相关阅读:
    悬浮按钮
    C语言学习笔记
    python3之环境搭建以及基础语法
    设计模式之单例模式
    浅谈vuex
    用位运算替代js中的常见操作
    浅析Symbol
    egg.js源码解析之render()
    js的事件循环机制和任务队列
    浅谈js异步
  • 原文地址:https://www.cnblogs.com/jmliao/p/11219617.html
Copyright © 2020-2023  润新知