https://man7.org/linux/man-pages/man7/pty.7.html
「UNIX 98擬似端末」では動作すると言いますがptsname
(その後open
)、この関数はファイル記述子を受け入れます。そこに0(STDIN)と1(STDOUT)を入れようとしましたが、「デバイスに不適切なioctl」というエラーメッセージが表示され、失敗しました。 GNOME端末でプログラムを実行します。
私は他のxterm
プログラムを書いていません。非同期(非ブロック)非標準低レベルの入出力用のファイル記述子を持っているだけです。
答え1
まあ、私は自分で答えようとしました。
- 機能フィード、標準記述子を持つ実際のデバイスを
tty
見つける必要があります。isatty
0
1
2
- 実際のttyが見つかると、この
ttyname
関数は端末デバイスへのパスを提供します。 - それを開くと、
open
ファイル記述子が提供されます。
O_RDONLY
宣言(またはそのO_WRONLY
いずれか)とフラグO_NONBLOCK
によって課された非ブロック動作にもかかわらず、read
私のシステム(Debian 12)の関数は、端末デバイスがネイティブモードに切り替わった後でもブロックされます(およびtcgetattr
関数を使用)。 )。cfmakeraw
tcsetattr
ioctl
FIONREAD
非同期読み取りは、保留中/読み取り可能なバイトを返す+の助けを借りて実装されます。 (また、poll
関数を試しましたが、うまくいきますが、私にとってはオーバーヘッドのようです。)
これで、非同期書き込みを実装/テストする方法がわかりません。