kazmax - Linux で自宅サーバー

openpty - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. エラー
  6. 注意
  7. 準拠
  8. バグ
  9. 関連項目

名前

openpty, login_tty, forkpty - 端末 (tty) ユーティリティ関数

書式

#include <pty.h> /* openpty と forkpty 用 */
#include <utmp.h> /* login_tty 用 */
int openpty(int * amaster , int * aslave , char * name , struct termios * termp , struct winsize * winp );
int login_tty(int fd );
pid_t forkpty(int * amaster , char * name , struct termios * termp , struct winsize * winp );
-lutil でリンクする。

説明

openpty ()関数は、使用可能な疑似端末 (pseudo-terminal) を見つけて、 マスタとスレーブのファイル・ディスクリプタを amasteraslave に入れて返す。 name が NULL でない場合、スレーブのファイル名が name に返される。 termp が NULL でない場合、スレーブの端末パラメータは termp の値に設定される。 winp が NULL でない場合、スレーブのウインドウサイズは winp に設定される。
login_tty ()関数は、端末 fd にログインする準備をする ( fd は実際の端末デバイスでも、 openpty ()で返される疑似端末のスレーブでもよい)。 具体的には、新しいセッションを作成し、 fd をカレント・プロセスの制御端末とし、 カレント・プロセスの標準入力・標準出力・標準エラーのストリームを fd に設定した後、 fd をクローズする。
forkpty ()関数は openpty (), fork (), login_tty ()を組み合わせ、疑似端末を操作する新しいプロセスを生成する。 疑似端末のマスタ側のファイル・ディスクリプタは amaster に返され、 name が NULL でない場合には、スレーブのファイル名が name に返される。 termpwinp パラメータは、NULL でなければ、 疑似端末のスレーブ側の端末属性とウインドウサイズを決定する。

返り値

openpty (), login_tty (), forkpty ()の呼び出しが成功しなかった場合、 -1 が返されて、 errno はエラーを示す値に設定される。 成功した場合、 openpty (), login_tty ()および forkpty ()の子プロセスは 0 を返し、 forkpty ()の親プロセスは子プロセスのプロセス ID を返す。

エラー

以下の場合に openpty ()は失敗する:

ENOENT
使用可能な端末がない。

ioctl ()が fd をカレントプロセスの制御端末に設定するのに失敗した場合、 login_pty ()は失敗する。

openpty ()または fork ()のどちらかが失敗した場合、 forkpty ()は失敗する。

注意

これらの関数は libutil に含まれている。したがって、コンパイル時の オプションに -lutil を加える必要がある。
2.0.92 より前のバージョンの glibc では、 openpty ()は BSD 疑似端末ペアのファイル・ディスクリプタを返す。 2.0.92 以降の glibc では、 openpty ()はまず Unix 98 疑似端末ペアをオープンしようとし、それに失敗した場合に BSD 疑似端末ペアのオープンへと移行する。

準拠

これらは BSD の関数であり、libc5 と glibc2 に存在する。

バグ

誰も name に対してどのくらい大きさを予約しておけばいいか分からない。 したがって、NULL でない name を引き数として openpty ()や forkpty ()を呼び出すのは安全であるとは言えない。

関連項目