linux的输入输出和文件描述符
一、linux的输入和输出
#Linux系统中的输出是什么?你在shell中运行任何命令的执行结果都是"输出",如果命令的执行结果是正确的,那产生的输出就是"正确的输出",如果命令的执行结果是错误的,那产生的输出就是"错误的输出"。无论是正确的输出还是错误的输出,默认情况下运行命令产生的"输出"都是打印到屏幕上的。在linux里面我们将正确的输出叫做"标准的正确输出",在Linux里面对应的设备文件是/dev/stdout(文件描述符 1)在linux里面我们将错误的输出叫做"标准的错误输出",在Linux里面对应的设备文件是/dev/stderr(文件描述符 2)#Linux系统中的输入是什么?用户通过键盘输入的数据都是输入,输入没有正确输入和错误输入之分。在linux里面我们将输入叫做"标准的输入",在Linux里面对应的设备文件是/dev/stdin(文件描述符 0)
二、linux的文件描述符
#文件描述符是什么?在 Linux、Unix 等操作系统里,用 0、1、2 分别代表标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr),主要和操作系统的设计理念、历史发展以及文件描述符机制相关。在早期的 Unix 系统开发中,为了高效地管理系统资源和简化编程接口,开发者引入了文件描述符这一概念。文件描述符是一个非负整数,用于标识一个进程打开的文件或其他输入输出资源。最初,开发者为标准输入、标准输出和标准错误输出分别分配了 0、1、2 这三个文件描述符,这种设计简单且高效,后续一直沿用下来。随着 Unix 系统的发展和普及,许多程序和脚本都依赖于 0、1、2 这样的文件描述符分配方式。为了保证向后兼容性,后续的类 Unix 系统(如 Linux)也遵循了这一约定。这样,早期编写的程序和脚本在新的系统中仍然可以正常运行,无需进行大规模的修改。在 Unix 哲学中,“一切皆文件”,无论是普通文件还是设备文件都可以通过文件描述符进行操作。标准输入、标准输出和标准错误输出也被视为特殊的文件,因此可以用文件描述符来标识。使用 0、1、2 这样的整数作为文件描述符,使得操作系统能够以统一的方式管理这些输入输出资源,简化了系统的设计和实现。


#输入和输出作用 在 Linux 系统中,输入和输出是程序与用户或其他程序进行交互的方式,通俗来讲,输入就像是给程序提供信息或指令,告诉程序要做什么。比如在命令行中输入命令,或者把文件内容作为输入提供给某个处理程序。输出则是程序执行后给出的结果或反馈,可能是在屏幕上显示的文本信息,也可能是生成的文件。 #输入和输出体验 1.cat命令示例 在默认情况下,标准输入关联着键盘设备。当你在命令行中执行程序时,若程序需要从标准输入获取数据,你就可以通过键盘输入相应内容。例如,执行 cat 命令时不指定文件名,cat 命令会等待从标准输入接收数据,你输入一行文本后按下回车键,cat 就会把这行文本原样输出。要是想结束输入,可按下 Ctrl + D 组合键正常退出,或者Ctrl + C强制退出。 所以cat能够查看文件的内容,可以理解为文件的内容作为输入传递给了cat,然后cat就把这些文本内容原样输出了。

2.grep命令示例 grep命令用于在文本中搜索匹配特定模式的行。当不指定输入文件时,它会从标准输入(文件描述符 0)读取内容。在不指定文件时,grep等待用户从键盘输入内容。输入完成后,按下 Ctrl + D 组合键结束输入,或者Ctrl + C强制退出。 可以看出来 我们自己手动输入其实和文件的输入是没有区别的。

总结:结合上面的图和实验可以理解到,其实像cat命令 就是一个program,作用就是接收到 什么输入,就给出 什么输出。