linux getuid函数,【库函数】linux之getuid和getpwuid函数

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文件中的信息。可以知道当前程序正在使用的用户以及用户路径。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值