Linux Qt/C++ cdrecord 检测光驱状态
时间: 2025-07-06 08:58:06 浏览: 8
### Linux 中使用 `cdrecord` 检测光驱状态
在 Linux 系统中,可以利用命令行工具 `cdrecord` 来检测光驱的状态。此工具主要用于刻录 CD 和 DVD,但也提供了查询设备信息的功能。
为了获取光驱的信息,通常会执行带有 `-scanbus` 参数的 `cdrecord` 命令来扫描 SCSI 总线并报告连接到系统的驱动器[^1]:
```bash
sudo cdrecord -scanbus
```
上述命令将会显示所有可用的 SCSI 设备列表及其路径。对于 IDE 或 SATA 驱动器,在较新的内核版本下可能需要改用 `sg_map` 工具查看对应的 `/dev/sg*` 节点文件名。
当已知具体使用的设备节点名称时,可以通过指定该参数进一步检查特定光驱的状态:
```bash
sudo cdrecord dev=/dev/sr0 -inq
```
这里假设 `/dev/sr0` 是目标光盘驱动器所对应的操作系统设备节点;实际环境中应当替换为此处获得的实际值。以上指令能够返回关于选定硬件单元的一些基本信息,比如制造商 ID、产品型号以及固件修订版号等数据项。
如果希望集成这些功能至基于 Qt 的 C++ 应用程序,则需考虑调用外部进程的方式实现相同目的。下面给出一段简单的示范代码片段用于启动子进程中运行前述 shell 命令,并捕获其标准输出流作为应用程序内部处理的数据源:
```cpp
#include <QProcess>
#include <QDebug>
void checkCdromStatus() {
QProcess process;
QString program = "sh";
QStringList arguments;
// Prepare the command to execute.
arguments << "-c" << "sudo cdrecord dev=/dev/sr0 -inq";
// Start the process and wait until it finishes execution.
process.start(program, arguments);
if (!process.waitForStarted()) {
qDebug() << "Failed to start process.";
return;
}
if (!process.waitForFinished()) {
qDebug() << "Process failed or was terminated unexpectedly.";
return;
}
// Read all standard output from the executed command.
QByteArray result = process.readAllStandardOutput();
qDebug() << "CD-ROM status:" << result;
}
```
这段代码展示了如何通过 Qt 提供的 `QProcess` 类创建一个新的 Shell 进程实例化对象,并设置好待执行的具体命令字符串形式传递给它。之后便是等待这个新开启的任务完成工作周期结束为止,最后读取由之产生的任何打印消息内容呈现出来。
需要注意的是,由于涉及到权限问题(特别是针对某些操作),所以在编写此类涉及底层硬件访问的应用逻辑之前,请务必确认当前用户具有足够的授权级别来进行相应动作。
阅读全文
相关推荐


















