linux下获取用户基本信息

时间:2009-12-22

  作者:孙晓明,华清远见嵌入式学院讲师。

  通过c语言基础库从获取linux用户的基本信息。

  1、使用struct passwd管理用户信息。

  struct passwd

  {

  char *pw_name; /* 用户登录名 */

  char *pw_passwd; /* 密码(加密后)*/

  __uid_t pw_uid; /* 用户ID */

  __gid_t pw_gid; /* 组ID */

  char *pw_gecos; /* 详细用户名 */

  char *pw_dir; /* 用户目录 */

  char *pw_Shell; /* shell程序名 */

  };

  2、分析相并的系统文件/etc/passwd

  ⑴    root:x:0:0:root:/root:/bin/bash

  ⑵    daemon:x:1:1:daemon:/usr/sbin:/bin/sh

  ⑶    bin:x:2:2:bin:/bin:/bin/sh

  在passwd文件中记录的是所有系统用户

  每一行表示一个完整的struct passwd结构,以':'分隔出每一项值,其7项。

  3、获取系统当前运行用户的基本信息。

  #include <grp.h>

  #include <pwd.h>

  #include <unistd.h>

  #include <stdio.h>

  int main ()

  {

  uid_t uid;

  struct passwd *pw;

  struct group *grp;

  char **members;

  uid = getuid ();

  pw = getpwuid (uid);

  if (!pw)

  {

  printf ("Couldn't find out about user %d.\n", (int)uid);

  return 1;

  }

  printf ("I am %s.\n", pw->pw_gecos);

  printf ("User login name is %s.\n", pw->pw_name);

  printf ("User uid is %d.\n", (int) (pw->pw_uid));

  printf ("User home is directory is %s.\n", pw->pw_dir);

  printf ("User default shell is %s.\n", pw->pw_shell);

  grp = getgrgid (pw->pw_gid);

  if (!grp)

  {

  printf ("Couldn't find out about group %d.\n",

  (int)pw->pw_gid);

  return 1;

  }

  printf ("User default group is %s (%d).\n",

  grp->gr_name, (int) (pw->pw_gid));

  printf ("The members of this group are:\n");

  members = grp->gr_mem;

  while (*members)

  {

  printf ("\t%s\n", *(members));

  members++;

  }

  return 0;

  }

  编译,结果输出

  $gcc -o userinfo userinfo.c

  $./userinfo

  I am root.

  My login name is root.

  My uid is 0.

  My home is directory is /root.

  My default shell is /bin/bash.

  My default group is root (0).

  The members of this group are:

  test

  user

  test2

  4、查看所有的用户信息

  使用pwd.h定义的方法getpwent(),逐行读取/etc/passwd中的记录,每调用getpwent函数返回一个完整用户信息struct passwd结构。

  再次读取时,读入下一行的记录。

  在使用之前先使用setpwent()打开文件(如果文件关闭)或重定位到的文件开始处,操作结束时使用endpwent()关闭/etc/passwd文件,避免对后面的使用产生负作用。

  5、脚本操作,显示所有用户的信息中的name

  使用cut命令将/etc/passwd中的内容逐行解析,"-d:"以':'将一行划分出7人字段列,-f1,为列

  cut -d: -f1 /etc/passwd

  “本文由华清远见https://www.embedu.org/index.htm提供”



  
上一篇:exec函数族的使用
下一篇:线程解析(三)

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料