c - SCSI 通用 write() 线程安全吗?

标签 c linux scsi

我有一个应用程序可以同时执行 SCSI READ10 和 WRITE10 操作。当他们到达我的代码的较低级别时,他们调用 write(),然后调用/dev/sgXX 上的 read()。不过,我在接收我的应用程序命令的设备上得到了非常奇怪的结果,而且它们偶尔会发生。这种低级同步 write()/read() 安全吗?或者我是否可能正在将数据传输到 HBA?

最佳答案

根据定义,读写应该是安全的,但是:

1)读写,是否发生在同一个文件描述符上。否则,您系统中打开的文件表可能有多个偏移量,导致数据读写不一致。

2) 如果你有一个数据 block 必须写入你的磁盘,你是否在 for 循环中使用 write?这是不安全的,因为在两次写入调用之间可以启动其他读取或写入操作。查看 readv 和 writev 以原子方式写入大数据 block 。

关于c - SCSI 通用 write() 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17045665/

相关文章:

c - 使用 strtok 从文件读取正确的 "format"时出现问题

C 用指针参数定义函数指针

windows - 使用 Chef Knife winrm 将文件传输到远程 Windows 机器

c++ - 使用 SCSI 传递的 ioctrl

c - 从字符数组中获取一个 int

c - 什么是 C 中的标量变量?

c - Linux内核模块内存检查器

linux - 如何拆分变量以在行之间打印出其他内容?

performance - VMWare 服务器 : Virtual Hard Drive Type

linux - Linux 系统上的磁带状态中的这一行意味着什么?