Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C和OS用户类型_Objective C_Cocoa_Macos - Fatal编程技术网

Objective c 目标C和OS用户类型

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文件相同的目录中

有没有办法通过objective C获得当前登录的用户类型(root、admin或normal)

我知道提供用户名的
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;
}