當我們調用一個系統(tǒng)調用時始绍,它是怎樣一步一步跑到操作系統(tǒng)里去的呢?所謂的陷入內核是什么意思话侄?
glibc
平時我們使用系統(tǒng)調用時亏推,并不是直接使用內核暴露的函數(shù)名字的学赛,我們實際上是調用的glibc提供的函數(shù),而且我們平時引用的系統(tǒng)調用的頭文件也來自glibc吞杭。
例子——pwrite
我為什么選pwrite呢盏浇?因為這個名字不容易被使用,在搜索的時候搜出來的東西比較少芽狗,會比較好研究绢掰。如果研究open,這個單詞就比較常用了童擎,研究起來稍微不方便一點滴劲。
先從頭文件glibc/include/unistd.h下手,man 2 pwrite
一下就知道顾复,里面肯定有pwrite的定義班挖,然而并沒有,不信你看芯砸,只有下面這些萧芙。
extern ssize_t __pwrite (int __fd, const void *__buf, size_t __n,
__off_t __offset);
libc_hidden_proto (__pwrite)
extern ssize_t __libc_pwrite (int __fd, const void *__buf, size_t __n,
__off_t __offset);
extern ssize_t __pwrite64 (int __fd, const void *__buf, size_t __n,
__off64_t __offset);
libc_hidden_proto (__pwrite64)
extern ssize_t __libc_pwrite64 (int __fd, const void *__buf, size_t __n,
__off64_t __offset) attribute_hidden;
純潔的pwrite哪去了?