2009-09-20 5 views
4

C 프로그래밍에서 현재 사용자와 현재 작업 디렉토리를 얻는 방법. 나는 이런 식으로 뭔가를 인쇄하기 위해 노력하고있어 :C 프로그래밍. 현재 사용자 인쇄

[email protected]:~/Desktop/testProgram:$ 
    (user) (computerName) (current directory) 

을 나는 다음과 같은 코드가 있지만, 사용자 이름이 NULL로 표시되어있다. 내가 뭘 잘못하고 있는거야?

void prompt() 
{ 
     printf("%[email protected]:~%s$", getenv("LOGNAME"), getcwd(currentDirectory, 1024));     
} 
+2

을 사용할 수 있습니다 .. : P – sud03r

+0

는 관련 프로그래밍되어 죄송합니다 ...난 실수로 태그를 추가했다 – user69514

+0

나는 유닉스 환경에있다. 실제로 내가 가지고 있었던 길은 터미널에서 잘 작동했다. 이클립스에서 직접 컴파일 할 때 null을 표시했다. getlogin도 정상적으로 작동합니다. 고마워요. – user69514

답변

-4

유닉스 시스템에서만 작동한다는 점에 유의하십시오.
는 환경 변수가 printenv 명령

printf("%[email protected]:%s$", getenv("USER"),getenv("PWD"))

또한 작업을 수행를 사용하여 볼 수 있습니다 LOGNAME 사용자 환경 변수로 설정되지 않은 될 수있다.

하지만 언급 한 바와 같이 환경 변수를 사용하지 말고 표준 c 함수를 사용하십시오. 실제로 사용하려면 먼저 설정되어 있는지 확인하십시오. 그것은 관련 프로그래밍되지 않는 이유

+4

많은 경우에 환경에서 사용자를 얻는다면 엄청난 보안 허점이 있습니다 (예를 들어 그 정보에 기반한/etc/shadow에 쓰기). 누군가가 USER = root를 설정할 수 있습니다. – mrBorna

1

이렇게하려면 C 프로그래밍 언어에 본질적인 방법이 없으므로 플랫폼에 따라 달라질 수 있습니다.

당신은 유닉스 기반 시스템에있는 것처럼 보입니다. 따라서 보통은 로그온 이름 인 환경 변수 USER을 얻고 싶을 것입니다.

4

유닉스 계열 시스템에서는 unistd.h의 getlogin 함수를 사용하십시오.

2

이것은 C 질문이 아니지만 유닉스 관련 질문과 같습니다. 사용자 이름을 현재 작업 디렉토리 언어로 가져 오는 휴대용 방식은 없습니다.

그러나 예제를 보면 현재 UNIX 사용자 이름과 현재 작업 디렉토리를 인쇄하려고한다고 말할 수 있습니다.

UNIX에 현재 작업 디렉토리가 필요한 경우 check getcwd function.

당신은 당신이 당신의 C 프로그램 또는 check the getuid function call 내에서 별도의 whoami를 프로세스를 호출 할 수 있습니다 현재 사용자 이름이 필요합니다.

16

USER 대신 LOGNAME을 사용해야한다는 사실 외에도 환경 변수를 사용해서는 안됩니다. ,

struct passwd *p = getpwuid(getuid()); // Check for NULL! 
printf("User name: %s\n", p->pw_name); 

를 현재 컴퓨터 이름을 얻으려면 : 당신은 passwd 파일에서 사용자 ID에서 사용자 이름을 가져올 수 getpwuid(3)를 사용하여 다음 geteuid(2)getuid(2) 현재 유효 사용자 ID로 현재 사용자 ID를 얻을 수 있습니다 gethostname(2) :

char hostname[HOST_NAME_MAX+1]; 
gethostname(hostname, sizeof(hostname)); // Check the return value! 
printf("Host name: %s\n", hostname); 
0

당신은 또한

#include<stdlib.h> 
main() 
{ 
    system("echo %username%"); /* This is for Windows 
            * instead use system("echo $USER"); for UNIX 
            */ 
}