讲解的太形象了!<br><br>在 2012年6月12日星期二,chenchacha <<a href="mailto:1241824064@qq.com">1241824064@qq.com</a>> 写道:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">于 2012年06月11日 18:47, 依云 写道:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Mon, Jun 11, 2012 at 05:44:14PM +0800, yeji wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
在学习linux的时候,我遇到以下几个问题不懂,<u></u>请大家指点迷津<br>
1、标准输入、输出缺省情况下对应键盘,显示器,<u></u>那么标准错误缺省情况下,错<br>
误信息是输出到什么地方?<br>
2、在默认的情况下,<u></u>unix为每个进程提供3个预定义的文件描述符,默认的文件描<br>
述符是0代表标准输入、1代表标准输出、2代表标准错误。那么 向语句<br>
calculate<br>
8>results还是标准输出吗?results是文件名。<u></u>如果不是的话,那么如何理解<br>
sort1>results是标准输出,这里也重定<br>
向了啊,不是缺省的显示屏,不是的原因<br>
是什么?如果是的话,那么如何理解1代表标准输出?<u></u>这里的标准输入与标准输<br>
出、标准错误与文件描述符有什么 联系?<br>
谢谢<br>
</blockquote>
<br>
你的邮件在我这里排版有点乱,不过我想我大约知道了你的问题。<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2、在默认的情况下,<u></u>unix为每个进程提供3个预定义的文件描述符,默认的文件描<br>
述符是0代表标准输入、1代表标准输出、2代表标准错误。那么 向语句<br>
</blockquote>
<br>
我不喜欢「代表」这个词。在这里,我更愿意使用「称为」。<u></u>而你举例中的文件描<br>
述符 8 是没有名字的。那个 shell 语法只是为 calculate 进程以写方式打开了<br>
一个文件描述符为 8 的文件而已。<br>
<br>
还有,我觉得 0-2 这三个文件描述符不是 Unix 为进程「提供」的,而是继承而<br>
来的(启动或者登录过程中某进程打开的)。<u></u>这三个文件描述符的功能也是约定的。<br>
</blockquote>
不知道我理解的对不对,unix系统下所谓的标准输入,<u></u>标准输出,标准错误,也就 是编程的时候用的0,1,2三个文件描述符,对应的是/<u></u>dev下的 stdin,stdout,stderr这三个文件。<br>
而显示器,键盘之类的东西算是输出设备和输入设备了。<br>
<br>
“标准XX”和“设备文件”是两码事,两者扯上关系,<u></u>是系统在后面“上下其手”,做了 些后台潜规则,牵红线之类的好事的。<br>
<br>
系统牵线指定”标准XX”,依据的是终端。<br>
<br>
比如说如果是电脑登陆,由于终端的输出是显示器,输入是键盘,<u></u>那么标准输出自 然”缺省“指到显示器,标准输入也”缺省“指到键盘;<u></u>但如果是串口或者以太网口登 陆,那这三个”标准“就应该被”缺省“给串口或者网口了。<br>
<br>
这个可以验证一下,我在桌面上打开一个终端窗口,用ls -l命令来查看三个标准文件:<br>
$ ls /dev/stdin -l<br>
lrwxrwxrwx. 1 root root 15 6月  12 2012 /dev/stdin -> /proc/self/fd/0<br>
$ ls /dev/stdout -l<br>
lrwxrwxrwx. 1 root root 15 6月  12 2012 /dev/stdout -> /proc/self/fd/1<br>
$ ls /dev/stderr -l<br>
lrwxrwxrwx. 1 root root 15 6月  12 2012 /dev/stderr -> /proc/self/fd/2<br>
可以看到是三个连接文件,对应/proc/self/<u></u>fd目录下的三个文件,然后再用ls -l 查看目录:<br>
$ ls /proc/self/fd/0 -l<br>
lrwx------. 1 chen chen 64 6月  12 01:32 /proc/self/fd/0 -> /dev/pts/1<br>
$ ls /proc/self/fd/1 -l<br>
lrwx------. 1 chen chen 64 6月  12 01:32 /proc/self/fd/1 -> /dev/pts/1<br>
$ ls /proc/self/fd/2 -l<br>
lrwx------. 1 chen chen 64 6月  12 01:32 /proc/self/fd/2 -> /dev/pts/1<br>
/dev/pts/1是对应我刚才建立的终端窗口,<u></u>可见这三位都被送到我在桌面上开的终 端窗口去了。然后这三娃该怎么分配,就看终端的了。<br>
<br>
<br>
<br>
-- <br>
ubuntu-zh mailing list<br>
<a>ubuntu-zh@lists.ubuntu.com</a><br>
<a href="https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh" target="_blank">https://lists.ubuntu.com/<u></u>mailman/listinfo/ubuntu-zh</a><br>
</blockquote>