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

die*_*con 2 c unix ls

当我ls -l /dev在OS XI上运行时,获取具有以下格式的输出(但是更多文件):

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
Run Code Online (Sandbox Code Playgroud)

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

Cha*_*ffy 7

POSIX规范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).