프로그램이 실행되고 있는 위치를 알려면???

zeshai의 이미지

어떤 프로그램을 절대 경로로도 실행 할 수 있고,

직접 디렉토리까지 가서 ./A 이렇게 실행할 수도 있는데...

문제는 A라는 프로그램이 자신의 디렉토리 밑에 있는 data 라는 디렉토리밑에

여러 파일을 써야합니다.

char* getcwd(char* buf, size_t size)를 사용하니깐,

실행시킨 위치가 뜨는군요. 뭐 이것이 작업 디렉토리겠죠.

그러면 A라는 프로그램이 있는 절대 경로를 알아올수 있는 방법은 없습니까?

글을 검색해보니 /proc/(PID)/exe 파일이 심볼릭 링크 되어있긴 하던데...

저 이름을 읽어오려니... 링크된 실체의 경로를 어떻게 읽어야하나요?

예를 들어 /proc/(PID)/exe -> /home/zeshai/A 라면요...

/home/zeshai를 뽑아오고 싶은데... ^^;

pynoos의 이미지

proc 을 사용하지 않고 하려면,

main의 argv[0] 값을 dirname, basename 등으로 잘 처리해보시면 구할 수 있습니다.

neohwang의 이미지

윗 분이 답변한 대로 하시고,
만약 디렉토리 패스가 전혀없을 경우에는 추가적으로
PATH 환경변수를 검색하는 루틴도 추가 하셔야 완벽합니다.

choissi의 이미지

pynoos wrote:
proc 을 사용하지 않고 하려면,

main의 argv[0] 값을 dirname, basename 등으로 잘 처리해보시면 구할 수 있습니다.

제목과 같은 형태로 실행하면
argv[0]에 "./progname" 이런 형태로 값이 들어 가 있지 않나요??

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

pynoos의 이미지

그렇군요... 제가 잠시 착각했습니다.
Script를 실행시킬 때, 항상 PATH를 찾게하지 않고 직접 실행시키다보니... 비슷한 c library 함수를 가지고 혼동하였나봅니다.

neohwang 님 말을 잘 보태어 정리하면,

잘 생각해보니 argv[0] 에 "/" (path 구분자)가 들어가 있는 경우에만 가능하군요.
또 절대경로인경우에는 되지만 상대경로인 경우에는 현재 디렉토리를 붙여야하는 추가적인 작업이 필요하네요.

"/"가 없는 경우에는 환경변수 PATH를 찾아 일일이 실행파일로 존재하는지 찾아야할 것 같습니다.

감사합니다...

choissi의 이미지

저도 질문을 보고 이래저래 고민을 해봤는데
/proc를 검색할 것이 아니라면
환경변수가 가장 깔끔한 방법이라고 생각 되네요

그러나
ps -ef f 나 lsof 의 경우는 /proc를 검색을 해서
절대 경로를 얻네요.

ps. 환경 변수로 하신다면.
환경변수의 유무와, 그 경로가 타당한지를
체크하는 부분을 넣어야 좀더 안전한 프로그램이 되겠네요.

ps2. 인자로 넣어 주어도 좋을것 같군요.

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.