2012-09-05 50 views

回答

11

有時內核會添加系統調用,C庫需要一段時間來支持它們。

或者你正在編譯一箇舊的Linux發行版,但想運行在一個較新的發行版上。

示例代碼:

// syscall 277 is sync_file_range() on x86_64 Linux. The header 
// files lack it on scc-suse10 where we compile, but the 
// performance benefits are substantial, so we just call it 
// directly. FIXME someday. 
#define SYNC_FILE_RANGE_WRITE 2 
    syscall(277, fd, done, n, SYNC_FILE_RANGE_WRITE); 

但在一般情況下,有沒有優勢,使用syscall如果你的編譯環境C庫有你需要的東西。 (首先,它比使用Linux特定的接口更便於攜帶,因爲系統調用數量因CPU而異。)

+0

它們不應該因CPU而異,只能通過操作系統實現。 – Wug

+1

@Wug:實際的系統調用號碼在x86,x86_64,ARM,PPC等上有所不同。 – Nemo

+0

這將是操作系統的實現。它們不以任何方式依賴於CPU,它們被定義在某處的頭部並被編譯到內核中。 – Wug

相關問題