这些是单比特或多比特值,可以进行“或”运算组合
SG_FLAG_DIRECT_IO 这是一个对数据传输的直接 IO 请求。如果无法执行,驱动程序会自动执行间接 IO 作为替代。如果需要 выяснить 执行了哪种 IO 类型,请在请求包完成后(即在 read() 或 ioctl(,SG_IO,) 之后)检查 'info' 中的 SG_INFO_DIRECT_IO_MASK 掩码的值。默认行为是执行间接 IO。
SG_FLAG_LUN_INHIBIT sg 驱动程序的默认行为是用与文件描述符设备关联的 LUN,在内部覆写第二个 SCSI 命令字节的最高 3 位。要禁止此行为,请设置此标志。对于 SCSI 3(或更新版本)设备,此内部 LUN 覆写不会发生。
SG_FLAG_MMAP_IO 当设置此标志后,驱动程序会尝试获取预留缓冲区。如果预留缓冲区已被占用 (EBUSY) 或过小 (ENOMEM),则操作 (write() 或 ioctl(SG_IO)) 将会失败。在 dxferp 指针和预留缓冲区之间不会发生数据传输 (dxferp 会被忽略)。为了让用户应用程序访问 mmap 映射的 IO,它必须在此 sg 文件描述符上成功执行相应的 mmap() 系统调用。当设置此标志时,write() 或 ioctl(SG_IO) 不会检查此先决条件。同时设置此标志和 SG_FLAG_DIRECT_IO 会导致 EINVAL 错误。
SG_FLAG_NO_DXFER 当设置后,用户空间到内核缓冲区或从内核缓冲区的数据传输将不会发生。这仅在间接 IO 期间生效。此标志用于测试总线速度(例如,“sg_rbuf”工具会使用它)。