Linux操作系統關於C library的理解?
1.GNU的glibc指的是圖中C Library嗎? 這個C Library是Linux操作系統的API嗎?2. Linux系統C語言編程都是通過調用C Library來實現的嗎?3.如何查看C Library裡面都有哪些函數?
4.System Call Interface指的是Linux Kernel API嗎?和C Library的區別?
1. 不是。glibc 是一種 C 標準庫的實現(但 glibc 裡邊不僅僅有 C 標準庫的內容,還有 POSIX 的內容,以及一些其它的東西)。除此之外還有不少針對嵌入式設備開發的 C 庫,如 musl、uclibc 以及 Android 的 bionic。「Linux操作系統的API」是個很模糊的概念。Linux 的 C 庫是 POSIX 標準的一部分,不是內核 API 的一部分,不是 X Window、Wayland 或者其它任何桌面環境的標準的一部分。2. 當然不是。不然你怎麼寫內核模塊?除此之外基本上正常的項目都會用 C 標準庫,因為它是 C 語言的標準運行時嘛。
3. 看 C 語言教材、POSIX 或者 glibc 文檔。
4. 是。內核 API 需要使用特別的方式(系統調用,x86_64 上是 syscall 指令,x86 上是 int $0x80 中斷)來調用。C 標準庫使用的是調用 C 語言函數的調用約定。1、glibc就是GNU C Library. glibc是一種C函數庫,是程序運行時使用到的一些API集合。目前最主要的應用是配合Linux內核,成為GNU/Linux操作系統一個重要的組成部分。Linux man中位於section 3.
2、不是. Linux C可以用到glibc函數(用戶空間),也可以用到system call函數(內核空間, 特殊許可權). 如Linux諸多命令的實現,cp、pwd、who、stty等等,socket編程(參看Unix/Linux編程實踐教程、APUE) system call在Linux man中位於sectino 2.
3、Linux 中如何快速查看 C 庫函數的頭文件以及相應的函數信息? - 詒條狗的回答
4、應用代碼可以直接調用system call(無緩衝、開銷大), 也可以調用C Library(有緩衝),某些C Library函數調用system call實現. 如C Library的malloc函數,調用的就是system call的sbrk函數實現的. (APUE人郵第三版第17-18頁)可以做一個實現,#include &
1.GNU的glibc指的是圖中C Library嗎?
glibc是GNU對於C標準庫的一個實現。
這個C Library是Linux操作系統的API嗎?
顯然不是。圖裡都明確地畫成兩坨了,你問個啥?
2. Linux系統C語言編程都是通過調用C Library來實現的嗎?
顯然不是。你若是不需要,就可以完全不用C標準庫的內容。
3.如何查看C Library裡面都有哪些函數?
依據C語言標準的規定。當然,具體在某個系統、某個編譯器里,人家可以不按規定來。
在Unix類的系統里,可以用man看第三頁。
4.System Call Interface指的是Linux Kernel API嗎?
對於Linux,是。
然而,顯然這個世界上有很多種操作系統,對於別的系統,顯然就不是了啊啊啊。和C Library的區別?
圖裡畫的很明白。
前面幾位回答的已經挺全面了,再補充點參考資料吧。
glibc , C Library 與 Linux system API 的關係可以參考《unix環境高級編程》1.11節
關於system call,並不需要什麼特別的調用方式,直接調就好了,open,close,lseek什麼的全都是system call
C Library包含的函數,《unix環境高級編程》2.2.1節和2.2.2節列出了一些標準頭文件及其功能,根據所需功能去看頭文件不就好了。推薦閱讀:
※如何訪問linux內核,讀取所有進程的task_struct結構?/dev/mem?還是編寫驅動程序?
※為什麼 Linux 不用微內核?
※在做完內核裁剪後,等待編譯結果的過程是一種怎樣的體驗?
※你為什麼學習 Linux 內核?
※多個socket同時發送數據,網卡是輪流發送每個socket數據包嗎?每個包多大?
TAG:Linux開發 | Linux內核 | UNIX環境高級編程書籍 |