Cライブラリは、Cプログラムでシステムコールを実行するために使用できるwrite()、read()、open()、およびその他の関数を提供します。これらの関数のソースコードはどこにありますか?
答え1
これはカーネルによって実装されるシステムコールです。とで見つけることができますread
。以下のようにバージョンを呼び出すことはすべてです。write
fs/read_write.c
read
write
ksys
ksys_read
ksys_write
SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)
{
return ksys_read(fd, buf, count);
}
ssize_t ksys_read(unsigned int fd, char __user *buf, size_t count)
{
struct fd f = fdget_pos(fd);
// ...
}
答え2
最近のlwn記事には、カーネル側のシステムコールの詳細な詳細な説明があります。http://lwn.net/Articles/604287/。
答え3
標準Cライブラリのソースコードが必要な場合は、@goldilocksが提供するリンクを確認してください。
Linuxシステムコールのソースコードを知りたい場合は、Linuxのソースコードを検索する必要があります。システムコールは、Linuxソースコードの複数の場所で定義されています。 grepを使用して文字列マクロを見つけることができますSYSCALL_DEFINE
。
grep -r -n SYSCALL_DEFINE /path/to/linux_source
それらのいくつかはあなたが見ることができますここ。
答え4
GNUのlibcの後、他のlibc実装のソースコードを見ることができます。
無実ナビゲーション用のオンラインソースコードがあります。ほとんどのシステムコールここにあります。。
誰かを置いた。Libcをgithubに移植します。 しかし、これは非公式と見なされます。