Tty
為什麼在第一個程序中打開 /dev/tty 時“沒有這樣的設備或地址”?
給定一個簡單的程序,如下:
#include <stdio.h> #include <fcntl.h> #include <unistd.h> int main(int argc, char **argv) { int fd = -1; if (access("/dev/tty", F_OK) == 0) { fd = open("/dev/tty", O_RDWR); if (fd == -1) perror("open() :"); } return 0; }
編譯並使其成為init(核心呼叫的第一個程序),然後重新啟動,但它會得到結果:
open() :No such device or address
這要怎麼解釋?
/dev/tty
是對程序控制終端的引用。但是為了讓它有一個控制終端,一個真實的終端必須打開並分配給程序。也許您應該打開 /dev/tty0 或 /dev/console 或 /dev/tty1 而不是打開 /dev/tty
如果一個程序沒有控制終端,並且它打開了一個 tty 或 pty,如果沒有其他東西已經將該 tty 用作控制終端,那麼該程序將被分配該 tty 作為控制終端。如果條件正確,也可以打開一個 tty 並將其分配為具有 IOCTL 的控制終端。
但是 /dev/tty 不是真正的 tty,因此這些條件不適用於它。