我正在尝试在不使用ls
函数的情况下在C中实现system
命令。
是否有C函数来获取目录/文件权限,以便我可以显示它们?
感谢。
答案 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)