{$cluname}

科伟奇论坛 » 嵌入式软件 » linux下获取用户基本信息


‹‹上一主题 | 下一主题›› 查看 2138
发表一个新帖子 发表回复

标题 linux下获取用户基本信息 在百度搜索本主题 [ 搜 ] [ 打印 ] [ 推荐 ] [收藏帖子] [ 收藏到新浪VIVI] [ 订阅 ]

janeye (附小一年级)
楼主   [点击复制本网址] [ 字体: ] [ 编辑 ] [ 报告 ] [评分]
Rank:1
Rank:1
UID 96
帖子 11
积分 31 点
金币 54 枚
魅力 22 度
注册 2009年12月9日
linux下获取用户基本信息

通过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





此用户离线!
共计在线时长140分钟2009/12/9 12:59:30
[ 资料 ] [ 短信 ] [ 好友 ] [ 文集 ] [ 引用 ] [ 回复 ] 点击返回顶部

« 首页1 »1/共1页


查看积分策略说明快速回复你的内容
快捷回复标题 (选填) 快捷插入表情图标
验 证 码  点击获取验证码
快捷回复内容

自动复制

Powered by TEAM 2.0.5 Release - ACC © 2005 Team5 Studio All rights reserved