进程间通信
Posted helloworldcode
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程间通信相关的知识,希望对你有一定的参考价值。
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。进程间通信的方式有如下几种:
1.管道通信
特点:
管道只允许具有血缘关系的进程间通信,如父子进程间的通信。
- 它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。
管道并非是进程所有的资源,而是和套接字一样,归操作系统所有。可以将它看成文件系统,但该文件系统只存在于内存当中。
原型
#include <unistd.h>
/* Create a one-way communication channel (pipe).
If successful, two file descriptors are stored in PIPEDES;
bytes written on PIPEDES[1] can be read from PIPEDES[0].
Returns 0 if successful, -1 if not. */
extern int pipe (int fd[2]) __THROW __wur;
参数的说明:
? 字符数组fd是管道传输或者接收时用到的文件描述符,其中fd[0]
是接收的时候使用的文件描述符,即管道出口;而fd[1]
是传输的时候用到的文件描述符,即管道入口。
? 为了使数据可以双向传递,可以使用两个管道,一个管道负责进程1的写和进程2的读,另一个管道负责一个进程1的读和进程2的写。测试程序如下:
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#define BUF_SIZE 30
int main(){
int fds1[2], fds2[2];
/*
*注意:
* 此处不能写char* str1 = "Who are you?";
* 得到的sizeof(str1)等于8,该值实际上是指针的大小,并不是字符串数组的大小
* 这个时候要用strlen()函数(strlen的唯一标准是找‘ ’)
* 系统函数返回值是char *(#include <string.h>)类型的往往会在末尾加上'