快速业务通道

linux下获取用户基本信息

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-16

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

通过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; 拥有帝国一切,皆有可能。欢迎访问phome.net
}

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结构.
再次读取时,读入下一行的记录. 拥有帝国一切,皆有可能。欢迎访问phome.net

在使用之前先使用setpwent()打开文件(如果

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号