OPENPTY
Section: Linux Programmer's Manual (3)
Updated: 2017-09-15
Index
JM Home Page
roff page
名前
openpty, login_tty, forkpty - 端末ユーティリティ関数
書式
#include <pty.h>
int openpty(int *amaster, int *aslave, char *name,
const struct termios *termp,
const struct winsize *winp);
pid_t forkpty(int *amaster, char *name,
const struct termios *termp,
const struct winsize *winp);
#include <utmp.h>
int login_tty(int fd);
-lutil でリンクする。
説明
openpty() 関数は、使用可能な疑似端末 (pseudoterminal) を見つけて、 マスタとスレーブのファイルディスクリプターを
amaster と aslave に入れて返す。 name が NULL でない場合、スレーブのファイル名が name
に返される。 termp が NULL でない場合、スレーブの端末パラメーターは termp の値に設定される。 winp が
NULL でない場合、スレーブのウインドウサイズは winp に設定される。
login_tty() 関数は、ファイルディスクリプター fd で参照される端末にログインする準備をする (fd
は実際の端末デバイスでも、 openpty() で返される疑似端末のスレーブでもよい)。 具体的には、新しいセッションを作成し、 fd
を呼び出し元のプロセスの制御端末とし、 呼び出し元の標準入力・標準出力・標準エラーのストリームを fd に設定した後、 fd
をクローズする。
forkpty() 関数は openpty(), fork(2), login_tty()
を組み合わせ、疑似端末を操作する新しいプロセスを生成する。疑似端末のマスタ側を参照するファイルディスクリプターは amaster で返される。
name が NULL でない場合には、スレーブのファイル名を返すのに name が指すバッファーが使用される。 termp と
winp 引数は、NULL でなければ、 疑似端末のスレーブ側の端末属性とウインドウサイズを決定する。
返り値
openpty(), login_tty(), forkpty() の呼び出しが成功しなかった場合、 -1 が返されて、
errno はエラーを示す値に設定される。 成功した場合、 openpty(), login_tty() および
forkpty() の子プロセスは 0 を返し、 forkpty() の親プロセスは子プロセスのプロセス ID を返す。
エラー
以下の場合に openpty() は失敗する:
- ENOENT
-
使用可能な端末がない。
ioctl(2) が fd を呼び出し元のプロセスの制御端末に設定するのに失敗した場合、 login_tty() は失敗する。
openpty() と fork(2) のどちらかが失敗した場合、 forkpty() は失敗する。
属性
この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース | 属性 | 値
|
forkpty(),
openpty()
| Thread safety | MT-Safe locale
|
login_tty()
| Thread safety | MT-Unsafe race:ttyname
|
準拠
これらは BSD の関数であり、 glibc2 に存在する。 POSIX での標準化はされていない。
注意
glibc 2.8 で、 openpty() と forkpty() の構造体へのポインターの引数に const
修飾子が追加された。
2.0.92 より前のバージョンの glibc では、 openpty() は BSD 疑似端末ペアのファイルディスクリプターを返す。
2.0.92 以降の glibc では、 openpty() はまず Unix 98 疑似端末ペアをオープンしようとし、それに失敗した場合に
BSD 疑似端末ペアのオープンへと移行する。
バグ
誰も name に対してどのくらい大きさを予約しておけばいいか分からない。 したがって、NULL でない name を引数として
openpty() や forkpty() を呼び出すのは安全であるとは言えない。
関連項目
fork(2), ttyname(3), pty(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/ に書かれている。
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 属性
-
- 準拠
-
- 注意
-
- バグ
-
- 関連項目
-
- この文書について
-
This document was created by
man2html,
using the manual pages.
Time: 03:33:32 GMT, December 05, 2022