제가만든 프로그램에서 쉘스크립트를 실행시키고싶읍니다

jjjjrr의 이미지

안녕하세요
제가만든 프로그램에서 쉘스크립트를 실행시키고싶읍니다
test라는이름을 가진 스크립트인데여
아규멘트를 abcd 와 1234를 줘서 실행시키고싶읍니다
그러니까
.test abcd 1234
이런식의 명령을 내려야됩니다
위의명령을 popen()함수를 사용하려면 어떻게해야되나요
그러니까
popen("test" , "abcd 1234");
이런식으로 호출하면 같은결과가 얻어질까요
조언부탁드립니다

eminency의 이미지

popen은 프로세스를 fork한뒤 파이프로 연결하여서 파일오픈과 같은 형식으로 파이프를 이용해 읽거나 쓰는 함수입니다.

그리고 popen의 첫 번째 인자는 커맨드이고 두 번째 인자는 파일스트림 오픈시의 모드 설정과 같은 인자이므로,

  FILE *pf;

  pf = popen(". test abcd 1234","r");

위와 같이 한 후 fgets나 fread, fscanf등등으로 pf를 파일을 읽는 것과 동일한 방법으로 읽어서 처리하면 됩니다.

자세한 내용은 man 페이지를 참조하세요.

노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5

jjjjrr의 이미지

답변감사합니다
또하나 질문입니다
FILE *pf;

pf = popen(". test abcd 1234","r");
이렇게 실행했을경우
리턴은 언제하나요
스크립트가 완전실행하고나서 리턴하는건가요
스크립트가 길어서 시간이 걸리더라도
실행끝난후 리튼인가요
아님
스트립트는 쓰레드로 실행하고
막바로 리턴하는가여
또그리구여
위의 코드를 여러쓰레드에서 동시에 실행할경우
동기화를 시켜줘야될까요
그러니까
여러사용자가 동시에 서버에 접속해서
동시가 같은명령을 사용해도 될까요
조언부탁드립니다

shkwon81의 이미지

Quote:
리턴은 언제하나요
스크립트가 완전실행하고나서 리턴하는건가요
스크립트가 길어서 시간이 걸리더라도
실행끝난후 리튼인가요
아님
스트립트는 쓰레드로 실행하고
막바로 리턴하는가여

popen은 새로운 "프로세스"와의 pipe 스트림을 연 후에 곧바로 리턴합니다. 쓰레드가 아니라 "프로세스"라는 사실을 기억하세요.
물론, popen()으로 연 스트림은 pclose()로 닫아 주어야 하는데, 이 때 pclose() 호출은 popen()으로 생성된 자식 프로세스가 종료하여 종료 상태를 반환할 때까지 기다리도록 되어 있습니다.

Quote:
위의 코드를 여러쓰레드에서 동시에 실행할경우
동기화를 시켜줘야될까요

(일반적으로는) 특별한 동기화는 필요 없습니다.. 여러 쓰레드에서 수행한 popen 커맨드는 모두 독립적인 "프로세스"입니다!!!

santana의 이미지

다들 알고 계시겠지만....
스크립트명을 test라고 하시는것은 그다지 좋은 생각이 아닌것 같습니다.

man test

제발 좀 긍정적인 마음가짐으로...

jjjjrr의 이미지

답변감사합니다
또한번더질문입니다
FILE *pf;
pf = popen(". test abcd 1234","r");
이함수를 실행시키고
스크립트를 실행시켰을때
그스크립트의 실행결과를
체크해야되는데 어디서 체크해야될까요
위함수호출후 바로스크립트결과를 체크하면
안될것같은데여....
조언부탁드립니다

shkwon81의 이미지

Quote:
물론, popen()으로 연 스트림은 pclose()로 닫아 주어야 하는데, 이 때 pclose() 호출은 popen()으로 생성된 자식 프로세스가 종료하여 종료 상태를 반환할 때까지 기다리도록 되어 있습니다.

man pclose

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.