进程通信(管道 单向通信)

 1 #include<stdio.h>
 2#include<sys/wait.h>
 3#include<unistd.h>
 4#include<string.h>
 5#include<stdlib.h>
 6int main()
 7 {
 8    int pipefd[2];
 9    if(pipe(pipefd)==-1)
 10    {
 11     perror("pipe");
 12     return -1;
 13    }
 14   pid_t pid=fork();
 15   if(pid<0)
 16    {
 17      perror("pid");
 18      return -1;
 19    }
 20   else if(pid==0)
 21    {
 22       close(pipefd[0]);
 23       char buf[20]="we are young";
 24        int i=0;
 25       while(i<10)
 26     {
 27       write(pipefd[1],buf,strlen(buf));
 28       sleep(1);
 29       i++;
 30     }
 31      exit(1);
 32    }
 33   else
 34    {
 35     close(pipefd[1]);
 36     char buf[200];
 37     int j=0;
 38     while(j<10)
 39     {
 40     memset(buf,‘\0‘,sizeof(buf));
 41     ssize_t size= read(pipefd[0],buf,sizeof(buf));
 42       if(size>0)
 43       printf("%s\n",buf);
 44      j++;
 45     }
 46    if(waitpid(pid,NULL,0)==pid)
 47    {
 48       printf("wait success\n");
 49     }
 50    }
 51   return 0;
 52 }
 
 
 Makefile:
 1 Pipe:pipe.c
 2         gcc -o [email protected] $^
 3.PHONY:clean
 4clean:
 5         rm -f pipe

时间: 2024-10-06 20:15:53

进程通信(管道 单向通信)的相关文章

进程通信----管道(pipe)

 Linux管道的实现机制 在Linux中,管道是一种使用非常频繁的通信机制.从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为: ·      限制管道的大小.实际上,管道是一个固定大小的缓冲区.在Linux中,该缓冲区的大小为1页,即4K字节,使得它的大小不象文件那样不加检验地增长.使用单个固定缓冲区也会带来问题,比如在写管道时可能变满,当这种情况发生时,随后对管道的write()调用将默认地被阻塞,等待某些数据被读取,以便腾出足够的

Linux基础篇 进程通信——管道

IPC(InterProcess Communication)进程间通信 每个进程各?自有不同的?用户地址空间,任何?一个进程的全局变量在另?一个进程中都看不到所以进 程之间要交换数据必须通过内核,在内核中开辟?一块缓冲区,进程1把数据从?用户空间拷到内核缓 冲区,进程2再从内核缓冲区把数据读?走,内核提供的这种机制称为进程间通信. linux下进程间通信的几种主要?手段简介: 1 管道(Pipe)及有名管道(named pipe):管道可?用于具有亲缘关系进程间的通信,有名管道克服了管道没有名

Linux进程通信——管道

进程间通信(IPC:Inner Proceeding Communication) 进程是操作系统实现程序独占系统运行的假象的方法,是对处理器.主存.I/O设备的抽象表示.每个进程都是一个独立的资源管理单元,每个进程所看到的是自己独占使用系统的假象,因此各个进程之间是不能够直接的访问对方进程的资源的,不同的进程之间进行信息交互需要借助操作系统提供的特殊的进程通信机制. 进程之间的通信,从物理上分,可以分为同主机的进程之间的通信和不同主机间的进程之间的通信.从通信内容方式上分,可以分为数据交互.同

linux-IPC进程通信-管道

管道是Linux支持的最初Unix IPC形式之一. 管道是半双工的,数据只能向一个方向流动: 一个管道只能负责一个方向的数据传输. 需要双方通信时,需要建立起两个管道: 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程): 假如进程A与进程b通信,需要建立两个管道: 一个管道只能用于一个方向的通信,其另外的方向需要关闭. 封装的管道类,头文件: #ifndef CPIPE_H #define CPIPE_H #include <cstddef> #define  SOCKET int #

进程通信——匿名管道

有的时候在程序的开发过程中,两个进程之间会有数据的交互.信号的机制能够实现进程通信.它通过 “中断--响应” 的异步模式来工作.但作为通信来讲,信号还是远远不够的.因为它不能够携带任何其他的信息.只利用信号机制来实现进程通信显得捉襟见肘,并且信号的优势并不此.所以必须开发新的进程间通信的方法.本文所学习的 "匿名管道" 便是其中的一种最简单的方法. 基本概念 在讲管道的基本概念之前,首先提一个问题.如果让你来设计进程通信的方式,你会怎么做?最简单的方式莫过于两个进程打开同一个文件,这样

C#中使用命名管道进行进程通信的实例

原文:C#中使用命名管道进行进程通信的实例 1 新建解决方案NamedPipeExample 在解决方案下面新建两个项目:Client和Server,两者的输出类型均为"Windows 应用程序".整个程序的结构如下图所示. 2 实现项目Client Client仅包含一个名为"客户端"的窗体,如下图所示. 编写窗体后端代码,如下所示. using System; using System.IO; using System.IO.Pipes; using Syste

Linux 进程通信之管道

管道是单向的.先进先出的,它把一个进程的输出和另一个进程的输入连接在一起.一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读出数据.数据被一个进程读出后,将被从管道中删除,其他读进程将不能再读到这些数据.管道提供了简单的流控制机制,进程试图读空管道时,进程将阻塞.同样,管道已经满时,进程再试图向管道写入数据,进程将阻塞. 管道包括无名管道和有名管道两种,无名管道只能用于父进程和子进程间的通信,而有名管道可以用于同一系统中的任意两个进程间的通信. 无名管道由pipe()函数

进程通信-无名管道

无名管道:主要是针对进程通信的(自己感觉它有很大的局限性) 特点:它不是一个文件系统,不能按名访问,这也是它和有名管道之间最大的区别.无名管道只是一个系统内存里面的东西. 半双工模式,数据只能流向一个方向(老师给我们举得例子就是水厂的水到居民用水,不可能倒着流对吧). 进程之间通信,但是只能是有亲缘关系的进程才能进行通信?比如父子进程:因为在父子进程中,子进程拷贝父进程的数据段,这让这两个进程在通信的时候就有了相连的关系. 下面我们来看一下:无名管道的创建,写入,读取,关闭(我用的的是Liunx

命名管道进程通信

命名管道进程通信 效果:server读取client发送的字符串. server: client: control: 运行效果 命名管道进程通信

Linux学习笔记(13)-进程通信|命名管道

匿名管道只能在具有亲属关系的进程间通信,那么如果想要在不具有亲戚关系,想在陌生人之间通信,那又该怎么办呢? 别慌,Linux身为世界上*强大的操作系统,当然提供了这种机制,那便是命名管道-- 所谓命名管道,那便是拥有名字的管道,同时也被称之为FIFO,谈到FIFO,那么做过单片机开发的同学想必是不陌生的. 在很多单片机的项目中,都使用过FIFO,FIFO其实是一种队列,先进先出,这样可以保证读出数据和写入数据的一致性. 使用FIFO文件,便可以在不同的,且不具有亲属关系的进程中进程通信. 创建命