日期:2014-05-16  浏览次数:20768 次

请大家帮我理解/dev/console和/dev/tty这两个文件的区别
一直不是很明白这两个文件的区别,我的理解是:
(1)/dev/console是系统控制终端,系统的错误信息什么的都输出到这里。
(2)/dev/tty(n或者Sn)是进程控制台,如果在进程里打开一个这样的文件且该文件不是其他进程的控制终端时,那么该文件就是这个进程的控制终端。那么我们进程printf一个数据就是输出到这里的还是fd=1的标准输出文件?
(3)进程在打开串口时为什么用O_NOCTTY?标志位?

------解决方案--------------------
1. 正确
2. 基本正确.
如果打开的文件是终端设备,在4.4 BSD中并不会把此文件设置设置为控制终端,其它的系统,如果没有设置O_NOCTTY,很可能会设置为控制终端,进程printf一个数据就是输出到这里。
3. 所以如果进程在打开串口时,需要O_NOCTTY标志位,否则有可能把串口设置为控制终端。
------解决方案--------------------
在本机上,用户可以使用alt-f1~fn切换控制台,看起来感觉存在多个屏幕,这种虚拟控制台对应tty1~n

但实际上机器只有一个屏幕,也就是我们看到的这个屏幕,对应console。

可以理解为console指向激活的那个tty(详细来说不是,tty0才是激活的那个tty,准确地说是激活的那个tty才将输出显示到console)

历史上,console指主机本身的屏幕键盘,而tty指用电缆链接的其它位置的控制台(仅包含屏幕和键盘)
------解决方案--------------------
1. 正确
2. 正确
3. 驱动程序用.
------解决方案--------------------
我在FreeBSD5.3没有问题哦!
可以把信息上输出到相应得tty上。
只是这句:
write(fd, "hello tty2\n ", 10);
应该改为:
write(fd, "hello tty2\n ", 11);
------解决方案--------------------
To: ceasar1134()
刚才找机器试了,成功了。
过程:
Ctrl+Alt+f1下用root登陆写的这个程序并编译执行。
使用Ctrl+Alt+f2(不是F3)查看。