#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 でリンクする。
login_tty() 関数は、ファイルディスクリプター fd で参照される端末にログインする準備をする (fd は実際の端末デバイスでも、 openpty() で返される疑似端末のスレーブでもよい)。 具体的には、新しいセッションを作成し、 fd を呼び出し元のプロセスの制御端末とし、 呼び出し元の標準入力・標準出力・標準エラーのストリームを fd に設定した後、 fd をクローズする。
forkpty() 関数は openpty(), fork(2), login_tty() を組み合わせ、疑似端末を操作する新しいプロセスを生成する。疑似端末のマスタ側を参照するファイルディスクリプターは amaster で返される。 name が NULL でない場合には、スレーブのファイル名を返すのに name が指すバッファーが使用される。 termp と winp 引数は、NULL でなければ、 疑似端末のスレーブ側の端末属性とウインドウサイズを決定する。
ioctl(2) が fd を呼び出し元のプロセスの制御端末に設定するのに失敗した場合、 login_tty() は失敗する。
openpty() と fork(2) のどちらかが失敗した場合、 forkpty() は失敗する。
インターフェース | 属性 | 値 |
forkpty(), openpty() | Thread safety | MT-Safe locale |
login_tty() | Thread safety | MT-Unsafe race:ttyname |
2.0.92 より前のバージョンの glibc では、 openpty() は BSD 疑似端末ペアのファイルディスクリプターを返す。 2.0.92 以降の glibc では、 openpty() はまず Unix 98 疑似端末ペアをオープンしようとし、それに失敗した場合に BSD 疑似端末ペアのオープンへと移行する。
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]