(전체/절대 경로가 아닌) 상대 경로, 즉 현재 경로 아래에 파일을 출력하는 프로그램을 작성한다고 가정해 보겠습니다.
그런 다음 이를 컴파일하고 실행 파일을 일부 디렉토리에 저장합니다 path1
.
이제 실행 파일을 실행하고 다른 dir 아래에 있습니다
path2
. 실행 파일path2
은path1
.실행 파일이 파일에 쓰지 않는 이유가 궁금합니다
path1
. 즉, "현재 경로"가path2
아닌 이유는 무엇입니까path1
?실행할 때 실행 파일이 에 저장된 파일을 열면 에서 실행 파일을 실행하고 있고 실행 파일이 에 저장되어 있는데도
path3
현재 경로가 되는 이유는 무엇입니까 ?path3
path2
path1
운영 체제는 프로세스가 실행되는 동안 프로세스의 현재 경로를 어떻게 할당하고 변경합니까?
답변1
질문 1: 프로그램이 설치된 디렉토리가 프로그램 실행시 프로세스의 초기 디렉토리가 아닌 이유는 무엇입니까?
사실 프로그램의 설치 경로는 중요하지 않으며, 중요한 것은 현재 프로그램의 경로입니다.아버지프로세스. 쉘에서 시작된 프로그램의 경우 상위 프로세스는 쉘 자체이므로 새 프로세스의 초기 현재 디렉토리는 쉘의 현재 디렉토리입니다.
질문 2:프로세스는 현재 디렉터리 외부에 파일을 어떻게 생성합니까?
파일 경로를 지정하는 방법에는 절대 경로와 상대 경로의 두 가지가 있습니다. 절대 경로는 /
파일 시스템의 루트( )부터 시작하여 슬래시("/")로 시작하여 해석됩니다. 상대 경로는 프로세스의 현재 디렉터리에서 해석됩니다. 따라서 /path2
과 이라는 두 개의 디렉토리가 있고 /path2/path3
현재 디렉토리가 인 프로세스가 있는 경우 path2
파일을 열 수 있습니다 path3/file
. 경로는 상대 경로이므로(슬래시로 시작하지 않음) 현재 디렉터리에서 계산됩니다 path2
. 마지막으로 새 파일의 전체 경로는 입니다 /path2/path3/file
. 따라서 특정 디렉터리에서 실행되는 프로세스는 해당 디렉터리 외부에 파일을 생성할 수 있습니다.
질문 3: 운영 체제는 프로세스가 실행되는 동안 프로세스의 현재 경로를 어떻게 할당하고 변경합니까?
프로세스는 시스템 호출을 통해 운영 체제에 현재 디렉터리를 변경하도록 요청할 수 있습니다 chdir(2)
(새 디렉터리 등에 대한 권한이 필요한 경우). 이는 다른 메커니즘이며 파일 열기와 관련이 없습니다. 파일 열기 open(2)
는 다른 시스템 호출(예: .