Linux的系統調用與函數庫的關係
最新
08-14
系統調用是應用程序與內核之間聯繫的一條紐帶,扮演著使者的身份。當應用程序需要內核幫它做點事情的時候,就可以通過系統調用把應用程序的要求傳遞給內核。系統調用隔離了用戶空間和內核空間,使應用程序無法任意訪問內核,保證了Linux操作系統的穩定可靠。
系統調用的另外一個好處就是屏蔽的內核底層的實現方法,用戶空間的應用程序無需知道自己用的是什麼架構的處理器,使用怎樣的存儲晶元等,便可以用統一的介面實現想要的功能。
但程序員在編程的時候似乎也很少接觸系統調用,一般不直接使用系統調用的介面去編程,而是使用的標準的API進行編程,而這些標準的API都來自於某一個函數庫,比如C庫。C庫提供了C語言各種標準函數的介面。程序員知道直接調用就可以,並不關心C庫底層是如何實現的。
其實C庫的實現跟系統調用息息相關。C庫通過一個或多個系統調用加上一些格式,功能的調整,然後組合成了一個C函數供程序員使用。比如printf()就使用了write()這個系統調用,printf()也加上了一些格式化的東西,比如用%d表示整型數。
所以一般函數庫是對系統調用的封裝,為程序員提供統一的API,程序員僅使用這些API即可完成編程。哪怕在別的操作系統,程序員也可能使用相同的API進行編程。比如標準C函數,在windows系統上可以使用,在Linux上面也可以使用。但windows上面的標準C庫和Linux上面的標準C庫是不同的,因為兩個系統的系統調用差別是很大的,需要使用不同的C庫。這就是為什麼不同操作系統的函數庫不能通用的原因。


TAG:小潮潮 |