当我在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中检索该值。
答案 0 :(得分:7)
来自the POSIX specification for ls
:
如果文件是特殊字符或块特殊文件,则可以使用与相关设备关联的实现定义信息替换文件的大小。
在这种特殊情况下,您几乎肯定会有一个实现打印主设备号和次设备号 - 这些值将传递给mknod
以创建指向同一设备的文件。但是,没有任何实现 >>来提供此信息,并且ls
的实现可以在没有它的情况下符合标准。
如果你想知道如何在C中实现它,一个好的起点是man 2 stat
。 st_rdev
是您在struct stat
中关注的字段,此调用已填写完毕。在Linux上,您可以通过调用宏MAJOR(stat_result.st_rdev)
和MINOR(stat_result.st_rdev)
来提取主要和次要数字(假设您告诉stat
写入名为stat_result
的结构)。