linux c 进程 pipe 通信代码分析

[[email protected] 04]# cat ex04-3-pipe02.c

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <sys/types.h>

int main(void){

int result=-1;

int fd[2],nbytes;

pid_t pid;

char string[]="hello,pipe";

char readbuffer[80];

int *write_fd = &fd[1];  //可写

int *read_fd = &fd[0];  //read

result = pipe(fd);  //create pipe

if(-1 == result){

printf("create pipe faile");

return -1;

}

pid=fork(); //分叉程序

if(-1 == pid){

printf("fork 进程失败\n");

return -1;

}

if(0 == pid ){

close(*read_fd);

/*向管道端写入字符*/

result=write(*write_fd,string,strlen(string));

}else{

close(*write_fd);

/* read pipe data */

nbytes=read(*read_fd,readbuffer,sizeof(readbuffer));

printf("接收到%d 个数据,内容:%s \n",nbytes,readbuffer);

printf("sizeof(readbuffer) =  %d\n",sizeof(readbuffer));

}

return 0;

}

--------------测试结果

[[email protected] 04]# ./ex04-3-pipe02

接收到10 个数据,内容:hello,pipe

sizeof(readbuffer) =  80

linux c 进程 pipe 通信代码分析,布布扣,bubuko.com

时间: 2024-10-29 07:47:59

linux c 进程 pipe 通信代码分析的相关文章

「51单片机」RS232串口通信代码分析

想来想去不知道要怎么样把232串口通信说清楚,想想还是直接把代码分析一遍吧... 重点是“常用波特率与定时器1的参数关系”这张表格!波特率的设置很重要! 一.串口初始化 void usart_init() { SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1 TMOD = 0x20; //定时器工作方式2 PCON = 0x00; TH1 = 0xFD; //波特率9600.数据位8.停止位1.效验位无 (11.0592M) TL1 = 0xFD; ES = 1; //开

linux 时间戳,打戳代码分析,用于PTP报文协议

1.linux内核打戳查看 (1)打戳模式设置: 代码文件:     sk.c           ->   socket.c        sock.c 函数接口:    setsockopt -> setsockopt     sock_setsockopt 代码位置:     PTP代码    ->     内核代码 作用:设置软硬件时间戳,发送接收时间戳: (2)recvmsg调用UDP: recvmsg -> __sys_recvmsg -> sock_recvms

cinder-volume服务上报自己的状态给cinder-scheduler的rpc通信代码分析

以juno版本为基础,主要从消息的生产者-消费者模型及rpc client/server模型来分析cinder-volume是如何跟cinder-scheduler服务进行rpc通信的 1.cinder-scheduler服务的启动入口 cat /usr/bin/cinder-scheduler from cinder.common import config # noqa from cinder.openstack.common import log as logging from cinde

linux 守护进程(daemon process)代码-详细注释

1.进程组 组长不能创建新的 会话 2.会话首领可以重新打开控制终端 1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <sys/param.h> 5 #include <sys/stat.h> 6 #include <sys/types.h> 7 #include <fcntl.h> 8 #include <sig

【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)

在网络课程中,有讲到Socket编程,对于tcp讲解的环节,为了加深理解,自己写了Linux下进程Socket通信,在学习的过程中,又接触到了其它的几种方式.记录一下. 管道通信(匿名,有名) 管道通信,在一个进程之中,只能单一的对其写或者是读,而不可以及执行写操作又执行读操作.这一点,我们可以将其想象成我们的水管,分别连着不同的两端,在有水流的时候,一端只能进行输入,另一端只能进行输出,而不可以同时输入和输出. 管道又分为有名管道和匿名管道,两者的区别在于对于匿名管道,其只能在具有亲缘关系的父

Linux编程---进程通信

Linux的通信方式主要有分类有下面几种: -匿名管道和FIFO有名管道 -消息队列,信号量和共享存储 -套接字 .对于套接字的进程通信,我就留在套接字的文章中再写了. 一.管道 管道是最古老的进程通信机制了.提供进程间的单向通信. 1.创建管道 int pipe(int fdes[2]); 实际上管道通过参数返回读和写的两个文件描述符.相当于是打开了两个文件吧.但是这个文件是特殊的pipe文件.fdes[0]表示的是输入,fdes[2]表示的是输出.注意,这个函数只创建一个文件,而不是创建两个

linux kernel的中断子系统之(七):GIC代码分析

一.前言 GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其architecture specification目前有四个版本,V1-V4(V2最多支持8个ARM core,V3/V4支持更多的ARM core,主要用于ARM64服务器系统结构).目前在ARM官方网站只能下载到Version 2的GIC architecture specification,因此,本文主要描述符合V2规范的GIC硬件及其驱动. 具体GIC硬件的实现形态有两

Linux之进程通信20160720

好久没更新了,今天主要说一下Linux的进程通信,后续Linux方面的更新应该会变缓,因为最近在看Java和安卓方面的知识,后续会根据学习成果不断分享更新Java和安卓的方面的知识~ Linux进程通信的知识,建议参照<UNIX环境高级编程>这本书,这里也只是做一个总结: 1.线程:进程中的子线程之间的通信,线程之间的内存(变量)是共享的,通过共享内存也就是全局变量即可,注意互斥即可 2.进程:进程之间的通信必须要借助内核实现: 1)pipe: (无名)管道,只能用于父子进程间通信:单向的(一

Linux中断 - GIC代码分析

一.前言 GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器,其architecture specification目前有四个版本,V1-V4(V2最多支持8个ARM core,V3/V4支持更多的ARM core,主要用于ARM64服务器系统结构).目前在ARM官方网站只能下载到Version 2的GIC architecture specification,因此,本文主要描述符合V2规范的GIC硬件及其驱动. 具体GIC硬件的实现形态有两