Tty

為什麼在第一個程序中打開 /dev/tty 時“沒有這樣的設備或地址”?

  • May 26, 2022

給定一個簡單的程序,如下:

#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,因此這些條件不適用於它。

引用自:https://unix.stackexchange.com/questions/692257