Objective c 目标C和OS用户类型
有没有办法通过objective C获得当前登录的用户类型(root、admin或normal) 我知道提供用户名的Objective c 目标C和OS用户类型,objective-c,cocoa,macos,Objective C,Cocoa,Macos,有没有办法通过objective C获得当前登录的用户类型(root、admin或normal) 我知道提供用户名的NSFullUserName(),但如何检索用户类型 谢谢。您可以使用getpwnam或getpwuid检索用户组,然后使用getgrgid从gid获取组名 这些是标准库中的C函数 --编辑:下面是一个简短的、编码错误的C示例--- 下面是一个小示例,在终端的mac os上,它应该使用make构建(如果您将文件命名为getpwnam_example.c,您可以在与c文件相同的目录中
NSFullUserName()
,但如何检索用户类型
谢谢。您可以使用
getpwnam
或getpwuid
检索用户组,然后使用getgrgid
从gid获取组名
这些是标准库中的C函数
--编辑:下面是一个简短的、编码错误的C示例---
下面是一个小示例,在终端的mac os上,它应该使用make构建(如果您将文件命名为getpwnam_example.c
,您可以在与c文件相同的目录中执行$make getpwnam_example
)
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,字符**argv){
uid\u t current\u user\u id=getuid();
printf(“我当前的UID是%d\n”,当前用户id);
结构passwd*pwentry=getpwuid(当前用户id);
printf(“我现在的名字是%s\n”,pwentry->pw_gecos);
printf(“我当前的组ID是%d\n”,pwentry->pw_gid);
结构组*grentry=getgrgid(getgid());
printf(“我当前的组名是%s\n”,grentry->gr\u Name);
printf(“我是管理员吗?”);
结构组*admin_group=getgrnam(“admin”);
while(*admin\u group->gr\u mem!=NULL){
如果(strcmp(输入->名称,*管理组->内存)=0){
printf(“是!\n”);
}
管理组->gr_mem++;
}
返回0;
}
用户类型实际上只是组的RealName属性,由组决定访问权限。您可以通过dscl命令(dscl.-read/Groups/admin)查看属性。经过编辑后,strcmp()缺失==0。NSString*username=[NSString stringWithUTF8String:pwrentry->pw_name]代码>。wohoo 2017!
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <strings.h>
#include <pwd.h>
#include <grp.h>
int main(int argc, char **argv) {
uid_t current_user_id = getuid();
printf("My Current UID is %d\n", current_user_id);
struct passwd *pwentry = getpwuid(current_user_id);
printf("My Current Name is %s\n", pwentry->pw_gecos);
printf("My Current Group ID is %d\n", pwentry->pw_gid);
struct group *grentry = getgrgid(getgid());
printf("My Current Group Name is %s\n", grentry->gr_name);
printf("Am I an admin? ");
struct group *admin_group = getgrnam("admin");
while(*admin_group->gr_mem != NULL) {
if (strcmp(pwentry->pw_name, *admin_group->gr_mem) == 0) {
printf("yes!\n");
}
admin_group->gr_mem++;
}
return 0;
}