簡體   English   中英

在linux中函數調用如read(),write()實際系統調用嗎?

[英]Are function calls like read() , write() actual system calls in linux?

我一直用C / C ++編寫程序,使用Linux API並進行系統調用,如fork(),read(),write()等。現在,我開始懷疑這些庫函數是否實際上是系統調用,或者它們是某種包裝函數。

當程序調用write()時會發生什么? 這個函數如何與內核交互? 如果這是一個包裝,那么我們為什么需要呢?

所有這些函數都是libc.so中真正的用戶空間函數,你的二進制文件是鏈接的。 但是大多數只是系統調用的小包裝器,它們是用戶空間和內核之間的接口(另請參閱syscall(2) )。

請注意,除了調用內核(如execl(3) )之外,純粹用戶空間(如fmod(3) )或在用戶空間中執行某些操作的函數在第3節中有自己的聯機幫助,而只調用內核的函數(如read(2) )將它們放在第2節中。

使用這個簡單的代碼:

int main()
{
    int f = open("/tmp/test.txt", O_CREAT | O_RDWR, 0666);
    write(f, "hello world", 11);
    close(f);

    return 0;
}

你可以使用strace來查找二進制文件中使用的系統調用:

gcc test.c -o test
strace ./test

結果是這樣的:

.
.
.
open("/tmp/test.txt", O_RDWR|O_CREAT, 0666) = 3
write(3, "hello world", 11)             = 11
close(3)                                = 0
exit_group(0)                           = ?

至於fork() ,它實際上是clone()系統調用的包裝器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM