1、getuid和getpwuid函数简介
(一)
(1)头文件
#include
#include
(2)函数原型
uid_t getuid(void);
(3)说明
uid_t是定义在头文件sys/types.h中,它通常是一个小整形。函数返回一个调用程序的真实用户ID,一般来说,这个函数都是会调用成功的。
(二)
(1)头文件
#include
#include
(2)
函数原型
struct passwd *getpwuid(uid_t uid);
(3)
函数说明
getpwuid函数是通过用户的uid查找用户的passwd数据。如果出错时,它们都返回一个空
指针并设置errno的值,用户可以根据perror函数查看出错的信息。
The passwd structure isdefined in as follows:
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、举例:
#include
#include
#include
#include
int main()
{
uid_t uid;
uid = getuid();
printf("User IDs: uid=%d\n", uid);
uid_t my_uid;
struct passwd *my_info;
my_info =getpwuid( getuid() );
printf( "my name = [%s]\n", my_info->pw_name );
printf( "my passwd = [%s]\n", my_info->pw_passwd );
printf( "my uid = [%d]\n", my_info->pw_uid );
printf( "my gid = [%d]\n", my_info->pw_gid );
printf( "my gecos = [%s]\n", my_info->pw_gecos );
printf( "my dir = [%s]\n", my_info->pw_dir );
printf( "my shell = [%s]\n", my_info->pw_shell );
return 0;
}
结果:
User IDs: uid=501
my name = [mister]
my passwd = [x]
my uid = [501]
my gid = [100]
my gecos = []
my dir = [/home/mister]
my shell = [/bin/bash]
3、小结
从函数中可以看到先用getuid获取到用户id号,然后使用getpwuid获取到了用户的相关信息。
这个函数实现的机制其实就是跟/etc/passwd的文件中记录的信息一样,cat /etc/passwd如下:
pulse:x:495:491:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
stap-server:x:155:155:Systemtap Compile Server:/var/lib/stap-server:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/bin/sh
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
winter:x:500:500::/home/winter:/bin/bash
mister:x:501:100::/home/mister:/bin/bash
结构体passwd和这个文件中是一一对应的。实际上这个函数实现的就是获取passwd文件中的信息。可以知道当前程序正在使用的用户以及用户路径。