UNIX环境C语言编程(13)-高级进程间通信

来源:互联网 发布:岂凡网络怎么样 编辑:程序博客网 时间:2024/05/16 14:02

1、Unix域的socket

Internet域的socket机制相比,Unix域的socket更有效:
1、无需执行协议处理   2、无需计算校验和    3、无需产生顺序号    4、无需确认
缺点是,只能在同一个主机上通信
 
先看一下socketpair函数,创建一对连接的Unixsocket
#include <sys/socket.h>
int socketpair(int domain,int type, int protocol, intsockfd[2]);
 
命名Unixsocket,以便非相关进程间通信,示例:
#include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#include <sys/un.h>int main(void){    int fd, size;    struct sockaddr_un un;    un.sun_family = AF_UNIX;    strcpy(un.sun_path, "foo.socket");    if( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0 )    {        perror("socket");        exit(0);    }    size = (int)((long)(&((struct sockaddr_un *)0)->sun_path));    size += strlen(un.sun_path);    if( bind(fd, (struct sockaddr *)&un, size) < 0 )    {        perror("bind");        exit(0);    }    printf("UNIX domain socket bound\n");    exit(0);}

剩余的操作与Internet域的socket机制类似,如:listenaccept

 

2、传递文件描述符

文件描述符在进程间传递是可行的
发送进程与接收进程共享同一个file table项,类似fork之后父子进程间描述符的的关系

0 0