进程间的几种通信方式

1、匿名管道pipe

2、命名管道FIFO

3、XSI IPC

  3.1、消息队列    

  3.2、信号量

  3.3、共享存储

4、网络套接字socket


1、匿名管道pipe

    匿名管道是半双工的,并且只能在具有公共祖先的两个进程之间使用。通常一个管道由一个进程创建,在进程调用fork之后,这个管道就能在父进程和子进程之间使用了。管道创建时会创建两个文件描述符,其中fd[0]为读而打开,fd[1]为写而打开。

#include "apue.h"

int main()
{
    int n;
    int fd[2];
    pid_t pid;
    char line[MAXLINE];
    
    if (pipe(fd) < 0) {
        err_sys("pipe error");
    }
    if ((pid = fork()) < 0) {
        err_sys("fork error");
    }
    else if (pid > 0) {
        close(fd[0]);
        write(fd[1], "hello world\n", 12);
    }
    else {
        close(fd[1]);
        n = read(fd[0], line, MAXLINE);
        write(STDOUT_FILENO, line, n);
    }
    exit(0);
}

2、命名管道FIFO

    pipe只能在两个相关的进程之间使用,而命名管道FIFO则可以在两个不相关的进程之间使用,使用的范围更广。 使用FIFO时,首先需要使用mkfifo来创建它,创建之后,可以使用文件的相关函数open、read、write、close等函数像普通文件一样操作这个命名管道。

  • 一般情况下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值