Gri*_*eih 5 c linux file device
我想知道/ dev文件中的哪个条目.例如,如果/ dev/sdc1安装在/ media/disk下,我要求/media/disk/foo.txt,我想得到/ dev/sdc作为回应.
在该文件上使用stat系统调用,我将得到它的分区主要和次要数字(8和33,对于sdc1).现在我需要从中获取"root"设备(sdc)或其主要/次要设备.是否有任何系统调用或库函数可用于将分区链接到其主设备?或者甚至更好,直接从文件中获取该设备?
brw-rw---- 1 root floppy 8, 32 2011-04-01 20:00 /dev/sdc
brw-rw---- 1 root floppy 8, 33 2011-04-01 20:00 /dev/sdc1
Run Code Online (Sandbox Code Playgroud)
提前致谢!
快速而肮脏的版本: df $file | awk 'NR == 2 {print $1}'.
以编程方式......好吧,我开始使用快速和脏的版本是有原因的.没有可移植的方法以编程方式获取已安装文件系统的列表.(getmntent()获取fstab条目,这不是一回事.)而且,你甚至无法mount(8)可靠地解析输出; 在不同的Unix上,mountpoint可能是第一个或最后一个项目.最便携的方法最终是...解析df输出(即使这是不确定的,正如你注意到的分区号.).因此,无论如何,您都要回到快速而又脏的shell解决方案,除非您想要遍历/dev并查找具有匹配major(st_rdev)(major()来自sys/types.h)的块设备.
如果将此限制为Linux,则可以使用/proc/mounts获取已安装文件系统的列表.其他特定的Unix也可以类似地进行优化:例如,在OS X和我认为FreeBSD上,您可以sysctl()在vfs树上使用来获取挂载点.在最坏的情况下,您可以找到并使用适当的头文件来解密任何挂载表文件(是的,即使它有所不同:在Solaris上/etc/mnttab,在许多其他系统上/etc/mtab,有些系统将其放入,/var/run而不是/etc在许多Linux上它是要么不存在要么是符号链接/proc/mounts.它的格式在几乎所有类Unix操作系统上都有所不同.
| 归档时间: |
|
| 查看次数: |
4034 次 |
| 最近记录: |