次の簡単なプログラムを考えてみましょう。
#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.