8
有syscall它允許Linux中的間接系統調用。使用它的原因是什麼 - 爲什麼它比直接調用函數更好?使用「系統調用」而不是直接調用函數的原因是什麼?
有syscall它允許Linux中的間接系統調用。使用它的原因是什麼 - 爲什麼它比直接調用函數更好?使用「系統調用」而不是直接調用函數的原因是什麼?
有時內核會添加系統調用,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而異。)
它們不應該因CPU而異,只能通過操作系統實現。 – Wug
@Wug:實際的系統調用號碼在x86,x86_64,ARM,PPC等上有所不同。 – Nemo
這將是操作系統的實現。它們不以任何方式依賴於CPU,它們被定義在某處的頭部並被編譯到內核中。 – Wug