最初のプロセスで/dev/ttyを開くと、「No such device or address」が表示されるのはなぜですか?

最初のプロセスで/dev/ttyを開くと、「No such device or address」が表示されるのはなぜですか?

次の簡単なプログラムを考えてみましょう。

#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

これをどのように説明しますか?

答え1

/dev/ttyプロセス制御端末への参照です。ただし、制御端末を持つには、実際の端末を開いてプロセスに割り当てる必要があります。

/dev/tty を開く代わりに、/dev/tty0、/dev/console、または /dev/tty1 を開く必要があります。

プロセスに制御端末がなく、tty または pty を開くと、その tty を制御端末として使用する他の人がいない場合、そのプロセスにその tty が制御端末として割り当てられます。条件が正しい場合は、ttyを開き、IOCTLを使用して制御端末として指定することもできます。

ただし、/dev/ttyは実際のttyではないため、これらの条件は適用されません。

答え2

@user110489の答えが私にとって効果的でした。

あなたがしたいこと/dev/ttyはに変更することです/dev/console

私のシステム構成:

OS - windows 10
IDE - VSCode
Error arrise in - husky hooks.

関連情報