PTY(3)

명칭
openpty, forkpty - 유사 단말을 입수하는 보조 함수

프로그램 라이브러리
libutil

서식
<sys/types.h> <sys/ioctl.h> <termios.h> <libutil.h> int openpty(int *amaster, int *aslave, char *name, struct termios *termp, struct winsize *winp) int forkpty(int *amaster, char *name, struct termios *termp, struct winsize *winp)

해설
openpty() 함수는, 다음에 사용할 수 있는 유사 단말을 시스템으로부터 입수하려고 합니다 ( pty(4) 참조). 유사 단말을 문제 없게 찾아내면(자), 슬레이브 디바이스의 소유권을 현행 프로세스의 실제의 UID 에, 그룹 멤버쉽을 그룹 “tty” 에 (이러한 그룹이 시스템에 존재하는 경우), 소유자의 읽고 쓰기권과 그룹의 기록권을 변경해, revoke(2) (을)를 호출해 라인의 현재의 사용을 무효로 하려고 합니다.

인수 name 하지만 NULL (이)가 아닌 경우, openpty() (은)는 슬레이브 pty 의 패스명을 이 area에 카피합니다. 이 배열로 필요한 스페이스는, 호출측에서 할당합니다.

인수 termp 인가 winp 하지만 NULL (이)가 아닌 경우, openpty() (은)는, 이러한 인수가 가리키는 구조체의 termios 설정과 윈도우 사이즈 설정을 초기화합니다.

돌아오는 경우는, pty 의 마스터 사이드와 슬레이브 사이드의 오픈 파일 기술자가, amaster (와)과 aslave 하지만 가리키는 장소에 되돌려집니다.

forkpty() (은)는 최초로 openpty() (을)를 호출해, 다음에 사용할 수 있는 유사 단말을 시스템으로부터 입수합니다. 문제가 없는 경우는, 새로운 프로세스가 분기 됩니다. child process에서는, pty 의 마스터 사이드의 기술자를 닫아 슬레이브 pty 로 login_tty(3) (을)를 호출합니다. parent process에서는, pty 의 슬레이브 사이드의 기술자를 닫습니다. 인수 amaster, name, termp 그리고 winp (은)는, openpty() 의 인수와 같은 기능을 합니다.

반환값
openpty() (은)는, 문제가 없으면 0 을 되돌려, 에러가 발생하면(자) -1 를 되돌립니다.

forkpty() (은)는, 에러가 발생하면(자) -1 를 되돌려, 슬레이브 프로세스에 0, parent process에 슬레이브 프로세스의 프로세스 ID 를 되돌립니다.

에러
에러가 발생했을 경우, openpty() (은)는 글로벌 변수 errno (을)를 ENOENT (으)로 설정합니다.

forkpty() (은)는, fork(2) 그리고 설명되어 있도록(듯이), errno (을)를 설정하는 일이 있습니다.

관련 항목
chmod(2), chown(2), fork(2), getuid(2), open(2), revoke(2), login_tty(3), pty(4), termios(4), group(5)

버그
호출 프로세스에 슈퍼 유저의 유효한 UID 가 없으면, 모든 액션은 실행할 수 없습니다. pty 를 할당할 수 있는 한 ( forkpty() 의 경우는 새로운 프로세스를 작성할 수 있는 한), 설명한 스텝을 openpty() 인가 forkpty() 하지만 계속되지 않아도 통지는 되지 않습니다.