【问题标题】:How to check '+' in permissions of file? (ACL)如何检查文件权限中的“+”? (ACL)
【发布时间】:2020-03-08 04:55:22
【问题描述】:

我需要在C中显示文件的权限。但是如果文件有ACL,我不知道如何打印出'+'。

我尝试使用 acl_get_file 函数,但即使文件有 ACL,它也总是返回 NULL。

acl_t acl;
acl = acl_get_file("Users/mavramenko/Desktop/ucode/file.txt", ACL_TYPE_ACCESS);
if (acl != NULL)
    printf("+");

【问题讨论】:

  • 您使用的是哪个操作系统?
  • @Jabberwocky,macos
  • 你检查过 errno 的值吗?可能返回 NULL 因为 acl_get_file() 失败。
  • 您确定该文件存在于该位置吗?您的工作目录在哪里,您要读取的文件在哪里?也许您想使用绝对路径?
  • 那你修好路径就行了?

标签: c macos file permissions acl


【解决方案1】:

错误是使用类型ACL_TYPE_ACCESS。这就是导致错误的原因。

解决方案是改用 ACL_TYPE_EXTENDED 类型。

这也可以通过阅读头文件<sys/acl.h>得知:

typedef enum {
    ACL_TYPE_EXTENDED   = 0x00000100,
/* Posix 1003.1e types - not supported */
    ACL_TYPE_ACCESS         = 0x00000000,
    ACL_TYPE_DEFAULT        = 0x00000001,

为了记录,这里是获取文件 ACL 的示例代码:

const char *path = "/path/to/file";
acl_t acl = acl_get_link_np (path, ACL_TYPE_EXTENDED);
if (acl == NULL) {
    NSLog(@"%s – Error: %s", path, strerror(errno));
} else {
    const char *desc = acl_to_text (acl, NULL);
    NSLog(@"%s: %s", path, desc);
    acl_free ((void*)desc);
}
acl_free (acl);

【讨论】:

    猜你喜欢
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 2010-09-06
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    相关资源
    最近更新 更多