Manpages

이 름

popen, pclose − 프 로 세 스 I/O

사 용 법

#include <stdio.h>

FILE *popen(const char *command, const char *type);

int pclose(FILE *stream);

설 명

popen() 함 수 는 pipe, fork에 의 해 생 성 된 프 로 세 스 를 열 고 shell을 기 동 한 다 . pipe는 단 방 향 으 로 정 의 되 었 기 때 문 에 , type 인 자 는 읽 기 -쓰 기 가 아 니 라 둘 중 하 나 만 지 정 한 다 .; 결 과 스 트 림 은 읽 기 -전 용 이 거 나 쓰 기 -전 용 이 다 .

command 인 자 는 shell 명 령 어 라 인 이 포 함 하 는 null로 종 료 된 문 자 열 에 대 한 포 인 터 이 다 . 이 명 령 어 는 −c 플 래 그 를 사 용 하 여 /bin/sh 에 전 달 된 다 .; 만 일 인 자 가 있 다 면 , 해 석 은 shell에 의 해 행 해 진 다 . mode 인 자 는 읽 기 를 위 한 ’r’이 나 쓰 기 를 위 한 ’w’중 하 나 인 null로 종 료 된 문 자 열 에 대 한 포 인 터 이 다 .

popen() 에 서 반 환 값 은 fclose()보 다 pclose() 로 종 료 되 어 야 하 는 보 통 표 준 I/O 스 트 림 이 다 . 그 런 스 트 림 에 쓰 는 것 은 명 령 어 의 표 준 입 력 에 쓰 는 것 과 같 다 ;명 령 어 의 표 준 출 력 은 만 일 이 것 이 명 령 어 자 체 에 의 해 수 정 되 지 않 았 다 면 popen()이 호 출 하 는 프 로 세 스 의 것 과 같 다 . 대 조 적 으 로 , ’’popened’’ 스 트 림 에 서 읽 기 는 명 령 어 의 표 준 출 력 을 읽 고 , 명 령 어 표 준 입 력 은 popen을 호 출 한 프 로 세 스 의 것 과 같 다 .

popen 스 트 림 은 기 본 적 으 로 완 전 버 퍼 된 다 는 점 에 주 의 해 라 .

pclose 함 수 는 종 료 되 는 관 련 프 로 세 스 를 기 다 리 며 wait4가 반 환 하 는 것 처 럼 명 령 어 의 종 료 상 태 를 반 환 한 다 .

반 환 값

popen 함 수 는 만 일 fork(2)pipe(2) 호 출 이 실 패 하 거 나 메 모 리 를 할 당 할 수 없 다 면 , NULL 을 반 환 한 다 .

pclose 함 수 는 만 일 wait4 가 에 러 를 반 환 하 거 나 몇 몇 다 른 에 러 가 발 견 되 면 −1을 리 턴 한 다 .

에 러

popen 함 수 는 만 일 메 모 리 할 당 이 실 패 한 다 면 , errno 를 설 정 하 지 않 는 다 . fork()pipe() 에 서 실 패 한 다 면 , errno 는 적 당 히 설 정 된 다 . 만 일 mode 인 자 가 무 효 하 고 , 이 조 건 이 발 견 된 다 면 , errnoEINVAL로 설 정 된 다 .

만 일 pclose() 가 자 식 상 태 를 얻 을 수 없 다 면 , errnoECHILD로 설 정 된 다 .

호 환

POSIX.2

버 그

읽 기 위 해 열 려 진 명 령 어 의 표 준 입 력 은 popen()을 호 출 하 는 프 로 세 스 가 가 지 고 있 는 offset을 공 유 하 기 때 문 에 , 만 일 원 래 프 로 세 스 가 버 퍼 된 읽 기 를 한 다 면 , 명 령 어 의 입 력 위 치 는 예 상 될 수 없 다 . 비 슷 하 게 쓰 기 위 해 열 려 진 명 령 어 에 서 의 출 력 은 원 래 프 로 세 스 의 것 과 섞 일 수 있 다 . 뒤 의 문 제 는 popen전 에 fflush(3)를 호 출 하 여 피 할 수 있 다 .

shell 실 행 시 실 패 는 명 령 어 실 행 의 shell실 패 나 명 령 어 의 종 료 와 구 별 되 어 야 한 다 . 유 일 한 힌 트 는 127 exit 상 태 이 다 .

역 사

popen()pclose() 함 수 는 Version 7 AT&T UNIX에 서 나 타 났 다 .

관 련 항 목

fork(2), sh(1), pipe(2), wait4(2), fflush(3), fclose(3), fopen(3), stdio(3), system(3).

역 자

정 강 훈 <skyeyes [AT] soback.net>, 2001년 4월 9일

COMMENTS