2014-09-20 3 views
1

약간의 연구가 끝나면 cd 시스템 명령에 시스템의 구현 파일, 특히 /bin/이 없다는 것을 알게되었습니다. 클래스 프로젝트는 최근이 디렉토리에있는 구현 파일을 사용할 수있는 기본 셸 프로그램을 구현해야했습니다.프로세스의 현재 작업 디렉토리를 프로그래밍 방식으로 변경

따라서 내 프로그램은 cd이 존재하지 않으므로 디렉토리를 변경할 수 없으며 다른 쉘에서 내부적으로 구현해야합니다.

즉, 프로그램의 현재 작업 디렉토리를 변경하는 방법은 무엇입니까?

+7

[chdir] (http://linux.die.net/man/2/chdir) –

+0

@ChrisDodd : 답변을 작성해야합니다. – slebetman

+0

@DrewMcGowen : 중복 질문은 간접적으로 만 관련이 있습니다. 그 질문은 chdir에 대해 이미 알고 있지만 chdir에 대한 호출이 실패한 이유를 묻는 것입니다. – slebetman

답변

7

각 프로세스에는 "현재 디렉토리"라는 개념이 있습니다. 새로운 프로세스가 생성되면, 현재 디렉토리는 부모 프로세스의 현재 디렉토리입니다.

쉘은 다른 프로세스와 다르지 않으며,이 특정 프로세스가 명령을 입력하기를 기다리는 경우를 제외하고는 입력 된 명령을 새 프로세스로 실행합니다.

실제 "cd"명령이없는 이유는 이제 분명해질 것입니다. 하나 있다고 말해봐. 따라서 "cd"명령을 입력하면 쉘은 "cd"명령을 새 프로세스로 실행합니다.

새 프로세스가 현재 디렉토리를 변경하고 종료합니다.

그래서 무엇을 했습니까? 절대적으로 아무것도. 쉘의 현재 디렉토리가 변경되지 않았습니다. 이 가상의 경우에 "cd"프로세스가 수행하는 모든 작업은 현재 디렉토리 만 변경하고 그 밖의 작업은 수행하지 않습니다. 그런 다음 종료되고 모든 것이 원래의 방식으로 되돌아갑니다.

"cd"가 내장 명령입니다. 이 명령은 쉘이 직접 실행하는 몇 가지 명령 중 하나이며이 명령은 쉘의 현재 디렉토리를 변경합니다. 따라서이 쉘에서 시작된 모든 프로세스는 이제 새로운 현재 디렉토리를 갖게됩니다.

프로세스의 현재 디렉토리를 변경하는 시스템 호출은 chdir(2)입니다. C, Perl, Python과 거의 모든 다른 프로그래밍 언어는 프로세스의 현재 디렉토리를 변경하는 시스템 호출을 실행하는 chdir 또는 이와 유사한 함수가 있습니다.

관련 문제