2011-11-08 6 views
0

나는 c로 작성된 작은 유닉스 셸을 프로그래밍하고있다. 지금은 기본 명령 만 수행하기를 원합니다. 예 : ls, pwd, chC에서 홈 디렉토리와 경로 디렉토리를 설정하는 방법은 무엇입니까?

내 문제는 어떻게 홈 디렉토리와 경로 디렉토리를 설정합니까? 텍스트 파일에서 구성을 읽으므로 언제든지 쉽게 변경할 수 있습니다.

저는 execv()를 사용하여 ls와 같은 유닉스 함수를 호출 할 것입니다. 예를 들어, PATH를 들어 내 쉘은 실행 프로그램 를 검색하는 데 사용해야 할 디렉토리를 결정해야 할 때 사용자 유형 명령

감사

+4

설정하려는 내용을 더 명확하게 나타낼 수 있습니까? ** 당신은 ** "홈 디렉토리"가 무엇을 의미합니까? ** 당신은 ** "경로 디렉토리"란 무엇을 의미합니까? 전자는 공통의 의미를 가지며, 설정 파일'/ etc/passwd'에서 설정되고,'getpwnam()'과 같은 루틴에 의해 읽혀집니다. 후자는 내가 알고있는 일반적인 의미가 없다. –

답변

4

이들은 모두 사용자가 조작하는 환경 변수입니다. 지. setenv(3) (자세한 내용은 man 3 setenv을 실행하십시오.) 변수는 HOMEPATH입니다. man 7 environ도 참조하십시오. 설정/환경 변수를 변경하는 것을

참고 만 전류처리 및 설정/(AFAIK, 윈도우와 달리) 변경 후 그것으로부터 분기 된 모든 프로세스에 영향을 미친다.

0

체크 아웃 기능 setenv합니다. 자세한 내용은 man 3 setenv을 참조하십시오.

0

유닉스는 이미 시스템 실행 파일이 저장된 모든 경로가 포함 된 환경 변수를 제공합니다. getenv("PATH");을 사용하여 코드에서 변수 검색 각 경로는 ':'로 구분되어 있으므로 토큰 화 만 수행하면 명령이 실행하려는 실행 파일의 경로를 검색하기 만하면됩니다. 이 함수에서는 실행 파일에 대해 원하는 경로를 검색 할 수 있어야합니다.

셸에서 chdir()으로 프롬프트를 표시하기 전에 현재 작업 디렉토리를 조작하여 시작하려는 디렉토리 (말하면 "홈 디렉토리")를 결정할 수 있습니다. 해당 유닉스 기능을 사용하여 쉘 런타임 동안 사용할 수있는 cd 명령을 구현할 수도 있습니다.

희망이 조금 도움이됩니다.

관련 문제