进程有独立的用户内存地址,
进程的全局变量对其它进程透明,
需通过内核缓冲内共享数据,通信
管道: 声明在unistd.h头文件中
原型 int pipe(int filedes[2]); filedes[0]表示输入管道,filedes[1]表示输出管道. 返回值:0表示创建管道成功,-1为失败/
代码测试:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc,char* argv[])
{
int fd[2];
pipe(fd);//创建管道
pid_t pid = fork();//生成子进程
if(pid < 0){
perror("fork failed");
exit(1);
}
else if( pid >0){
close(fd[0]);//父进程关闭输入管道
write(fd[1],"hello child\n",12);//子进1向输出管道写入数据
wait(NULL);
}else{
close(fd[1]);//子进程关闭输出管道
char buf[50];
read(fd[0],buf,12);
//printf("%s",buf);
write(STDOUT_FILENO,buf,12);//此处也可以用dup2,将信息输出到终端
}
return 0;
}
如果想让子进程作为输出,父进程作为输出,可以使用wait(NULL) /wait(pid.....)让父进程处于阻塞状态,直到子进程完成输出.父 进程接收到signal后苏醒进行读取.在这里我没有过多的考虑PV操作了,可能会存在一些同步的问题,以后会进一步完善.
两个子进程间通信也是差不多的.
代码:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc,char* argv[])
{
int fd[2];
pipe(fd);
pid_t pid = fork();
if(pid < 0){
perror("fork failed");
exit(1);
}
else if( pid >0){
pid_t pidt = fork();
if(pidt == 0){
close(fd[0]);
write(fd[1],"hello borther\n",14);
}
}else{
close(fd[1]);
char buf[50];
read(fd[0],buf,14);
//printf("%s",buf);
write(STDOUT_FILENO,buf,12);
}
return 0;
}
分享到:
相关推荐
linux进程间通信管道的实现,ipc,进程间通信
Linux进程间通信小例子,包括管道,命名管道,信号,共享内存,消息队列等
IPC(InterProcess Communication)是各种进程通信方式的...前五种IPC只能用于一台主机内的进程间通信,套接口既可以用于一台主机内的进程间通信,也可以用于多台主机间的进程间通信。关于套接口将在网络编程中介绍。
Linux进程间通信之管道.适用于亲缘关系间的两个进程间,本程序为基本模型,实现了父子进程间的管道通信.
linux进程间通信,对管道、命名管道、信号、信号量、消息队列、共享内存等机制进行了分析与讲解,详细讲解了与这些进程间通信有关的C函数,并给出了示例程序,是讲解linux进程间通信不可多得的佳作。
Linux下6种进程间通信的服务端和客户端实例。
linux 进程间通信,对包括信号,管道,IPC机制,消息队列,共享内存都有详细描述
unix,linux,进程间通信IPC机制,管道,消息队列,共享内存 unix,linux,进程间通信IPC机制,管道,消息队列,共享内存 unix,linux,进程间通信IPC机制,管道,消息队列,共享内存
首先,进程间通信至少可以通过传送打开文件来实现,不同的进程...而Linux作为一种新兴的操作系统,几乎支持所有的Unix下常用的进程间通信 方法:管道、消息队列、共享内存、信号量、套接口等等。下面我们将逐一介绍。
通过生产者与消费者问题介绍Linux下进程通信方(IPC)法,包括管道(有名管道),信号,消息队列,信号灯与共享内存。其中消息队列,信号灯与共享内存是基于system V系统。v0.1版本。
- IPC对象(消息队列、共享内存和信号量)存在于内核而不是文件系统中,由用户控制释放(用户管理IPC对象的生命周期),不像管道的释放由内核控制。 - IPC对象通过其标识来引用和访问,所有的IPC对象在内核空间中唯一性...
1.2 Linux并发程序设计 计121晏霄122614 (实验估计时间:90分钟) 背景知识 实验目的 工具/准备工作 实验内容与步骤 背景知识 管道是Linux中最常用的进程间通信IPC机制。利用管道时,一个进程的输出可成为另 外一个...
进程间通信(IPC,InterProcessCommunication)是指在不同进程之间传播或交换信息。其中Socket和Streams支持不同主机上的两个进程IPC。以Linux中的C语言编程为例。管道,通常指无名管道,是UNIX系统IPC最古老的形式...
进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。共享数据:多个进程想要操作共享数据,一个进程对...linux下进程间通信的几种主要方式: (1)管道(pip
!89:;<支持管道和=>?@ABCDEF等多种进程间通信机制.现有的进程间通信机制存在着...<几种进程间通信的访问控制机 制.并提出了通过实现进程间通信的强制访问控制HIF(HJ:KJ@LM>INNA??FL:@MLO-来提高89:;<系统安全 的方法G
Linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的,最初Unix IPC包括:管道、FIFO、信号;System V IPC包括:System V消息队列、System V信号灯、System V共享内存区;Posix IPC包括: Posix消息...
Linux进程间通信 一、进程间通信概述 进程通信有如下一些目的: A、数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间 B、共享数据:多个进程想要操作共享数据,一个进程...
里面实现的进程间通信包括:共享内存,管道,消息队列,信号量等通信机制
课程内容:为什么需要进程通信、为什么进程空间是独立的、学习本章有什么意义、无名管道、有名管道、消息队列、共享内存、信号量。