在C語言中,可以使用socketpair函數來創建一對相互連接的套接字。這對套接字可以用于在同一進程內進行通信。下面是socketpair函數的使用方法:
#include <sys/socket.h>
int socketpair(int domain, int type, int protocol, int sv[2]);
調用socketpair函數后,會創建兩個互相連接的套接字,它們之間可以用于進程內通信。sv數組的第一個元素存放了第一個套接字的文件描述符,第二個元素存放了第二個套接字的文件描述符。
下面是一個簡單的示例程序,演示了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函數創建了一個子進程,并在父子進程之間進行了通信。父進程向子進程發送了一條消息,子進程接收到消息后打印出來。最后關閉了所有的套接字文件描述符。