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

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

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.

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值