c++ - 如何将 s.st_dev 转换为/sys/block/<name>

标签 c++ c linux

我想确定文件是位于 HDD 还是 SDD 上。

我发现我可以使用 /sys/block 信息检查驱动器类型:

prompt$ cat /sys/block/sdc/queue/rotational
1

如果它是旋转的或未知,则它具有1。当磁盘是SSD时,它是0

现在我有一个文件,并且知道它是在 HDD 还是 SDD 上。我可以stat()文件来获取设备编号:

struct stat s;
stat(filename, &s);
// what do I do with s.st_dev now?

我想将 s.st_dev 转换为 C 语言 /sys/block 目录中的驱动器名称。

我必须使用哪些函数才能获取该信息?或者它在某些 /proc 文件中可用?

最佳答案

首先对于输入文件,我们需要记录该文件存在于哪个分区上 您可以使用以下命令来实现

 df -P <file name> | tail -1 | cut -d ' ' -f 1

这会给你类似这样的输出:/dev/sda3

现在您可以应用以下命令来确定 HDD 、 SDD

cat /sys/block/sdc/queue/rotational

您可以在程序中使用popen来获取这些系统命令的输出

关于c++ - 如何将 s.st_dev 转换为/sys/block/<name>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57642729/

相关文章:

linux - 使用 sed 命令,替换行,但不替换匹配的模式

java - Eclipse 中的平台特定代码

c++ - 尝试在 64 位数据类型上运行简单的模板化内核时出现 cudaErrorLaunchFailure

c++ - C++ 标准库中是否有用于比较迭代器类别的工具

c - 如何调试产生意外变量值的 C 程序?

c - strcat 上的段错误

c++ - Visual Studio ,C++ : run main() in dll?

c++ - Win32 C++ GUI - 获取输入文本并在另一个窗口中显示

似乎无法使 C TCP 服务器-客户端通信正确

Linux - 拖延时间