Linux でソケットを作成するには、sys/socket.h ヘッダー ファイルをインクルードし、socket() 関数を使用します。ヘッダー ファイルは /usr/include/sys/socket.h にあります。
extern int socket (int __domain, int __type, int __protocol) __THROW;
socket() 関数が実際に実装されている場所を教えてください。
ありがとう。
実は、
int socket (int __domain, int __type, int __protocol) __THROW
glibcで実装され、
glibcは、カーネルファイルnet/socket.cに実装されているカーネル関数sys_socketを呼び出します。
asmlinkage long sys_socket(int family, int type, int protocol);
socket(2)はシステムコールです。Glibc内のsocket
関数は、実際のシステム コールを行うための小さなラッパーです。
アプリケーションの観点からは、システム コールはアトミックです。つまり、Linux アプリケーション プログラムが実行されている仮想マシンは、カーネルによって提供される 300 を超えるシステム コールで強化されたx86マシン (非特権命令セット) です。システムコールのコーディング方法を説明しているAssembly Howtoも参照してください。Linux カーネルとsyscalls (2)およびintro(2)のマニュアル ページの詳細を参照してください。
ソケットに関する実際の作業は、カーネル内で行われます。これはネットワーク サブシステムです。
これは => socket.cです。
通常、これを含むほとんどのソケット関数は、システム コール (カーネルへの直接呼び出し) のラッパーにすぎないため、すべての機能が万能なカーネル自体によって処理されます。
カーネルの実装は次のとおりです: SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol){...}