Friday, July 6, 2012

Linux System API的分歧

Linux System API也太分歧了,同樣一個取得檔案屬性的API stat,system call就可以有
  1. stat
  2. lstat
  3. fstatat
  4. fstat
不同Linux平台還可以分64bit跟32bit版本(這可能是為了讓Linux Kernel可以在各種環境運作的關係,是頗有道理)

其實會發現fstatat只要傳入某些參數,其實幾乎完全可以取代stat跟lstat。
從Kernel Code來看,其實前3個函式實作上都只是簡單的前置處理,接著傳給一個 vfs_fstatat 函式作真正的處理。

不只stat,如getxattr,setxattr,listxattr,removexattr等都有這種狀況。

Windows的這方面就簡潔許多,Widnows有關檔案管理操作一切都從 CreateFile 開始,它會傳回一個Handle,之後不論任何有關該檔案的操作,皆使用這個Handle,並從這個Handle檢查權限,最後透過 CloseHandle 關閉Handle。

結果導致光虛擬化*stat跟*xattr就變成這樣。(如果在Windows下,其實*stat跟*xattr這類函式都不需要特別虛擬化,因為都是用Handle在操作,只要虛擬化 CreateFile 即可)


No comments:

Post a Comment