Cソースコードを読むとき、私はsocket
関数が接続を開くために使用されるのを見ます。 Linuxカーネルのソースコード(バージョン3以上)のsocket
の定義をgrep
で検索すると、socket
には多くの呼び出しがありますが、定義はありません。ソケット関数定義?
socket
はどこですか?それはイーサネットカードのソースコードで定義されていますか?
Cソースコードを読むとき、私はsocket
関数が接続を開くために使用されるのを見ます。 Linuxカーネルのソースコード(バージョン3以上)のsocket
の定義をgrep
で検索すると、socket
には多くの呼び出しがありますが、定義はありません。ソケット関数定義?
socket
はどこですか?それはイーサネットカードのソースコードで定義されていますか?
socket()
関数はカーネル関数ではありません。libc
です。
socket()
内部を調べる場合は、glibc
(または標準Cライブラリの実装)のコードを取得し、カーネルコードは取得しないでください。
さらに深く、カーネルがソケットメカニズムをどのように実装しているかを調べる場合は、システムコールsys_socketcall()
を調べてください。
これはまったく真実ではありません - socket()はlibcではなくカーネル呼び出しです。マニュアルページはセクション3(libc)ではなくセクション2(カーネル)にあり、動作はCライブラリではなくカーネルで定義されていますカーネルコードには、どこを探しているのかが分かります。 libcには、それを呼び出すために必要なプラットフォーム固有のシステムコールメカニズムと、奇妙に構成されたシステム用のトラップを実装するコードがいくつかあります。 –
*「あなたの答えは、ほとんどの学生が私の会社のソフトウェアを通じて接続の確立を理解するのに役立ちます。 –
なぜ関数の定義を見る必要がありますか? –
私はあなたの意図にも疑問を呈していますが、ここでは、Googleを使うことができない人より深く深くなるリンクがあります:http://www.skyfree.org/linux/kernel_network/socket.html –