于 2012年06月11日 18:47, 依云 写道:
On Mon, Jun 11, 2012 at 05:44:14PM +0800, yeji wrote:
在学习linux的时候,我遇到以下几个问题不懂,请大家指点迷津
1、标准输入、输出缺省情况下对应键盘,显示器,那么标准错误缺省情况下,错
误信息是输出到什么地方?
2、在默认的情况下,unix为每个进程提供3个预定义的文件描述符,默认的文件描
述符是0代表标准输入、1代表标准输出、2代表标准错误。那么 向语句
calculate
8>results还是标准输出吗?results是文件名。如果不是的话,那么如何理解
sort1>results是标准输出,这里也重定
向了啊,不是缺省的显示屏,不是的原因
是什么?如果是的话,那么如何理解1代表标准输出?这里的标准输入与标准输
出、标准错误与文件描述符有什么 联系?
谢谢

你的邮件在我这里排版有点乱,不过我想我大约知道了你的问题。

2、在默认的情况下,unix为每个进程提供3个预定义的文件描述符,默认的文件描
述符是0代表标准输入、1代表标准输出、2代表标准错误。那么 向语句

我不喜欢「代表」这个词。在这里,我更愿意使用「称为」。而你举例中的文件描
述符 8 是没有名字的。那个 shell 语法只是为 calculate 进程以写方式打开了
一个文件描述符为 8 的文件而已。

还有,我觉得 0-2 这三个文件描述符不是 Unix 为进程「提供」的,而是继承而
来的(启动或者登录过程中某进程打开的)。这三个文件描述符的功能也是约定的。
不知道我理解的对不对,unix系统下所谓的标准输入,标准输出,标准错误,也就 是编程的时候用的0,1,2三个文件描述符,对应的是/dev下的 stdin,stdout,stderr这三个文件。
而显示器,键盘之类的东西算是输出设备和输入设备了。

“标准XX”和“设备文件”是两码事,两者扯上关系,是系统在后面“上下其手”,做了 些后台潜规则,牵红线之类的好事的。

系统牵线指定”标准XX”,依据的是终端。

比如说如果是电脑登陆,由于终端的输出是显示器,输入是键盘,那么标准输出自 然”缺省“指到显示器,标准输入也”缺省“指到键盘;但如果是串口或者以太网口登 陆,那这三个”标准“就应该被”缺省“给串口或者网口了。

这个可以验证一下,我在桌面上打开一个终端窗口,用ls -l命令来查看三个标准文件:
$ ls /dev/stdin -l
lrwxrwxrwx. 1 root root 15 6月  12 2012 /dev/stdin -> /proc/self/fd/0
$ ls /dev/stdout -l
lrwxrwxrwx. 1 root root 15 6月  12 2012 /dev/stdout -> /proc/self/fd/1
$ ls /dev/stderr -l
lrwxrwxrwx. 1 root root 15 6月  12 2012 /dev/stderr -> /proc/self/fd/2
可以看到是三个连接文件,对应/proc/self/fd目录下的三个文件,然后再用ls -l 查看目录:
$ ls /proc/self/fd/0 -l
lrwx------. 1 chen chen 64 6月  12 01:32 /proc/self/fd/0 -> /dev/pts/1
$ ls /proc/self/fd/1 -l
lrwx------. 1 chen chen 64 6月  12 01:32 /proc/self/fd/1 -> /dev/pts/1
$ ls /proc/self/fd/2 -l
lrwx------. 1 chen chen 64 6月  12 01:32 /proc/self/fd/2 -> /dev/pts/1
/dev/pts/1是对应我刚才建立的终端窗口,可见这三位都被送到我在桌面上开的终 端窗口去了。然后这三娃该怎么分配,就看终端的了。



--
ubuntu-zh mailing list
ubuntu-zh@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh

回复