前言

进程在启动后会自动的打开3个文件:标准输入、标准输出和标准错误输出分别对应文件描述符0、1、2。对于每个进程他们都都维护了一张文件描述符表(file descriptor table),通常fd(file discriptor同下文) 的取值范围是0-1023(可以通过ulimit -n命令查看,当然这不是标准,可以自行修改,但是这通常已经够用了)。每个文件描述符表项都有一个文件指针,指向一张打开文件表(open file table),这张表是内核级的,意思就是说可以存在两个进程中的fd指向同一个打开文件表项。比如一个进程打开文件之后通过fork()产生了一个子进程,那么就会出现两个进程中的fd指向同一个打开文教表表项的情况。指向同一个打开文件表表项意味着这样的fd拥有同样的offset以及status flags。如下图所示:

关于重定向

在bash中,重定向的语法用‘>’和'<'表示,如“2>&1”,意思就是把标准错误输出(文件描述符为2)重定向(redirection)到标准输出(文件描述符为1)。具体可以这样实现:

  

当然,除了使用文件描述符之外也可以使用文件名作为重定向的“方向”,如“ls > file ”,就是把ls的标准输出将结果重定向到file的输入之中。于是所有到标准输出的输出都被重定向到了file的输入中,file的内容便再现了ls命令的结果。

其实我以为对重定向的理解,关键不在代码的实现,当知道了原理之后,脑中有了一个具体的概念,剩下的事只是“看图说话”了,也许就是所谓的事半功倍的效果吧。

浅谈输入输出”重定向“——基于Linux系统的更多相关文章

  1. 浅谈身为小白学习Linux系统的四点实用建议

    游戏.办公.安全,可以总结为是方便当代人们在生活中的刚需,我们大都是这些服务的使用者,而把单个功能整合起来那就必须谈到互联网,自然而然通过互联网要将Service发送给Service manageme ...

  2. 基于Linux系统的Nagios网络管理模块的实现

    基于Linux 系统的Nagios网络管理模块的实现 1.引言 随着计算机网络的普及,网络管理已成为信息时代中最重要的问题之一.在现有的技术条件下,人们希望有一个更加稳定可靠的网络环境.计算机网络管理 ...

  3. 基于Linux系统geth的安装

    转载地址 https://blog.csdn.net/qq_36124194/article/details/83658580 基于Linux系统geth的安装 安装ethereum sudo apt ...

  4. 浅谈分词算法基于字的分词方法(HMM)

    前言 在浅谈分词算法(1)分词中的基本问题我们讨论过基于词典的分词和基于字的分词两大类,在浅谈分词算法(2)基于词典的分词方法文中我们利用n-gram实现了基于词典的分词方法.在(1)中,我们也讨论了 ...

  5. python脚步管理工具supervisor=3.3.0的安装、使用。基于linux系统。

    一.安装相关包 sudo apt-get install python-pip       #python的安装包的工具 sudo apt-get install python-dev       # ...

  6. 基于Linux系统的病毒

    虽然在Linux里传播的病毒不多,但也是存在一些,我从一些安全网站搜集了一些资料. 1.病毒名称: Linux.Slapper.Worm 类别: 蠕虫 病毒资料: 感染系统:Linux 不受影响系统: ...

  7. 安全威胁无孔不入:基于Linux系统的病毒(转)

    虽然在Linux里传播的病毒不多,但也是存在一些.我从一些安全网站搜集了一些资料. 1.病毒名称: Linux.Slapper.Worm 类别: 蠕虫 病毒资料: 感染系统:Linux 不受影响系统: ...

  8. 基于Linux系统WINE虚拟机技术的研究

    650) this.width=650;" onclick="window.open("http://blog.51cto.com/viewpic.php?refimg= ...

  9. Linux培训教程 浅谈:PHP在linux上执行外部命令(整理)

    一.PHP中调用外部命令介绍 二.关于安全问题 三.关于超时问题 四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍 在PHP中调用外部命令,可以用,1>调用专门函数 ...

随机推荐

  1. 更新整理本人所有博文中提供的代码与工具(Java,2013.08)

    为了更方便地管理博文中涉及的各种代码与工具资源,现在把这些资源迁移到 Google Code 中,有兴趣者可前往下载. Java 1.<高效 Java Web 应用开发框架 JessMA v3. ...

  2. json 对象 数组

    一.json写法以及获得其数据的方法 var jsons={ name:'wen', age:12, price:'qq' } console.log(typeof jsons);//object c ...

  3. DIV+CSS+JS基础+正则表达式

    ...............HTML系列....................        DIV元素是用来为HTML文档内大块(block-level)的内容提供结构和背景的元素.DIV的起始 ...

  4. 一次失败的APP业务渗透测试

    作者:whoamiecho 来源:ichunqiu 本文参加i春秋社区原创文章奖励计划,未经许可禁止转载! 一.  过程 1.1.事情起因:暴力破解 测试给了个普通用户账号,可以登录.APP一来就要登 ...

  5. arcgis批量处理mxd定义服务中的路径

     >>> from arcpy import env... env.workspace=r"c:\165mxd"... out = r"c:\166mx ...

  6. Android Tips: 打电话和发短信

    利用Android打电话非常简单,直接调用Android内在的电话功能就可以了. btnDail.setOnClickListener(new OnClickListener(){ @Override ...

  7. 【C语言】C语言外部变量和内部变量

    目录: [外部变量] · 定义 · 用extern修饰变量 [内部变量] · 定义 · 用static修饰变量 1.外部变量 · 定义 定义的变量能被本文件和其它文件访问的变量,称为外部变量. 注: ...

  8. iOS---TextView显示HTML文本

    _checkAllIntroduceTextView = [[UITextView alloc] initWithFrame:CGRectMake(10, 0, kScreenWidth-20, kS ...

  9. Mac OS 解压缩软件:StuffIt Expander

    由于今天下载一份文档,是在rar压缩包里,mac os系统默认是不支持RAR格式文件的解压的.在app store里找了下,找到一个免费的解压软件,名字叫:StuffIt Expander. 该软件由 ...

  10. php示例代码之类似于C#中的String.Format方法

    php示例代码之类似于C#中的String.Format方法 原文来自于  http://stackoverflow.com/questions/1241177/c-string-format-equ ...