[英]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.