popen은 새로운 "프로세스"와의 pipe 스트림을 연 후에 곧바로 리턴합니다. 쓰레드가 아니라 "프로세스"라는 사실을 기억하세요.
물론, popen()으로 연 스트림은 pclose()로 닫아 주어야 하는데, 이 때 pclose() 호출은 popen()으로 생성된 자식 프로세스가 종료하여 종료 상태를 반환할 때까지 기다리도록 되어 있습니다.
Quote:
위의 코드를 여러쓰레드에서 동시에 실행할경우
동기화를 시켜줘야될까요
(일반적으로는) 특별한 동기화는 필요 없습니다.. 여러 쓰레드에서 수행한 popen 커맨드는 모두 독립적인 "프로세스"입니다!!!
popen은 프로세스를 fork한뒤 파이프로 연결하여서 파일오픈과 같은
popen은 프로세스를 fork한뒤 파이프로 연결하여서 파일오픈과 같은 형식으로 파이프를 이용해 읽거나 쓰는 함수입니다.
그리고 popen의 첫 번째 인자는 커맨드이고 두 번째 인자는 파일스트림 오픈시의 모드 설정과 같은 인자이므로,
위와 같이 한 후 fgets나 fread, fscanf등등으로 pf를 파일을 읽는 것과 동일한 방법으로 읽어서 처리하면 됩니다.
자세한 내용은 man 페이지를 참조하세요.
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
감사합니다 한번더부탁드립니다
답변감사합니다
또하나 질문입니다
FILE *pf;
pf = popen(". test abcd 1234","r");
이렇게 실행했을경우
리턴은 언제하나요
스크립트가 완전실행하고나서 리턴하는건가요
스크립트가 길어서 시간이 걸리더라도
실행끝난후 리튼인가요
아님
스트립트는 쓰레드로 실행하고
막바로 리턴하는가여
또그리구여
위의 코드를 여러쓰레드에서 동시에 실행할경우
동기화를 시켜줘야될까요
그러니까
여러사용자가 동시에 서버에 접속해서
동시가 같은명령을 사용해도 될까요
조언부탁드립니다
[quote]리턴은 언제하나요 스크립트가 완전실행하고나서 리턴하는건가
popen은 새로운 "프로세스"와의 pipe 스트림을 연 후에 곧바로 리턴합니다. 쓰레드가 아니라 "프로세스"라는 사실을 기억하세요.
물론, popen()으로 연 스트림은 pclose()로 닫아 주어야 하는데, 이 때 pclose() 호출은 popen()으로 생성된 자식 프로세스가 종료하여 종료 상태를 반환할 때까지 기다리도록 되어 있습니다.
(일반적으로는) 특별한 동기화는 필요 없습니다.. 여러 쓰레드에서 수행한 popen 커맨드는 모두 독립적인 "프로세스"입니다!!!
다들 알고 계시겠지만....스크립트명을 test라고 하시는것은 그다지
다들 알고 계시겠지만....
스크립트명을 test라고 하시는것은 그다지 좋은 생각이 아닌것 같습니다.
man test
제발 좀 긍정적인 마음가짐으로...
함수호출후 바로스크립트결과를 체크하면
답변감사합니다
또한번더질문입니다
FILE *pf;
pf = popen(". test abcd 1234","r");
이함수를 실행시키고
스크립트를 실행시켰을때
그스크립트의 실행결과를
체크해야되는데 어디서 체크해야될까요
위함수호출후 바로스크립트결과를 체크하면
안될것같은데여....
조언부탁드립니다
[quote]물론, popen()으로 연 스트림은 pclose()로 닫아
man pclose
댓글 달기