1.非命名UNIX域套接字
linux下环境下使用socketpair函数创造一对未命名的,相互连接的UNIX域套接字:
#include <sys/socket.h>
int socketpair(int domain,int type,int protocol,int sockfd[]);
第一个参数用于表示创建的套接字的域,本地进程通信时,用AF_UNIX。
第二个参数表示要创建的套接字的类型,因为本地连接时可靠地,所以指定为SOCK_STREAM。
第三个参数表示所用的协议,通常设为0.
第四个参数表示存储套接字描述符的数组。
非命名UNIX域套接字类似于非命名管道,只有保存了域套接字文件描述符的进程可以使用它。
//s_pipe.c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/socket.h>
#define MAX 100
int main()
{
int sockfd[2];
pid_t pid;
char buf[MAX];
int n;
if(socketpair(AF_UNIX,SOCK_STREAM,0,sockfd)==-1){
perror("fail to create socker");
exit(1);
}else if(pid==0){
close(sockfd[0]);
strcpy(buf,"hello parent");
n=strlen(buf);
if(write(sockfd[1],buf,n)==-1){
perror("fall to write");
exit(1);
}
printf("the chlld done/n");
}else{
close(sockfd[1]);
if(read(sock[0],buf,MAX)==-1){
perror("fail to read");
exit(1);
}
n=strlen(buf);
buf[n]='/0';
printf("receive from child :%s/n",buf);
if(wait(NULL)==NULL){
perror("fail to wait");
exit(1);
}
printf(":the parent done/n");
}
return 0 ;
}
2.命名UNIX域套接字
与网络痛惜套接字一样,UNIX域套接字也要绑定地址,不过由于两者所是哟个的域不一样,所以其地址族也不一样。unix域套接字使用sockaddr_un结构表示,定义如下:
#include <sys/un.h>
struct sockaddr_un{
sa_family_t sun_family;//通信域,即AF_UNIX
char sun_path[108];//套接字文件的路径名
}
第二