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 操作已超过给定的计时器值。 |