C言語でsocketpairを使う方法は何ですか?
C言語では、socketpair関数を使用して、相互に接続されたソケットペアを作成することができます。これらのソケットは、同じプロセス内で通信するために使用できます。以下は、socketpair関数の使用方法です:
#include <sys/socket.h>
int socketpair(int domain, int type, int protocol, int sv[2]);
- ドメイン:指定されたプロトコルファミリー(AF_UNIXまたはAF_INETなど)。
- Type:指定ソケットの種類(SOCK_STREAMやSOCK_DGRAMなど)。
- プロトコル:指定されたプロトコルの種類(通常は0)。
- sv:整数型の配列、作成されたソケットのファイル記述子を格納するために使用される。
socketpair関数を呼び出すと、相互に接続された2つのソケットが作成され、プロセス間通信に使用できます。sv配列の最初の要素には最初のソケットのファイル記述子が格納され、2番目の要素には2番目のソケットのファイル記述子が格納されます。
以下は、socketpair関数の使用を示す簡単なサンプルプログラムです。
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
int main() {
int sv[2];
if (socketpair(AF_UNIX, SOCK_STREAM, 0, sv) < 0) {
perror("socketpair");
return 1;
}
char buf[256];
if (fork() == 0) {
close(sv[1]); // 关闭父进程的套接字
read(sv[0], buf, sizeof(buf));
printf("Child received message: %s\n", buf);
close(sv[0]);
} else {
close(sv[0]); // 关闭子进程的套接字
write(sv[1], "Hello from parent", 18);
close(sv[1]);
}
return 0;
}
上記の例では、最初にsocketpair関数が呼び出され、ソケットのペアが作成されました。それからfork関数が使用され、子プロセスが作成され、親子プロセス間で通信が行われました。親プロセスは子プロセスにメッセージを送信し、子プロセスはメッセージを受信して表示しました。最後に、すべてのソケットファイル記述子が閉じられました。