在Linux中,socketpair()函數用于創建一對相互連接的套接字。它可以用于在同一個進程內部進行進程間通信(Inter-Process Communication,IPC)。
socketpair()函數的原型如下:
#include <sys/types.h>
#include <sys/socket.h>
int socketpair(int domain, int type, int protocol, int sv[2]);
參數說明:
socketpair()函數創建了一對連接的套接字,這兩個套接字可以通過索引0和1在同一個進程內進行通信。其中,索引0的套接字用于讀取數據,索引1的套接字用于寫入數據。
下面是一個使用socketpair()函數進行進程間通信的示例:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
int main() {
int sv[2];
char buf[1024];
pid_t pid;
if (socketpair(AF_UNIX, SOCK_STREAM, 0, sv) < 0) {
perror("socketpair");
return 1;
}
pid = fork();
if (pid < 0) {
perror("fork");
return 1;
} else if (pid == 0) {
// 子進程
close(sv[0]); // 子進程關閉讀取端
write(sv[1], "Hello from child", sizeof("Hello from child"));
close(sv[1]);
} else {
// 父進程
close(sv[1]); // 父進程關閉寫入端
read(sv[0], buf, sizeof(buf));
printf("Received: %s\n", buf);
close(sv[0]);
}
return 0;
}
在上述示例中,首先使用socketpair()函數創建了一對相互連接的套接字,然后通過fork()函數創建了一個子進程。子進程使用write()函數向父進程傳遞了一段信息,父進程使用read()函數讀取到了子進程發送的信息,并進行打印輸出。
總結來說,socketpair()函數可以用于在同一個進程內進行進程間通信,提供了一種簡單的方式來實現進程間數據傳遞。