Linux编程:文件所在的设备

Linux编程:文件所在的设备,第1张

概述我想知道/ dev文件中的哪个条目.例如,如果/ dev / sdc1安装在/ media / disk下,我要求/media/disk/foo.txt,我想得到/ dev / sdc作为回应. 在该文件上使用stat系统调用,我将得到它的分区主要和次要数字(8和33,对于sdc1).现在我需要从中获取“root”设备(sdc)或其主要/次要设备.是否有任何系统调用或库函数可用于将分区链接到其主设 我想知道/ 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/sdcbrw-rw---- 1 root floppy 8,33 2011-04-01 20:00 /dev/sdc1

提前致谢!

解决方法 快速和脏的版本:df $file | awk’NR == 2 {print $1}’.

编程方式……好吧,我开始使用快速和脏的版本是有原因的.没有可移植的方法以编程方式获取已安装文件系统的列表. (getmntent()获取fstab条目,这不是一回事.)而且,你甚至无法可靠地解析mount(8)的输出;在不同的Unix上,mountpoint可能是第一个或最后一个项目.最便携的方法最终是…解析df输出(甚至那就是iffy,正如你注意到的分区号.).所以你要回到快速而又脏的shell解决方案,除非你想遍历/ dev并寻找匹配major(st_rdev)的block设备(major()来自sys / types.h).

如果将此限制为linux,则可以使用/ proc / mounts获取已安装文件系统的列表.其他特定的Unix也可以类似地进行优化:例如,在OS X和我认为FreeBSD上,您可以在vfs树上使用sysctl()来获取挂载点.在最坏的情况下,您可以找到并使用适当的头文件来解密挂载表文件的任何内容(是的,即使它有所不同:在Solaris上它是/ etc / mnttab,在许多其他系统上它是/ etc / mtab,一些系统将它放入/ var / run而不是/ etc,并且在许多linux上它不存在或者是/ proc / mounts的符号链接).它的格式在几乎所有类Unix *** 作系统上都有所不同.

总结

以上是内存溢出为你收集整理的Linux编程:文件所在的设备全部内容,希望文章能够帮你解决Linux编程:文件所在的设备所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1032187.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存