2017-06-19 49 views
1

我被問及系統調用,它們是什麼,它們使用了哪種模式,以及read(),getchar()和sqrt()是否使用系統調用。系統調用 - 內核使用的函數

對於第一部分,我回答說系統調用提供了進程和OS之間的接口,並且這些接口在內核模式下使用。

困擾我的事情是,對我來說,使用這3個系統調用的唯一函數是read()。

我對不對?或者getchar()和sqrt()也使用系統調用?

(注:從unistd.h中的getchar()stdio.h中和的sqrt(從文件math.h閱讀()))

+1

你覺得'getchar()'得到這個角色怎麼樣? – Stargateur

+1

有/系統也提供(d)數學庫。 – Olaf

+0

是的,我想過,但它不是一箇中間函數,其中包含系統調用? 編輯:因爲getchar()和sqrt()使用它們內部的系統調用。我可以說他們都是系統調用? –

回答

2

系統和普通電話之間的區別在於,一個系統調用有向操作系統發出陷阱,而常規調用只是調用另一個用戶級子例程。你說得對,區別在於呼叫在什麼模式下執行。

Sqrt不是系統調用。它所做的只是執行一個簡單的計算。如果我沒有記錯,read()和getchar()都是系統調用,因爲操作系統是處理輸入/輸出操作的人。

+0

哦,所以read()是一個直接的系統調用,getchar()在函數內使用系統調用,所以我們可以看到getchar()也是一個系統調用。唯一不是系統調用的人是sqrt(),因爲它執行了計算? –

+0

getchar()本身並不一定使用系統調用,因爲它是一個函數。它所做的是獲取標準輸入流中的下一個字符。這種對輸入/輸出流的訪問是常規流程在沒有操作系統的情況下所不能做到的,這就是爲什麼getchar是系統調用的原因。 –