어떤 경우인지는 잘 모르겠지만, 큰 이유가 없다면, 프로그램의 현재 디렉토리를 바꾸는 것은 바람직하지 않습니다. 왜냐하면, 사용자의 입장에서 혼동스러울 수 있을 뿐만 아니라, 특정 디렉토리에 강제적으로 위치해서, mount/umount가 불가능할 수 있는 상황이 발생할 수 있기 때문입니다. 몇 가지 예외 사항을 들면:
첫째, 디렉토리를 돌아다니며(traverse) find(1)와 같이 여러 파일에 대해 작업이 필요한 경우. 이 경우 적절하게 chdir(2)을 써서 현재 디렉토리를 바꾸며 작업하다가, 작업이 끝나면 반드시 원래의 위치로 복원시켜 주는 것이 바람직합니다.
둘째, daemon 형태로 돌아가는 서버 프로그램인 경우. 가능하면 시작 위치에 상관없이 현재 디렉토리를 루트 (/)로 바꾸어서, 파일 시스템의 mount/umount를 순조롭게 해 줍니다.
다른 경우는 지금 생각나지 않는군요. 꼭 필요한 상황이 아닐 경우, 현재 디렉토리를 바꾸는 것은 좋지 않을 수 있으니, 주의하기 바랍니다.
또한 직접 만들어 쓸 것이 아니라면, 현재 디렉토리를 얻기 위해 GNU glibc extension인 get_current_dir_name()을 쓰는 것도 좋습니다.
exec* 함수를 쓸 것이라면, fork(2)와 vfork(2), child signal 등에 대해서도 알아 두시는 게 도움이 될 것 같습니다.
man chdir워낙 쉬운 함수라 맨페이지만 보셔도
man chdir
워낙 쉬운 함수라 맨페이지만 보셔도
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
Re: 디렉토리 이동?
거짓말이 없다는 것은 현대성보다도 사상보다도
백배나 더 중요한 일이다.
답변 감사합니다.혹시 시스템 함수 말고 명령어를 실행할수 있는 함수
답변 감사합니다.
혹시 시스템 함수 말고 명령어를 실행할수 있는 함수 혹은 다른 방법이 있나요?
[quote="jelongdong2"]답변 감사합니다.혹시 시스템 함
man execl
내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.
execl 계열 함수 사용하기 전에 fork 먼저 :)
execl 계열 함수 사용하기 전에 fork 먼저 :)
---
http://coolengineer.com
어떤 경우인지는 잘 모르겠지만, 큰 이유가 없다면, 프로그램의 현재 디렉
어떤 경우인지는 잘 모르겠지만, 큰 이유가 없다면, 프로그램의 현재 디렉토리를 바꾸는 것은 바람직하지 않습니다. 왜냐하면, 사용자의 입장에서 혼동스러울 수 있을 뿐만 아니라, 특정 디렉토리에 강제적으로 위치해서, mount/umount가 불가능할 수 있는 상황이 발생할 수 있기 때문입니다. 몇 가지 예외 사항을 들면:
첫째, 디렉토리를 돌아다니며(traverse) find(1)와 같이 여러 파일에 대해 작업이 필요한 경우. 이 경우 적절하게 chdir(2)을 써서 현재 디렉토리를 바꾸며 작업하다가, 작업이 끝나면 반드시 원래의 위치로 복원시켜 주는 것이 바람직합니다.
둘째, daemon 형태로 돌아가는 서버 프로그램인 경우. 가능하면 시작 위치에 상관없이 현재 디렉토리를 루트 (/)로 바꾸어서, 파일 시스템의 mount/umount를 순조롭게 해 줍니다.
다른 경우는 지금 생각나지 않는군요. 꼭 필요한 상황이 아닐 경우, 현재 디렉토리를 바꾸는 것은 좋지 않을 수 있으니, 주의하기 바랍니다.
또한 직접 만들어 쓸 것이 아니라면, 현재 디렉토리를 얻기 위해 GNU glibc extension인 get_current_dir_name()을 쓰는 것도 좋습니다.
exec* 함수를 쓸 것이라면, fork(2)와 vfork(2), child signal 등에 대해서도 알아 두시는 게 도움이 될 것 같습니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
사족을 더 붙이자면, thread 프로그램에서는 process 전체에 영
사족을 더 붙이자면, thread 프로그램에서는 process 전체에 영향을 미치는 일이 되므로 더욱 하지 않아야합니다.
---
http://coolengineer.com
[quote="pynoos"]execl 계열 함수 사용하기 전에 fork
fork를 잊고있었군요 :roll:
내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.
Re: 디렉토리 이동?
그런데 cd 라던가 pushd, popd 같은 명령어들은 쉘 내장 명령어 입니다...
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
[quote] pid_t Pid = fork();
이런식으로 2가지 명령어를 쓰려니까 안됩니다.
단지 rm 명령어만 먹습니다.
ls 명령어도 먹게할려면 어떻게 해야하나요!
부모 프로세스에서 다시 fork 해야지요.작성했던 것을st
부모 프로세스에서 다시 fork 해야지요.
작성했던 것을
strace -f ./prog
로 따라가보세요.
---
http://coolengineer.com
[code:1] pid_t Pid = fork()
exec 를 한 순간 현재 프로세스는 새로 실행한 프로그램으로 바꿔치기 합니다.
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
댓글 달기