ホームページ  >  記事  >  ソケットペアの使用法とは何ですか?

ソケットペアの使用法とは何ですか?

小老鼠
小老鼠オリジナル
2023-09-15 16:33:411109ブラウズ

socketpair は、互いに接続されたソケットのペアを作成するために使用される関数です。これは、同じプロセス内のプロセス間通信 (IPC) のために Unix システムで広く使用されています。関数のプロトタイプは「intソケットペア(intドメイン, intタイプ, intプロトコル, int sv[2]);」です。この関数で作成されるソケットはプロセス間の双方向通信を実現でき、プロセス間のデータ送信、同期、通知などの機能を実現することができます。

ソケットペアの使用法とは何ですか?

socketpair は、互いに接続されたソケットのペアを作成するために使用される関数です。これは、同じプロセス内のプロセス間通信 (IPC) のために Unix システムで広く使用されています。

socketpair 関数のプロトタイプは次のとおりです。

int socketpair(int domain, int type, int protocol, int sv[2]);

パラメータの説明:

-domain: ソケットのプロトコル ファミリ (通常は AF_UNIX) を指定します。

- type: ソケットのタイプを指定します。通常は SOCK_STREAM (ストリーム ソケット) または SOCK_DGRAM (データグラム ソケット) です。

-protocol: ソケットのプロトコルを指定します (通常は 0)。

- sv: 作成されたソケットを保存するために使用されるファイル記述子。

socketpair 関数の戻り値は、成功の場合は 0、失敗の場合は -1 です。

socketpair 関数を使用して、プロセス間通信に使用できる接続されたソケットのペアを作成します。ペアのソケットの 1 つはデータの読み取りに使用され、もう 1 つはデータの書き込みに使用されます。同じプロセス内で、このソケットのペアをプロセス間通信に使用して、プロセス間のデータ送信を実現できます。

以下は、プロセス間通信にsocketpair関数を使用する例です:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
int main() {
    int sv[2];
    if (socketpair(AF_UNIX, SOCK_STREAM, 0, sv) == -1) {
        perror("socketpair");
        exit(1);
    }
    pid_t pid = fork();
    if (pid == -1) {
        perror("fork");
        exit(1);
    }
    else if (pid == 0) {
        // 子进程
        close(sv[0]); // 关闭子进程中的读取套接字
        char *message = "Hello from child process!";
        if (write(sv[1], message, strlen(message)) == -1) {
            perror("write");
            exit(1);
        }
        close(sv[1]); // 关闭子进程中的写入套接字
        exit(0);
    }
    else {
        // 父进程
        close(sv[1]); // 关闭父进程中的写入套接字
        char buffer[1024];
        if (read(sv[0], buffer, sizeof(buffer)) == -1) {
            perror("read");
            exit(1);
        }
        printf("Message from child process: %s\n", buffer);
        close(sv[0]); // 关闭父进程中的读取套接字
        exit(0);
    }
}

この例では、最初にsocketpair関数を呼び出してソケットのペアを作成し、次にソケットのペアを作成します。 fork 関数を通じて作成される子プロセス。子プロセスでは、読み取りソケットが閉じられ、書き込み関数を使用して書き込みソケットにデータが書き込まれます。親プロセスでは、書き込みソケットが閉じられ、その後、読み取り関数を使用して読み取りソケットからデータが読み取られます。

socketpair関数で作成したソケットはプロセス間の双方向通信を実現し、プロセス間のデータ送信、同期、通知などの機能を実現することができます。実際のアプリケーションでは、特定のニーズに応じてソケットペア関数をプロセス間通信に使用できます。

以上がソケットペアの使用法とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。