当前位置: 首页 > news >正文

漫谈由标准输入\输出\错误输出引发的思考

标准输入|输出|错误输出

Unix\Linux体系中,一个进程通常自带有标准输入、标准输出、标准错误输出等三个文件描述符。

如果从对称的观点来看,它确实长的有点奇怪,但它背后隐藏了什么样的知识和道理呢?

从图灵机模型谈起

以前谈到现在计算机背后的理论结构是图灵机,而图灵机模型仅需要左右两边的纸带,其实可以直接对应输入和输出。

那么多出来的标准错误输出是做什么的呢?

从程序的运行期输出结构谈起

我们知道,一个程序在运行期不携带日志系统通常是无法想象的,但是,一般程序又有自己的输出数据,而日志信息是明显有区别于这些输出协议数据。

这个在Unix\Linux体系中典型程序ssh中,明显区分了标准错误输出和标准输出的不同,以利于运行期信息和数据的分别输出,见ssh的scp模式

# 甚至可以日通过管道组合命令,避免scp过程中间文件的形成
ssh user@remotehost 'cat > remotefile' < localfile
ssh user@remotehost 'cat remotefile' > localfile

另外,特别在Shell编程中,经常通过管道或者IO重定向组合拼接命令。如果命令运行过程中,出现某些提示或错误信息,可以能够标准错误输出对应的控制台或终端,及时展现将是非常方便的。

它山之石

通过阅读一些网络E文,感觉Unix\Linux体系特别地具有标准输出错误文件描述符,可能来自传统实践,和shell编程上的便利。

我们通常也可以看到,如果程序的标准输出也是日志信息的情况下,在日志收集的时间,采用1>log.txt 2>&1 or &>log.txt的命令语法,将标准输出和错误输出都指向相同的目的。


谈谈普适图灵机

在一系列图灵机中,有一类的图灵机具有普适的特点,我们称其为普适图灵机

这类图灵机的核心就是可以将其它图灵机的控制转移函数作为自己的输入,然后再去模拟那个图灵机的行为。

如果从学习的观点来看,这其实就相当于学习过程,增强了个人能力,所以,才能普适。

如果从递归的观点来看,这其实就相当于无穷套娃的能力。需要指出的是,在可计算性理论模型上,图灵机理论与递归理论被认为是等价的计算模型。

不严格地说明,普适图灵机正是展现了递归特点,图灵机的图灵机。

特别思考

可计算模型界定的问题是什么是可计算,和什么是不可计算。

可计算模型中计算的涵义,与我们通常认为的计算有细微的区分,但都包括我们普通意义上的计算。

可认为可计算模型中的计算,是计算的尽头;它之外是不可计算!


某些特殊命令

某些特殊命令,不单单从命令参数接受参数,也可以从标准输入接受参数,但,例如,catmd5sum只能从标准输入传入字符串参数,则需要here documenthere string技术。

cat << _EOF_
<html>
...
</html>
_EOF_cat <<< 'Hello world'
md5sum <<< 'aaa'

对比来看,tar命令明显地区分了标准输入参数和标准输出参数时的涵义。特别地,tar命令通过’-'符号来约定指明。

  • 可以看到’-'符号并不专门指代标准输入或标准输出,而是命令的一种处理约定

If you use ‘-’ as an archive-name, tar reads the archive from standard input (when listing or extracting files),
or writes it to standard output (when creating an archive).
If you use ‘-’ as an archive-name when modifying an archive, tar reads the original archive from its standard input and writes the entire new archive to its standard output.

参考

  • Tar对于’-'符号作为标准输入和输出的约定处理

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 老挝旅游如何解决沟通问题?《老挝语翻译通》app支持语音识别翻译功能,能有效解决语言不同的痛点
  • 在Ubuntu 16.04上安装Anaconda Python发行版的方法
  • Java:小数操作
  • 几乎跪着读完这本Transformer经典神书,震撼到爆!!
  • 最优化理论与自动驾驶(十一):基于iLQR的自动驾驶轨迹跟踪算法(c++和python版本)
  • Excel数据检视——对角线连续数据连线
  • 第三篇 第17章 工程计量与支付
  • 2025秋招LLM大模型多模态面试题(八)- langchain完整面试题
  • Rust GUI框架 tauri V2 项目创建
  • Java基础——字节流和字符流
  • 韦唯出席平遥国际电影展开幕式 中英文歌曲连唱尽显国际范
  • 国内可以使用 ChatGPT 吗?为什么? ChatGPT镜像集合
  • 一步一步优化一套生成式语言模型系统
  • 在线PDF转图片怎么转?4种简单转换的方法分享
  • ATTCK实战系列-Vulnstack靶场内网域渗透(二)
  • Google 是如何开发 Web 框架的
  • Android系统模拟器绘制实现概述
  • Apache Spark Streaming 使用实例
  • Java反射-动态类加载和重新加载
  • Mocha测试初探
  • NSTimer学习笔记
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 分布式事物理论与实践
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 微信小程序开发问题汇总
  • 你对linux中grep命令知道多少?
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • $NOIp2018$劝退记
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (8)STL算法之替换
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (动态规划)5. 最长回文子串 java解决
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (十五)、把自己的镜像推送到 DockerHub
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .ai域名是什么后缀?
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .Net 路由处理厉害了
  • .NET企业级应用架构设计系列之结尾篇
  • .NET性能优化(文摘)
  • /3GB和/USERVA开关
  • /tmp目录下出现system-private文件夹解决方法
  • @private @protected @public
  • @Repository 注解
  • @RequestMapping用法详解
  • [20180129]bash显示path环境变量.txt
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [android] 手机卫士黑名单功能(ListView优化)
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [DAX] MAX函数 | MAXX函数
  • [Go WebSocket] 多房间的聊天室(三)自动清理无人房间