2013-06-11 135 views
0

我有一個應用程序,在高級別同時執行SCSI READ10和WRITE10操作。當他們到達我的代碼的較低級別時,他們將調用write(),然後在/ dev/sgXX上調用read()。儘管我在收到我的應用程序命令的設備上收到了很奇怪的結果,但它們偶爾發生。這個低級同時寫()/ read()是否安全?或者,我可能會顛簸到HBA的數據?SCSI通用寫入()線程安全嗎?

回答

2

的讀寫應該是定義安全的,但:

1)閱讀和寫作,它發生在同一個文件描述符。如果不是,系統中的打開文件表可能有多個偏移量,導致數據以不一致的方式讀取和寫入。

2)如果您有一塊數據必須寫入磁盤,您是否在for循環中使用寫入?這是不安全的,因爲可以在兩次寫入調用之間啓動其他讀取或寫入操作。看看readv和writev來自動寫入大數據塊。