我有一个高级别的应用程序同时执行SCSI READ10和WRITE10操作。当它们到达我的代码的较低级别时,它们在/ dev / sgXX上调用write(),然后调用read()。我在接收应用程序命令的设备上得到了非常奇怪的结果,但它们偶尔会发生。这个低级同时写()/ read()安全吗?或者我可能会将数据转移到HBA?
答案 0 :(得分:2)
读取和写入应该是安全的,但是:
1)读取和写入,是否发生在同一个文件描述符上。如果没有,系统中的打开文件表可能有多个偏移量,导致数据以不一致的方式读写。
2)如果你有一个必须写入磁盘的数据块,你是否在for循环中使用write?这是不安全的,因为可以在两次写入调用之间启动其他读取或写入操作。看看readv和writev以原子方式编写大数据块。