linux关于用户信息的编程

Linux对每一个用户都提供了一个uid,我们从uid开始来说说用户信息。

uid有自己的类型,uid_t,它定义在头文件sys/types.h中。它通常是一个小整数。有些UID是系统预定义的,其他的则是系统管理员

在添加心用户时创建的,一般情况下,uid都大于100。

#include<sys/types.h>

#include<unistd.h>

uid_t getuid(void);

char *getlogin(void);

getuid函数返回程序关联的UID,它通常是启动程序的用户的UID。

getlogin函数返回当前用户关联的登录名。

系统文件/etc/passwd包涵一个用户账号数据库。它由行组成,每行对应一个用户,包括用户名,加密口令,用户标识符,组标识符,全名,家目录和

默认的shell.

人们定义了一组函数来提供一个标准而又有效的获取用户信息的编程接口。

#include<sys/types.h>

#include<pwd.h>

struct passwd *getpwuid(uid_t uid);

struct passwd *getpwnam(const char *name);

密码数据库结构passwd定义在头文件pwd.h中,它包括下面几个成员。

passwd成员                                             说明

char *pw_name                                     用户登录名

uid_t pw_uid                                           UID号

gid_t pw_gid                                           GID号

char *pw_dir                                           用户家目录

char *pw_gecos                                    用户全名

char *pw_shell                                      用户默认shell


#include <sys/types.h>
#include <pwd.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
    uid_t uid;
    gid_t gid;
    struct passwd *pw;

    uid = getuid();
    gid = getgid();

    printf("User is %s\n", getlogin());

    printf("User IDs: uid=%d, gid=%d\n", uid, gid);

    pw = getpwuid(uid);
    printf("UID passwd entry:\n name=%s, uid=%d, gid=%d, home=%s, shell=%s\n",
        pw->pw_name, pw->pw_uid, pw->pw_gid, pw->pw_dir, pw->pw_shell);

    pw = getpwnam("root");
    printf("root passwd entry:\n");
    printf("name=%s, uid=%d, gid=%d, home=%s, shell=%s\n",
        pw->pw_name, pw->pw_uid, pw->pw_gid, pw->pw_dir, pw->pw_shell);
    exit(0);
}

如果要扫描密码文件中的所有信息,你可以使用getpwent函数。它的作用是依次取出文件数据项。

#include<pwd.h>

#include<sys/types.h>

void endpwent(void);

struct passwd *getpwent(void);

void setpwent(void);

getpwent函数依次返回用户的信息数据项。当到达文件尾是,它返回一个空指针。如果已经扫描了足够多的数据项,你可以使用endpwent函数来终止

处理过程。setpwent函数重置读指针到密码文件的开始位置。这样下一个getpwent调用将开始一个新的扫描。


用户和组标识还可以被其他一些不太常用的函数获得。

#include<sys/types.h>

#include<unistd.h>


uid_t getuid(uid);

gid_t getgid(void);

int setuid(uid_t uid);

int getgid(gid_t gid);

上述函数只有在超级用户下才可以使用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值