LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 828|回复: 3

为什么ttyname(2)的结果是/dev/pts/0 ?

[复制链接]
发表于 2004-1-20 14:50:45 | 显示全部楼层 |阅读模式

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. int main( void )
  5. {
  6.     if( isatty( 0 ) ) {
  7.        printf( "%s\n", ttyname( 1 ) );
  8.     } else {
  9.        printf( "\n" );
  10.     }
  11.     return EXIT_SUCCESS;
  12. }
  13. # ./a.out
  14. /dev/pts/0
  15. # ls -l /dev/pts/
  16. 总用量 0
  17. crw--w----    1 root     tty      136,   0 2004-01-20 15:01 0
  18. crw-------    1 root     tty      136,   1 2004-01-20 14:45 1
复制代码

1不是代表标准输出的吗?为什么结果是/dev/pts/0 ?
还有就是这里的文件描述符差了一个 2 ???没有标准错误输出的文件描述符?
请指教!!
:help :help
发表于 2004-1-20 18:09:48 | 显示全部楼层
不知道你是那里出了问题,我运行以后是/dev/pts/1
 楼主| 发表于 2004-1-20 18:35:52 | 显示全部楼层
刚才再试了一次,(不管这个程序是否已编译,再编译一次,防止记错),还是一样。。 上面得ttyname(2).和程序里的ttynamne(1)的差别我发现了。是我发贴是改为其它值试试的。。。

tttyname(1)-----》还是/dev/pts/0

不懂了。。
发表于 2004-1-22 22:58:50 | 显示全部楼层
1)
$ mount
/dev/md0 on / type ext3 (rw)
none on /proc type proc (rw)
usbdevfs on /proc/bus/usb type usbdevfs (rw)
/dev/md1 on /boot type ext3 (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
none on /dev/shm type tmpfs (rw)

其中/dev/pts是远程登陆(telnet,ssh等)后创建的控制台设备文件所在的目录。由于可能有好几千个用户登陆,所以/dev/pts其实是动态生成的,不象其他设备文件是构建系统时就已经产生的硬盘节点(如果未使用devfs)

2)
第一个用户登陆,console的设备文件为/dev/pts/0,第二个为/dev/pts/1,以此类推。这里的0、1、2、3不是具体的标准输入或输出,而是整个控制台。你可尝试 echo "aaaaaa" > /dev/pts0、1、2……。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表