socketpair 能够实现父子进程间的全双工通信
socketpair 函数原型:
int socketpair(int d, int type, int protocol, int sv[2]);
code:
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<string.h>
/*
socketpair();实现全双工通信
*/
int main()
{
int fd[2];
int ret;
pid_t pid;
ret = socketpair(AF_UNIX,SOCK_STREAM,0,fd);
if(ret < 0)
printf("socketpair call wrong\n");
pid = fork();
if(pid < 0)
printf("fork wrong\n");
else if(pid == 0) //child process
{
sleep(2);
close(fd[1]);
int val = 0;
int rev;
while(1)
{
read(fd[0],&rev,sizeof(rev));
printf("child rev data: %d\n",rev);
val ++;
printf("child send data:%d\n",val);
write(fd[0],&val,sizeof(val));
if(val == 10)
break;
}
}else{ //father process;
close(fd[0]);
int val = 0;
int rev;
while(1)
{
val ++;
printf("father send data:%d\n",val);
write(fd[1],&val,sizeof(val));
if(val == 10)
break;
sleep(1);
read(fd[1],&rev,sizeof(rev));
printf("father rev data:%d\n",rev);
}
}
waitpid(pid,NULL,0);
}