2013-06-20 34 views
1

嘗試後實施System Call,我完全糊塗了關於Linux:d「Linux Kernel API」,「System Calls」,「System Interfaces」和「GNU C Library」有什麼區別?

是什麼Linux Kernel APISystem CallsSystem InterfacesGNU C Library之間的區別?

我發現這些鏈接的每個項目:

Linux內核API

https://www.kernel.org/doc/htmldocs/kernel-api.html

的Linux系統調用

http://syscalls.kernelgrok.com/

http://lxr.free-electrons.com/source/arch/x86/syscalls/syscall_32.tbl

系統接口

http://pubs.opengroup.org/onlinepubs/9699919799/idx/functions.html

GNU C庫

http://www.gnu.org/software/libc/manual/html_node/index.html

我困惑的這些功能。

例如sprintf存在於Linux Kernel API中,但System Interfaces功能列表也包含此功能。某些功能不應在內核模式下使用(例如,printf)。許多功能做不同的名稱(如sys_openopen)相同的任務,等等...

我的問題是:

是什麼Linux Kernel APISystem CallsSystem InterfacesGNU C Library之間的區別? 我應該使用哪個函數,我不應該使用哪個函數?

哦!我忘了C standard library :)

+1

請閱讀[FAQ]和[Ask]。 SO是針對特定問題的,並不是真正的教程或討論網站。 –

+1

由於您已經完成了所有這些鏈接的收集工作,您現在有時間閱讀它們所指的內容了,對嗎? – alk

回答

8
  • C庫實現了C語言標準。這是通過調用特定於操作的函數來完成的,例如,寫入標準輸出。 C庫可以在很多很多系統上實現,如Linux,Windows,DOS和各種微控制器。

    術語「GNU C庫」大概是指C庫的特定實現,可能是GNU編譯器集合附帶的一個實現。

  • 操作系統公開了一個標準接口,它在Linux中通過系統調用完成。例如,通過調用write系統調用完成對標準輸出的寫入。 Linux(更普遍的是POSIX)爲系統調用提供了一個C庫,以方便使用。

    使用此係統界面可以實現C庫。例如,來自C庫的putc可以用write系統調用到文件描述符1來實現。

    MS Windows提供了一個類似的系統API,稱爲Windows API。它也可以用來實現C庫。內核API用於在內核中進行編程,例如內核編程。編寫驅動程序,或提供新的系統調用。

相關問題