Linux的文件系統是異步的,也就是說寫一個文件不是立刻保存到介質(硬盤,U盤等)中,而是存到緩沖區內,等積累到一定程度再一起保存到介質中。如果沒有umount就非法拔出U盤,程序是不知道的,fopen,fwrite等函數都依然返回正確,知道操作系統要把寫介質的時候,才會提示I/O錯誤。可是很多數據都會因為這個不及時的錯誤報告而丟失。
事實上,USB驅動程序在U盤插入和拔出時,都對系統配置文件做了修改。
例如U盤驅動程序會在插入或拔出時往 /proc/scsi/usb-storage-0/0 里面記上 Attached:Yes or No
通過查看這個文件就不難檢測U盤是否插入或拔出了。
注意:U盤是否插入的狀態與是否掛載(mount)無關。
當然這也不是唯一的方法檢測u盤的狀態。根據內核的設置情況,也可能沒有/proc/scsi目錄,但是/sys目錄下面會有usb的目錄,插拔u盤,目錄會自動創建和消失,如果上面的方法不可行,那么可以通過檢測這些目錄來判斷u盤或者sd卡等存儲設備的存在狀態,/sys/目錄下找到相關的usb或者sd卡的目錄,里面有更詳細的設備信息,包括設備出廠id,傳輸速度,容量等。