这次要给大家分享的是关于socketpair相关知识,我们知道pipe是用来创建管道实现通信的,而单个管道只能单向通信,一端用于读而另一端用于写,如果要实现双向通信(两端都可以读,都可以写),必须创建一对管道。
而socketpair可以⽤用来创建双向通 信的管道,具体实现如下:
代码:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
int main()
{
int fd[2];
int ret = socketpair(PF_LOCAL, SOCK_STREAM, 0, fd);
if (ret != 0)
{
perror("socketpair()");
return ret;
}
pid_t id = fork();
if (id < 0)
{
perror("fork()");
return id;
}
else if (id == 0)
{
close(fd[0]);
char buf[512];
while (1)
{
memset(buf, 0, sizeof(buf));
strcpy(buf, "hello world");
write(fd[1], buf, sizeof(buf));
read(fd[1], buf, sizeof(buf));
sleep(1);
printf("%s\n", buf);
}
}
else if (id > 0)
{
close(fd[1]);
char buf[512];
while (1)
{
memset(buf, 0, sizeof(buf));
read(fd[0], buf, sizeof(buf));
printf("%s\n", buf);
strcpy(buf, "hello world too!");
write(fd[0], buf, sizeof(buf));
}
}
else
{}
return 0;
}
运行结果如下图: