Linux环境之2_用户信息

     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包含一个用户帐号数据库。包括用户、用户标识符(UID)、组标识符(GID)、全名、家目录和默认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

在某些系统(Linux)上是那个,用户全名是pw_gecos,而有些是pw_comment。

       getpwuid和getpwnam函数都返回一个指针,该指针指向与某个用户对应的passwd结构。这个用户通过getpwuid的UID参数或通过getwnam的用户登录名参数来确定。出错时返回一个空指针并设置errno。

函数实例:

下面的程序getpwuid.c密码数据库中提取一些用户信息:

#include <sys/types.h>
#include <pwd.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
   uid_t uid;
   gid_t gid;

   struct passwd *pwd;
   uid = getuid();
   gid = getgid();
   pwd = getpwuid(uid);
   printf("user is %s \n",getlogin());
   printf("UID passwd entry:\n");
   printf("%d,%d,%s,%s\n",pwd->pw_uid,pwd->pw_gid,pwd->pw_dir,pwd->pw_gecos,pwd->pw_shell);

   pwd = getpwnam("root");
   printf("root passwd entry :\n");
   printf("%d,%d,%s,%s\n",pwd->pw_uid,pwd->pw_gid,pwd->pw_dir,pwd->pw_gecos,pwd->pw_shell);
   return 0;
}
程序运行结果:

zhangxm@zhangxm:~/c_programmer/Linux环境/dir_getpwuid$ ./getpwuid
user is zhangxm
UID passwd entry:
1000,1000,/home/zhangxm,张先明,,,
root passwd entry :
0,0,/root,root

如果要扫描密码文件中的所有信息,你可以使用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 geteuid(void);

     gid_t getgid(void);

     gid_t getegid(void);

     int setuid(uid_t uid);

     int setgid(gid_t gid);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值