cd 特殊文件

用途

提供对 CD-ROM 设备驱动程序的访问。

描述

CD-ROM 特殊文件提供对 CD-ROM 驱动器中磁盘的块和字符 (原始) 访问。

特殊文件名上的 R 前缀表示驱动器是作为原始设备而不是作为块设备访问的。 使用光盘执行原始 I/O 需要以压缩磁盘逻辑块长度的倍数进行所有数据传输的性能。 此外,对原始 CD-ROM 设备驱动程序执行的所有 寻求 子例程都必须将文件偏移量指针设置为指定逻辑块大小的倍数值。

CD-ROM 设备驱动程序

在 CD-ROM 设备驱动程序中使用的光盘是只读介质,可为大量数据提供存储器。 特殊文件 /dev/cd0/dev/cd1, ... 提供对光盘的块访问。 特殊文件 /dev/rcd0/dev/rc1, ... 提供字符访问权。

当从已安装的 CD-ROM 文件系统的驱动器中弹出 CD-ROM 光盘时,光盘上的文件将无法再被访问。 必须先卸载从 CD-ROM 安装的文件系统,然后才能重新访问这些文件。 应该退出在这些文件系统上打开文件的进程。 应该移动在这些文件系统上具有当前目录的进程。 如果这些操作不起作用,那么执行强制卸装。

对于已安装的 CD-ROM 文件系统,弹出 CD-ROM 光盘所导致的另一个问题是 命令可能变得无响应。 重新插入 CD-ROM 光盘将不会解决此问题。 所有进程 (图形和 ASCII) 都应该退出,并且应该强制卸载文件系统并重新安装。 然后,可以再次启动任何 命令。

与设备相关的子例程

大多数 CD-ROM 操作是使用 关闭 子例程实现的。 但是,为了某些目的,需要使用 奥佩克斯 (扩展) 子例程。

描述
openx 子例程 支持 奥佩克斯 子例程以向打开序列提供其他函数。 奥佩克斯 子例程需要适当的权限才能启动。 在没有适当授权的情况下试图执行该子程序,将导致返回值为 -1 ,全局变量 errno 设置为 EPERM
ioctl 子例程 IOCINFO ioctl 操作是针对使用 ioctl 子例程的所有设备驱动程序定义的。 其余 ioctl 操作都是特定于物理卷设备的操作。 对于以下操作,不需要诊断方式。 IOCINFO 操作返回 devinfo 结构,此结构在 devinfo.h 文件中定义。

错误代码

除了针对 ioctl 子例程列出的错误代码外,还可能存在以下错误代码:

描述
EACCES 在诊断方式下尝试了除 ioctl关闭 以外的子例程。
EACCES 在诊断方式下尝试了正常的 调用。
EFAULT 用户地址非法。
EBUSY 目标设备由另一个发起方保留。
EINVAL 已使用非只读方式打开设备。
EINVAL 子例程的 nbyte 参数不是块大小的偶倍数。
EINVAL 对于 CDIOCMD ioctl 操作而言,大于 255 的检测数据缓冲区长度无效。
EINVAL 对于 CDIOCMD ioctl 操作而言,大于驱动器所允许的数据缓冲区长度无效。
EINVAL 已尝试配置仍处于打开状态的设备。
EINVAL 给出了非法的配置命令。
电子文件 已尝试对已具有允许的最大开放设备数的 SCSI 适配器进行 调用。
ENOTREADY 驱动器中不存在任何光盘。
ENODEV 尝试访问一个未定义的设备。
ENODEV 尝试关闭一个尚未定义的设备。
EMEDIA 媒体已更改。
EIO 硬件错误或异常中止命令或非法请求。
EIO 已尝试在媒体结束后进行读取。
EPERM 此子例程需要适当的权限。
ESTALE 一个 CD-ROM 磁盘被弹出 (没有被用户先关闭) ,然后重新插入或被替换为第二个磁盘。
ETIMEDOUT I/O 操作已超过给定的计时器值。