whoami 와 같은 동작을 하는 함수는?

Viz의 이미지

whoami가 찍어주는 값,
즉 자신의 username을 알고 싶습니다.
getuid를 하면 자신의 uid를 알 수 있는데.. 이걸 가지고 username을 알 수 있는 방법은 없나요? 라이브러리 함수로 있을 것이란 생각이 듭니다만 검색을 잘 못해서인지 찾을 수 없네요.

env의 USER="유저이름" 값을 파싱해서 읽으려다 먼가 더 편한 방법이 있을꺼 같아 질문드립니다. :D

pynoos의 이미지

man getpwnam

Viz의 이미지

정확히는 getpwuid()를 써야 하네요. ^^

struct passwd *pw;
pw = getpwuid(getuid());
(에러처리 루틴 생략~)
prinft("%s", pw->pw_name);

라고 하면 되는군요. :D

답변해 주신 pynoos님 감사합니다~

My Passion for the Vision!

pynoos의 이미지

핫.. 같은 man page에 있는 위의것을 썼군요.. :roll:

Viz의 이미지

훨씬더 깔끔한 솔루션!

man getlogin

       #include <unistd.h>

       char * getlogin ( void );

바로 user name을 돌려줍니다.

My Passion for the Vision!

맹고이의 이미지

Viz wrote:
env의 USER="유저이름" 값을 파싱해서 읽으려다 먼가 더 편한 방법이 있을꺼 같아 질문드립니다.

getenv("USER");

그리 불편한 것 같진 않은데요... ;;

정태영의 이미지

g_get_real_name ()
G_CONST_RETURN gchar* g_get_real_name       (void);

Gets the real name of the user. This usually comes from the user's entry in the passwd file. 
Returns :the user's real name. 



g_get_home_dir ()
G_CONST_RETURN gchar* g_get_home_dir        (void);

Gets the current user's home directory. Returns :the current user's home directory. 

glib에 있는 것들은 이렇네요 :)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

pynoos의 이미지

맹고이 wrote:
Viz wrote:
env의 USER="유저이름" 값을 파싱해서 읽으려다 먼가 더 편한 방법이 있을꺼 같아 질문드립니다.

getenv("USER");

그리 불편한 것 같진 않은데요... ;;

그리 불편하지 않겠지만...

su

su -

이 둘 차이만 가지고도 USER 환경변수로 현재 사용 권한을 얻는 확인을 한다면.. 좀 심각해지죠.

또... crontab 으로 뭔가를 돌리면, 아예 USER 라는 환경변수는 없기도 합니다...

맹고이의 이미지

물론 그렇긴 하지만...
질문하신 분께서 환경변수를
파싱하려고 했었다고 해서 올려봤습니다... :D

deisys의 이미지

Viz wrote:
훨씬더 깔끔한 솔루션!

man getlogin

       #include <unistd.h>

       char * getlogin ( void );

바로 user name을 돌려줍니다.

- 깔끔하긴 한데... 환경변수를 보는 함수인가요? 난감한 동작을.... ;;

--------

[deisys@LUNEARRIS c]$ cat unam.c
#include <stdio.h>
#include <sys/types.h>
#include <pwd.h>

int main()
{
struct passwd * pwd = getpwuid( getuid() );

printf("%s\n", pwd->pw_name);

return 0;
}
[deisys@LUNEARRIS c]$ cat getlogin.c
#include <unistd.h>

int main()
{
printf( "%s\n", getlogin() );

return 0;
}
[deisys@LUNEARRIS c]$ make unam
cc unam.c -o unam
[deisys@LUNEARRIS c]$ make getlogin
cc getlogin.c -o getlogin
[deisys@LUNEARRIS c]$ ./unam
deisys
[deisys@LUNEARRIS c]$ ./getlogin
deisys
[deisys@LUNEARRIS c]$ su
Password:
[root@LUNEARRIS c]# ./unam
root
[root@LUNEARRIS c]# ./getlogin
deisys
[root@LUNEARRIS c]#

pynoos의 이미지

login name이라는 것은 login shell 에서 할당되는 것이므로, 단지 권한이 바뀐다고해서 바뀌지 않습니다.

따라서, library의 getlogin 함수가 return하는 것은 아마 LOGNAME을 돌려줄 것입니다.
확인은 안해봤습니다...

hekimian의 이미지

pynoos wrote:
login name이라는 것은 login shell 에서 할당되는 것이므로, 단지 권한이 바뀐다고해서 바뀌지 않습니다.

따라서, library의 getlogin 함수가 return하는 것은 아마 LOGNAME을 돌려줄 것입니다.
확인은 안해봤습니다...

확인해보니 맞습니다. ^--^

나를 죽이지 않는 모든 것은 나를 강하게 할 뿐이다.

익명사용자의 이미지

utmp의 내용에서 ut_user을 반환합니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.