C 如何从tty强制输入

C 如何从tty强制输入,c,input,tty,C,Input,Tty,我想写一个程序,只从tty读取用户输入,而不是重定向的标准输入管道,比如passwd和sshdo。有什么办法吗 非常感谢您应该尝试直接打开/dev/tty。这是我所知道的唯一可以确定的绕过stdin重定向的方法 /dev/tty通常是指向实际tty设备的符号链接,该设备可能是/dev/console或/dev/tty24或您想要的任何东西,具体取决于系统的设置方式。tty命令应该能够告诉您它是哪一个(用ls-al/dev/tty列出符号链接本身) 但只要您打开dev/tty进行输入,它就应该从您

我想写一个程序,只从tty读取用户输入,而不是重定向的标准输入管道,比如passwdsshdo。有什么办法吗


非常感谢

您应该尝试直接打开
/dev/tty
。这是我所知道的唯一可以确定的绕过
stdin
重定向的方法

/dev/tty
通常是指向实际tty设备的符号链接,该设备可能是
/dev/console
/dev/tty24
或您想要的任何东西,具体取决于系统的设置方式。
tty
命令应该能够告诉您它是哪一个(用
ls-al/dev/tty
列出符号链接本身)

但只要您打开
dev/tty
进行输入,它就应该从您的终端获得输入,而不是标准的输入流,因为标准的输入流可能已被重定向。

您可以将isatty(man 3 isatty)与fileno()结合使用:

#包括
int-isatty(int-fd);

/dev/tty实际上不是一个符号链接,但它是一个真正的设备文件,内核使用它来表示试图使用它的进程的控制终端。控制终端就是你想要的,比如密码和更少的按键。也许这是Linux的东西,@nategoose。我似乎记得它在一些unix中显示为“tty->ttyd9”(一个符号链接),实际上使用了一个讨厌的技巧,比如临时用真实文件替换/dev/tty,这样使用我建议的fopen(/dev/tty)方法的程序就会读取我的文件(为了自动化,当然,还需要根权限)。
   #include <unistd.h>

   int isatty(int fd);