スレーブエンドが使用された後(open()
、read()
、write()
、close()
)、マスターのread()
は終了しますEIOエラーで戻ります。しかし、マスターfdを中断することなく、スレーブエンドを複数回open()
/close()
できると期待していました。
スレーブのclose()
の後で両端を有効に保つことは可能ですか?スレーブ側が閉じているときに「マスター」プログラムを実行し続けるにはどうすればよいですか? grantpt(); unlockpt(); ptsname();
シーケンス全体に再実行する必要がありますか?
短い:いいえ
長い:疑似端末スレーブ接続は、パイプのように接続の一端です。どちらも、カーネルを介してユーザープロセス間でデータをやり取りする方法です。
一方の端を閉じると、接続が失われます。 POSIXのptsname
の説明は次のように述べています。
失敗すると、
ptsname()
はnullポインタを返します。これは、fildesが無効なファイル記述子である場合、またはスレーブデバイス名がに存在しない場合に発生する可能性がありますファイルシステム。
ファイル記述子を閉じると、それは無効になります。
接続を再利用する場合は、開いているスレーブファイル記述子を新しく作成されたプロセスに渡すなどの回避策を実行できます。たとえば、スレーブファイル記述子を管理するために作成するサーバーアプリケーションからです。
参考文献:
close
-ファイル記述子を閉じる (POSIX)grantpt
-スレーブ疑似端末デバイスへのアクセスを許可します (POSIX)pipe
-プロセス間チャネルを作成します (POSIX)ptsname
-スレーブ疑似端末デバイスの名前を取得します (POSIX)unlockpt
-疑似端末のマスター/スレーブペアのロックを解除します (POSIX)