使用这个函数可以获取运行某个进程(程序)的用户的uid。
Linux系统使用一个专门的文件来将用户的登录名匹配到对应的UID值,我们可以使用命令 sudo nvim /etc/passwd
进行查看,包含了一些与用户相关的信息。
root:x:0:0::/root:/bin/bash
kato:x:1000:1000:kato:/home/kato:/usr/bin/zsh
其实这个文件有很多条信息,我只单独列出这两条。很清晰的看到每条信息由7个字段组成,由:
隔开。
字段包含如下信息:
1️⃣ 登录用户名
2️⃣ 用户密码(进行了别的处理,这里x简单表示,加密后存储在/etc/shadow文件中)
3️⃣ 用户账户的UID(数字形式)
4️⃣ 用户账户的组ID(GID)(数字形式)
5️⃣ 用户账户的文本描述(称为备注字段)
6️⃣ 用户HOME目录位置
7️⃣ 用户的默认shell
从我给出的两条信息中可以得到,我的普通用户kato的uid为1000,root用户的uid为0。
现在我们知道了UID,使用一个例子来看看:
getuid.c
#include <stdio.h>
#include <unistd.h>
int main(void)
{
uid_t uid = getuid();
if (uid == 0)
printf("运行本程序的用户为root,它的uid:%d \n", uid);
else
printf("运行本程序的用户为普通用户,它的uid:%d \n", uid);
return 0;
}
运行结果:
$ gcc getuid.c -o getuid
$ ./getuid
运行本程序的用户为普通用户,它的uid:1000
$ sudo ./getuid
运行本程序的用户为root,它的uid:0