| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

C ユーザ情報

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

C ユーザ情報

Programming C |

  • すべてのLinux programは、initを除いて、他のprogramまたはuserから実行される。
  • 内部的にはuserは、一意のuser ID UID を持っている。
  • programに、setUID permision を set すればあたかも別の user が起動したかの様にprogramを起動できる。
  • UIDには、uid_t という独自の型があり、sys/types.hで定義されている。

getuid、getloin

#include <sys/types.h>
#include <unistd.h>
uid_t getuid(void);
char *getlogin(void);
  • getuidはprogramに関連付けられているUIDを返す
  • getloginは、現在のuserのlogin名を返す
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main() 
{
  uid_t uid = getuid();
  char *login = getlogin();
  printf("%d : %s\n" ,uid, login);

  exit(0);
}

getpwduid、getpwnam

  • user情報を効率的に取得するための標準的なprogramming interfaceが用意されている。
#include <sys/types.h>
#include <pwd.h>
struct passwd *getpwduid(uid_t uid);
struct passwd *getpwnam(const char *name);
member 説明
char *pw_name userのlogin名
uid_t pw_uid UID
gid_t pw_gid GID
char *pw_dir user の home directory
char *pw_shell user の default shell
#include <sys/types.h>
#include <pwd.h>
#include <unistd.h>#include <stdio.h>
#include <stdlib.h>

int main() 
{
  uid_t uid = getuid();
  struct passwd *pw;

  pw = getpwuid(uid);
  printf("%s %d %d %s %s\n", pw->pw_name, pw->pw_uid, pw->pw_gid,
                           pw->pw_dir, pw->pw_shell);
  exit(0);
}

この本からの覚書。