[C 언어] 사용자 홈 Dir (~) 알아내는 방법?

nephro의 이미지

FILE *fp;

fp = fopen("~/test.txt","w");

인 경우 파일을 만들지 못하네요.

fp = fopen("/home/user/test.txt","w"); 는 제대로 만들어 지구요.

프로그램 안에서, 사용자 홈의 절대경로를 알아내는 방법이 있습니까?

원초적인 질문같아 죄송합니다.

beta의 이미지

struct passwd *getpwnam(const char *name);

              struct passwd {
                      char    *pw_name;       /* user name */
                      char    *pw_passwd;     /* user password */
                      uid_t   pw_uid;         /* user id */
                      gid_t   pw_gid;         /* group id */
                      char    *pw_gecos;      /* real name */
                      char    *pw_dir;        /* home directory */
                      char    *pw_shell;      /* shell program */
              };

발 담갔다. 이제 익숙해 지는길만이..

gold_ya의 이미지

getpwnam()에보면은 pw_dir에서 가져오면 될꺼 같네요..

nephro의 이미지

감사합니다. 좋은 성탄절 되세요.

자유를 꿈꾸는자 고개를 들어 하늘을 보라.

nephro의 이미지

가르쳐주신 대로, getpwnam()을 이용하니 절대경로를 알아낼 수 있었습니다.

그런데, getpwnam은 계정의 ID를 알아야 하더군요.

풀그림의 사용자가 누가될지 모르기 때문에 getpwnam("계정이름") 을

사용하는데 문제가 생기겠네요.

계정 이름을 알아내야 문제가 해결될것 같은데요,

C 프로그램 안에서 현재 사용자의 계정이름을 알아낼 방법좀 가르쳐 주세요.

자유를 꿈꾸는자 고개를 들어 하늘을 보라.

정인철의 이미지

그냥

/etc/passwd 화일을 열어보시면 어떨까요?

woonuk의 이미지

getuid() or geteuid() 으로 사용자 uid 를 구하고,
getpwuid() 를 호출하면 원하는 pw_dir 을 구할수 있겠네요.

man getuid

getuid returns the real user ID of the current process.
geteuid returns the effective user ID of the current process.
preisner의 이미지

환경변수를 이용하시는게 더 편하겠네요.

getenv("HOME");

그럼..

lunarainbow의 이미지

getpwnam(getlogin());

getlogin() 로그인한 사용자의 아이디 리턴...

단, AAA 로 로긴후, su - BBB 를 할 경우, BBB로 실행하면 AAA를 리턴합니다. 이점 주의하세요 ^^
(기억이 맞다면, 맞을겁니다.)

pynoos의 이미지

nephro의 이미지

정말 감사합니다.
woonuk 님과 preisner 님의 방법으로 모두 성공하였습니다. 이제 어떤걸 쓸지 행복한 고민만 남았네요 ^^;

자유를 꿈꾸는자 고개를 들어 하늘을 보라.

nephro의 이미지

pynoos 님의 링크를 보니, 며칠전의 내용조차 검색하지 못하고 질문을 올렸군요. 죄송..
답변주신 모든분들께 감사드립니다.

자유를 꿈꾸는자 고개를 들어 하늘을 보라.