Unix:" ls -l"在设备的大小字段中获取以逗号分隔的值?

时间:2015-06-12 03:02:18

标签: c unix ls

当我在OS X上运行ls -l /dev时,我得到一个具有以下格式的输出(但是还有更多文件):

crw-rw-rw-  1 root       wheel            4, 126 Jun 11 20:28 ttywe
crw-rw-rw-  1 root       wheel            4, 127 Jun 11 20:28 ttywf

据我所知,它是特定于该文件夹的,我无法找到4,所指的任何地方。 我在C中重写ls,所以我想知道它是什么,如果可能的话,如何在C中检索该值。

1 个答案:

答案 0 :(得分:7)

来自the POSIX specification for ls

  

如果文件是特殊字符或块特殊文件,则可以使用与相关设备关联的实现定义信息替换文件的大小。

在这种特殊情况下,您几乎肯定会有一个实现打印主设备号和次设备号 - 这些值将传递给mknod以创建指向同一设备的文件。但是,没有任何实现 >来提供此信息,并且ls的实现可以在没有它的情况下符合标准。

如果你想知道如何在C中实现它,一个好的起点是man 2 statst_rdev是您在struct stat中关注的字段,此调用已填写完毕。在Linux上,您可以通过调用宏MAJOR(stat_result.st_rdev)MINOR(stat_result.st_rdev)来提取主要和次要数字(假设您告诉stat写入名为stat_result的结构)。