2010-05-05 67 views
1

我想編寫一個程序,只能從TTY讀取用戶輸入,而不是重定向標準輸入管道,像passwd文件SSH做。有什麼辦法嗎?如何強制輸入從TTY

非常感謝

回答

2

你應該嘗試直接打開/dev/tty。這是我確信你可以繞過stdin重定向的唯一途徑。

/dev/tty通常是一個符號鏈接到您的實際 tty設備,這可能是你想要/dev/console/dev/tty24或幾乎任何東西,這取決於你的系統可能會成立了神祕和奇妙的方式。 tty命令應該能夠告訴你它是哪一個(如將ls -al /dev/tty列出符號鏈接本身)。

但只要你打開dev/tty輸入,它應該從你的終端,而不是標準輸入流,這可能已被重定向輸入。

+1

的/ dev/tty的是不是一個真正的符號鏈接,但它是它的內核使用意味着一個真正的設備文件試圖使用它的過程的控制終端。控制終端是你想要的東西,比如密碼和更少的按鍵。 – nategoose 2010-05-05 18:21:16

+0

也許這是一件Linux事物,@ nategoose。我似乎記得它顯示爲「TTY - > ttyd9」在一些UNIX系統(符號鏈接),並確實用下流的手段像temorarily替換的/ dev/tty的一個真正的文件,以便使用則fopen程序(的/ dev/tty的)方法,我建議將讀取我的文件(用於自動化,當然,需要root權限)。 – paxdiablo 2010-05-05 18:37:09

1

您可以結合嘗試isatty(男子3 isatty)用的fileno():

#include <unistd.h> 

    int isatty(int fd);