`
M_ittrue
  • 浏览: 75213 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

linux进程间通信(IPC)与控制---管道

阅读更多

进程有独立的用户内存地址,

进程的全局变量对其它进程透明,

需通过内核缓冲内共享数据,通信


管道: 声明在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;
}
 

 

分享到:
评论

相关推荐

    ipc.rar_IPC_linux 进程_进程间通信_进程间通信ipc

    linux进程间通信管道的实现,ipc,进程间通信

    ipc.rar_ ipc_IPC_linux ipc_pipes_进程间通信ipc

    Linux进程间通信小例子,包括管道,命名管道,信号,共享内存,消息队列等

    linux进程间通信 教程

    IPC(InterProcess Communication)是各种进程通信方式的...前五种IPC只能用于一台主机内的进程间通信,套接口既可以用于一台主机内的进程间通信,也可以用于多台主机间的进程间通信。关于套接口将在网络编程中介绍。

    Linux进程间通信之管道

    Linux进程间通信之管道.适用于亲缘关系间的两个进程间,本程序为基本模型,实现了父子进程间的管道通信.

    linux 进程间通信

    linux进程间通信,对管道、命名管道、信号、信号量、消息队列、共享内存等机制进行了分析与讲解,详细讲解了与这些进程间通信有关的C函数,并给出了示例程序,是讲解linux进程间通信不可多得的佳作。

    Linux-IPC-进程间通信实例

    Linux下6种进程间通信的服务端和客户端实例。

    linux进程间通信

    linux 进程间通信,对包括信号,管道,IPC机制,消息队列,共享内存都有详细描述

    UNIX进程间通信.rar

    unix,linux,进程间通信IPC机制,管道,消息队列,共享内存 unix,linux,进程间通信IPC机制,管道,消息队列,共享内存 unix,linux,进程间通信IPC机制,管道,消息队列,共享内存

    Linux 进程通信

    首先,进程间通信至少可以通过传送打开文件来实现,不同的进程...而Linux作为一种新兴的操作系统,几乎支持所有的Unix下常用的进程间通信 方法:管道、消息队列、共享内存、信号量、套接口等等。下面我们将逐一介绍。

    Linux进程间通信之生产者消费者

    通过生产者与消费者问题介绍Linux下进程通信方(IPC)法,包括管道(有名管道),信号,消息队列,信号灯与共享内存。其中消息队列,信号灯与共享内存是基于system V系统。v0.1版本。

    IPC进程间通信

    - IPC对象(消息队列、共享内存和信号量)存在于内核而不是文件系统中,由用户控制释放(用户管理IPC对象的生命周期),不像管道的释放由内核控制。 - IPC对象通过其标识来引用和访问,所有的IPC对象在内核空间中唯一性...

    1.2--Linux并发程序设计.doc

    1.2 Linux并发程序设计 计121晏霄122614 (实验估计时间:90分钟) 背景知识 实验目的 工具/准备工作 实验内容与步骤 背景知识 管道是Linux中最常用的进程间通信IPC机制。利用管道时,一个进程的输出可成为另 外一个...

    进程间通信(IPC)介绍

    进程间通信(IPC,InterProcessCommunication)是指在不同进程之间传播或交换信息。其中Socket和Streams支持不同主机上的两个进程IPC。以Linux中的C语言编程为例。管道,通常指无名管道,是UNIX系统IPC最古老的形式...

    Linux进程通信(IPC)方式简介

    进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。共享数据:多个进程想要操作共享数据,一个进程对...linux下进程间通信的几种主要方式: (1)管道(pip

    linuxIPC机制安全性的研究及改进

    !89:;&lt;支持管道和=&gt;?@ABCDEF等多种进程间通信机制.现有的进程间通信机制存在着...&lt;几种进程间通信的访问控制机 制.并提出了通过实现进程间通信的强制访问控制HIF(HJ:KJ@LM&gt;INNA??FL:@MLO-来提高89:;&lt;系统安全 的方法G

    深刻理解Linux系统进程间通信

    Linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的,最初Unix IPC包括:管道、FIFO、信号;System V IPC包括:System V消息队列、System V信号灯、System V共享内存区;Posix IPC包括: Posix消息...

    进程通信.doc

    Linux进程间通信 一、进程间通信概述 进程通信有如下一些目的: A、数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间 B、共享数据:多个进程想要操作共享数据,一个进程...

    进程间通信

    里面实现的进程间通信包括:共享内存,管道,消息队列,信号量等通信机制

    《Linux系统编程、网络编程》第7章 进程间通信(本机IPC)

    课程内容:为什么需要进程通信、为什么进程空间是独立的、学习本章有什么意义、无名管道、有名管道、消息队列、共享内存、信号量。

Global site tag (gtag.js) - Google Analytics