objective-c - Objective C 和 OS 用户类型

标签 objective-c cocoa macos

有什么方法可以通过 Objective-C 获取当前登录的用户类型(root、admin 或 normal)?

我知道 NSFullUserName() 提供用户名,但如何检索用户类型?

谢谢。

最佳答案

您可以使用 getpwnamgetpwuid 检索用户组,然后使用 getgrgid 从 gid 中获取组名。

这些是标准库中的 C 函数。

-- 编辑:这是一个简短的、编码不佳的 C 示例 ---

这是一个小例子,在终端的 mac os 上它应该使用 make 构建(如果你命名文件 getpwnam_example.c 你可以做 $ make getpwnam_example 在与 c 文件相同的目录)。

#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;
}

关于objective-c - Objective C 和 OS 用户类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6614901/

相关文章:

objective-c - Cocoa - 在 NSXMLDocument 中写入 NSXMLElement

iphone - 从错误的 url 加载 xml 时如何处理卡住程序?

ruby - OS X ElCapton 上的 Puma gem 错误

macos - Docker nginx 容器 : http code 400

ios - Cocoa Pods Shell 脚本调用错误

ios - XCode、LLVM 和代码优化——最快、最小与无

ios - 为什么我应该直接从初始化方法中访问实例变量?

ios - 在 UITextView 内占据左角的 UIImageView

objective-c - 来自应用程序的新 NSWindow - 不可能完成的任务?

swift - NSTextField 不可见