2012-04-06 3 views
1

Linux Suse10 시스템에 로그인하고 C++ 프로그램을 통해 getlogin_r()을 확인하면 로그인 이름으로 올바른 결과를 얻습니다.Linux에서 getlogin 함수 사용

int main() 
{ 
    char szUserName[64] = {0}; 

    int nGet = getlogin_r(szUserName, sizeof(szUserName)-1); 
    if(0 != nGet) 
     { 
      printerr(); 
     } 
    printf("%s\n", szUserName); 
    char * szHome = getlogin(); 
    printf("%s\n", szHome); 
    return 0; 
} 

는하지만 SU 사용 후 - NAME2 난 이제 로그인을 변경했습니다. 그러나 getlogin_r()은 이전의 usename을 계속 표시합니다.

하나의 해결책은 geteuid()를 사용하는 것입니다. 그러나 위의 이유는 무엇입니까

답변

6

"사용 후 su - name2 로그인을 변경했습니다"- 아니, 그렇지 않습니다. 로그인이 아닌 사용자 ID를 변경했습니다.

su의 설명서 페이지는 - 옵션에 대해 다음과 같이 설명합니다. "사용자가 직접 로그인 한 상태에서 사용자가 기대하는 것과 유사한 환경을 제공하십시오." 명백하게 "유사"는 "동일"과 다릅니다. 특히 su -은/var/run/utmp에 로그인 레코드를 저장하지 않습니다.

+1

우리 중 많은 사람들이 경험 한 트로프에서 배운 교훈 :) – KevinDTimm