쉘 명령을 인수로 사용하고 fork를 사용하여 명령을 실행하는 새 프로세스를 생성하는 함수를 작성하려고합니다. 또한 함수의 호출자가 FILE * 포인터를 사용하여 읽을 수 있도록 명령의 표준 출력을 리디렉션하려고합니다.쉘 명령 실행 및 C 프로그램에서 출력 읽기
static FILE* runCommand(char* command){
int pfd[2];
if(pipe(pfd)<0)
return NULL;
if(pid=fork()==0){ //child
close(pfd[0]);
dup2(pfd[1],1); //redirect output to pipe for writing
execlp(command,(char*)0);
}
close(pfd[1]);
//return a file pointer/descriptor here?
}
나는 명령의 출력을 읽는 데 사용할 수있는 파일 포인터를 반환하는 방법을 잘 모르겠습니다. 또한 쉘에서 명령을 실행하는 올바른 방법입니까?
ps. popen에 대해 읽었지 만 사용할 수없는 좋은 이유가 있으므로 직접이 기능을 구현해야합니다.
는FILE *
개체와 기존의 파일 기술자를 연결하는 당신에게
popen이 malloc을 호출하는 것 같습니다 (필자는 malloc을 오버라이드 (override) 한 원인을 볼 수 있습니다). 그것은 내 프로젝트를 복잡하게 만듭니다. 그래서 나는 popen을 부르지 않는 것을 좋아합니다. – SpotsWood