SCIOREAD (读) SCSI 适配器设备驱动程序 ioctl 操作
用途
向选定的 SCSI 设备发出单块 SCSI 读 命令。
描述
SCIOREAD 操作允许调用者对所选适配器发出 SCSI 设备 读 命令。 系统管理例程使用此命令来配置 SCSI 设备。
SCIOREAD 操作的 阿尔格 参数是一个 sc_readblk 结构的地址。 此结构在 /usr/include/sys/scsi.h 头文件中定义。
此命令会导致 SCSI 适配器设备驱动程序发出 6 字节格式的 ANSI SCSI-1 读 命令。 该命令设置为仅读取一个块。 调用者提供:
- 目标设备 SCSI 和 LUN 标识
- 要读取的逻辑块号
- 设备上块的长度 (以字节为单位)
- 命令的超时值 (以秒计)
- 指向要将返回的数据放置在其中的应用程序缓冲区的指针
- Flags 参数
此命令的最大块长度为 4096 个字节。 如果发现该长度大于此值,那么将拒绝该命令。
在对该操作进行初始调用时,不得设置标志参数的 SC_ASYNC 标志。 仅当发生总线故障时,并且仅当这是调用者在发生此错误后的最后一次重试尝试时,才设置此标志。
注: SCSI 适配器设备驱动程序在执行此命令期间执行正常的错误恢复过程。
返回值
成功完成后,此操作将返回值 0。 否则,将返回 -1 值,并将 errno 全局变量设置为以下值之一:
| 值 | 描述 |
|---|---|
| EFAULT | 指示发生内核与用户空间之间的错误副本。 |
| EINVAL | 指示在发出此命令之前未发出 SCIOSTART 命令。 如果发出了 SCIOSTART 命令,那么这表示块长度字段值太大。 |
| EIO | 指示已发生 I/O 错误。 如果返回了 EIO 值,那么调用程序应该重试 SCIOREAD 操作,因为第一个命令可能已清除设备的错误情况。 在发生适配器错误的情况下,系统错误日志将记录适配器错误状态信息。 |
| ENOCONNECT | 表示发生了总线故障。 调用者应该通过在所传递参数的标志字节中设置 SC_ASYNC 标志进行重试来进行响应。 如果尝试了多次重试,那么仅应在设置了 SC_ASYNC 标志的情况下进行最后一次重试。 通常情况下, SCSI 适配器设备驱动程序无法确定哪个设备导致了总线故障,因此不会记录此错误。 |
| ENODEV | 指示没有 SCSI 控制器响应所请求的 SCSI 标识。 此返回值意味着指定的 SCSI 标识上不存在逻辑单元号 (LUN)。 此条件并不一定是错误,并且不会记录。 |
| ENOMEM | 指示没有足够的内存可用于完成命令。 |
| ETIMEDOUT | 指示适配器在内部超时值到期之前未以状态进行响应。 调用者应至少重试此命令一次,因为第一个命令可能已清除了设备的错误情况。 系统错误日志将记录此错误。 |
文件
| 项 | 描述 |
|---|---|
| /dev/scsi0, /dev/scsi1,..., /dev/scsin | 提供一个接口以允许 SCSI 设备驱动程序访问 SCSI 设备/适配器。 |
| /dev/vscsi0, /dev/vscsi1, ... , /dev/vscsin | 提供一个接口以允许 SCSI-2 快速/宽适配器 /A 和 SCSI-2 差分快速/宽适配器 /A 设备驱动程序访问 SCSI 设备或适配器。 |