2014-07-20 85 views
1

write()實現應該假定是隨機訪問,還是可以存在一些假設,就像它們將被順序執行一樣,並且增加偏移?FUSE的寫入順序保證

您將獲得用於指向描述VFS接口的POSIX或SUS規範部分鏈接的額外分數。

+0

Eh? Linux的VFS接口是一個實現細節;它不是由POSIX,SUS或任何其他外部標準指定的(儘管,可以肯定的是,它在可能的情況下符合它們)。同樣,FUSE也沒有被任何標準定義 - 它是它自己的,實現定義的野獸。 –

+0

@CharlesDuffy第一個是*問題。我認爲它是由POSIX或SUS規定的,但我找不到它。 –

回答

3

隨機,確定。有一個原因爲什麼readwrite接口同時取得大小和偏移量。你會注意到fuse_operations結構中不是 a seek字段;當用戶程序在FUSE文件上調用seek/lseek時,內核文件描述符中的偏移更新,但FUSE fs根本沒有通知。後來的讀寫操作剛剛開始以不同的偏移量來到你身邊,你應該能夠處理它。如果有關您的實施方式使其無法實現,那麼您應該返回-EIO上寫不能滿足。

3

除非您的FUSE文件系統有一些不尋常的現象會阻止現有文件被打開寫入,否則您的寫入操作的實現必須支持寫入任何偏移量 - 應用程序可以寫入文件中的任何位置lseek()在文件打開的時候,例如

fd = open("file", O_WRONLY); 

lseek(fd, SEEK_SET, 100); 
write(fd, ...); 

lseek(fd, SEEK_SET, 0); 
write(fd, ...); 
+0

我可以天真地寫什麼和我被告知要寫的地方,並且在文件大小發生變化時依靠操作系統來調用truncate(),或者我必須跟蹤最近編寫的位置,並在close()時自行截斷它? –