system() 사용시, 자식 프로세스가 부모 프로세스의 디렉토리 바꿀 수 있을까요?

cabjaewon의 이미지

unix 시스템 명령어가 저장된 파일에서 명령어 문자열을 한 줄씩 읽어서 수행하는 프로그램을 작성하고자 합니다.

<파일의 내용>------------------------------------------------

mkdir Tempdir

chdir Tempdir

touch tempfile

cp tempfile tempfile2

----------------------------------------------------------------------

제가 작성한 프로그램은 fgets() 을 이용하여 위 파일에서 한 줄씩 문자열을 읽고, 각각을 system() 이용하여 수행하게 됩니다. 다음과 같은 코드를 작성했습니다.

system("mkdir Tempdir");

system("chdir Tempdir");

system("touch tempfile");

system("cp tempfile tempfile2");

즉, Tempdir 이라는 디렉토리를 만들고, 해당 디렉토리로 작업 디렉토리를 바꾼 후에 tempfile 이라는 Tempdir 디렉토리 내에 생성하고 tempfile2 라는 tempfile 파일의 복제본을 역시 Tempdir 내에 생성하게 되는 겁니다.

그런데, 프로그램을 짜서 수행을 해보니.. 프로그램이 한 줄씩 읽어서 해당 명령어를 수행을 하긴 했는데, 각 명령어를 따로따로 처리했습니다. 그 결과, Tempdir 이 생성되고, 프로그램 종료시 Tempdir 내가 아닌 프로그램과의 실행파일과 같은 디렉토리( . )에 tempfile 과 tempfile2 가 생성돼 있었습니다.

즉, 저는 프로그램이 일단 Tempdir 을 만든후, 프로그램이 Tempdir 로 이동해 그 안에서 파일들을 만들고자 의도했는데, 프로그램은 위 네 가지 명령을 따로따로 수행해 일단 프로그램의 실행파일과 같은 디렉토리에 Tempdir을 만들고, Tempdir 디렉토리로 작업 디렉토리를 바꿨다가, 다시 프로그램 실행파일이 있는 상위 디렉토리로 이동한 후, tempfile 파일을 생성하고, tempfile 의 복제본 tempfile2를 프로그램 실행파일과 같은 디렉토리에 생성한 것입니다.

저는 위 네 가지 명령이 연관성을 가지고 순차적으로 수행되기를 원합니다.

바로 chdir() 을 호출하는 것은 제가 원하는 게 아닙니다..

어떻게 해야 될지 방법좀 가르켜 주세요..

기분 좋은 하루들 보내십쇼..

cinsk의 이미지

당연히, 부모 process와 자식 process가 갖는 "현재 디렉토리"는 다릅니다. IPC(inter-process communication) 등을 써서 부모 process의 "현재 디렉토리"를 바꿀 수도 있겠지만, 왜 그런 프로그램을 개발하려 하는지 궁금하군요. 만약 명령어가 저장된 파일 이름이 a.script라면 단순히

system("/bin/sh a.script");

로 끝날 수 있는 문제인 것 같은데요. :)

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/

cabjaewon의 이미지

답을 얻은 것 같습니다.^^
그런 프로그램을 개발하려는 이유는... 그냥요...^^;;;
기분 좋은 하루 되세요..^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.