4

Linux でソケットを作成するには、sys/socket.h ヘッダー ファイルをインクルードし、socket() 関数を使用します。ヘッダー ファイルは /usr/include/sys/socket.h にあります。

extern int socket (int __domain, int __type, int __protocol) __THROW;

socket() 関数が実際に実装されている場所を教えてください。

ありがとう。

4

3 に答える 3

4

実は、 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);
于 2012-04-06T02:59:09.950 に答える
1

socket(2)システムコールです。Glibc内のsocket関数は、実際のシステム コールを行うための小さなラッパーです。

アプリケーションの観点からは、システム コールはアトミックです。つまり、Linux アプリケーション プログラムが実行されている仮想マシンは、カーネルによって提供される 300 を超えるシステム コールで強化されたx86マシン (非特権命令セット) です。システムコールのコーディング方法を説明しているAssembly Howtoも参照してください。Linux カーネルとsyscalls (2)およびintro(2)のマニュアル ページの詳細を参照してください。

ソケットに関する実際の作業は、カーネル内で行われます。これはネットワーク サブシステムです。

于 2012-04-06T08:39:36.350 に答える
0

これは => socket.cです。

通常、これを含むほとんどのソケット関数は、システム コール (カーネルへの直接呼び出し) のラッパーにすぎないため、すべての機能が万能なカーネル自体によって処理されます。

カーネルの実装は次のとおりです: SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol){...}

于 2012-04-06T03:30:19.257 に答える