2014-11-26 3 views
3

현재 C로 작성된 터미널 에뮬레이터를 Linux에서 FreeBSD로 이식하려고합니다. 그러나 터미널은 부모 프로세스에서 현재 작업 디렉터리 (CWD)를 가져 오려고합니다.C의 FreeBSD에서 프로세스의 현재 작업 디렉토리를 얻는 방법은 무엇입니까?

/proc/$PID/cwd에 액세스하여이 작업을 수행합니다.

는 지금은 FreeBSD의에서 작동 뭔가이 functionalty을 대체 할 수있는 방법을 찾고 있어요.

그래서 내가 어떻게 FreeBSD의에서 프로세스에서 CWD를받을 수 있나요?

심지어 POSIX 준수 솔루션이 있습니까?

getcwd으로 프로세스에서 CWD를 얻을 수 있다는 것을 알고 있지만 상위 프로세스의 CWD가 필요합니다. 여기서는 PID 만 알고 있습니다.

+0

당신은 [에 getcwd (http://www.freebsd.org/cgi/man.cgi?query=getcwd&sektion=3) 시스템 호출을 의미? 아니면 쉘 솔루션이 필요합니까? – user3159253

+0

'getcwd'는 실행중인 프로세스의 CWD에만 상위 프로세스와 같은 프로세스를 제공하지 않습니다. –

+0

아마도 FreeBSD에는 작업을 수행 할 즉석 시설이 없습니다. 그러나'fstat -p '또는'lsof -p '을 사용하면 다른 정보 중에서'cwd '를 포함하는 보고서를 얻을 수 있습니다. http://unix.stackexchange.com/questions/94357/find-out-current-working-directory-of-a-running-process를 확인하십시오 – user3159253

답변

2

글쎄, 실제로는 두 가지 가능성이 있습니다. (I 위의 댓글에서 언급 한 바와 같이) 또는 here 설명 된대로 다른 유틸리티 procstat라는 이름의 그 중 하나가 lsof -p, fstat -p 같은 쉘 유틸리티를 사용하는 것입니다. procstat으로이 솔루션은 다음과 같이 표시됩니다

procstat -f <pid> | awk '$3 == "cwd" { print $10 }' 

또 다른 가능한 솔루션은 C 프로그램의 완전한 정보를 얻을 수 libprocstat 라이브러리 호출, 특히 procstat_getfiles()을 사용하는 것입니다. procstat sources에서 API 사용 예를 확인하십시오.

관련 문제