是否有任何C函数来获取目录权限?

时间:2009-05-12 06:34:56

标签: c permissions

我正在尝试在不使用ls函数的情况下在C中实现system命令。

是否有C函数来获取目录/文件权限,以便我可以显示它们?

感谢。

3 个答案:

答案 0 :(得分:3)

stat()系统调用采用文件名字符串并返回以下结构:

struct stat {
    dev_t     st_dev;     /* ID of device containing file */
    ino_t     st_ino;     /* inode number */
    mode_t    st_mode;    /* protection */
    nlink_t   st_nlink;   /* number of hard links */
    uid_t     st_uid;     /* user ID of owner */
    gid_t     st_gid;     /* group ID of owner */
    dev_t     st_rdev;    /* device ID (if special file) */
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for filesystem I/O */
    blkcnt_t  st_blocks;  /* number of blocks allocated */
    time_t    st_atime;   /* time of last access */
    time_t    st_mtime;   /* time of last modification */
    time_t    st_ctime;   /* time of last status change */
};

这对目录条目和文件同样有效,而st_mode是您正在寻找的特定字段。

<sys/stat.h>头文件应包含该结构以及所有定义以及#defines和/或宏,以便智能地解码字段(有关示例,请参阅here)。

如果您对它的实际操作感兴趣,可以查看GNU coreutils中的ls源代码。但只能用它来教育自己。它是GPL所以你不能只是为了你自己的目的而抓住它,如果这是家庭作业,如果你把一些看起来太像这样的东西,你的教育者几乎肯定会失败你。

答案 1 :(得分:2)

查看stat()。听起来像是在Linux或POSIX系统上,所以应该是这样。

然后查看st_mode的{​​{1}}字段,它包含有关保护位的信息,这些信息通常统称为文件的“模式”(由struct stat命令反映这会改变设置。)

从二进制位到像ls这样的文本表示是一个有趣的挑战。

答案 2 :(得分:2)

stat函数系列(stat()lstat()fstat())。