passwdやsshのようにリダイレクトされた stdin パイプではなく、tty からのみユーザー入力を読み取るプログラムを作成したいと考えています。アプローチはありますか?
どうもありがとう
/dev/tty
直接開いてみてください。stdin
それが、リダイレクトをバイパスできることを確実に知っている唯一の方法です。
/dev/tty
は通常、実際のtty デバイスへのシンボリック リンクです。これは、システムの奇妙で素晴らしい設定方法に応じて、必要に応じて、/dev/console
または/dev/tty24
ほとんど何でもかまいません。コマンドは、tty
それがどれであるかを伝えることができるはずです(シンボリックリンク自体を でリストしますls -al /dev/tty
)。
ただし、入力用に開いている限り、dev/tty
リダイレクトされた可能性のある標準入力ストリームではなく、端末から入力を取得する必要があります。
isatty(man 3 isatty) を fileno() と組み合わせて試すことができます。
#include <unistd.h>
int isatty(int fd);