无名管道通讯编程

1. 核心理论

通讯目的:数据传输 资源共享 通知事件 进程控制

进程间通信IPC(interprocess communication)由以下几部分发展而来:
1. UNIX进程间通信
2. 基于System V进程间通信
3. POSIX进程间通信

POSIX(Portable Operating System Interface)表示可移植操作系统接口,电气与电子工程师协会IEEE最初开发POSIX标准,是为了提高UNIX环境下应用程序的可移植性,然而POSIX并不局限于UNXI,许多其他操作系统也支持,如microsoft windows

Linux进程间通信方式主要有:
1.无名管道pipe 
2.有名管道FIFO 
3.信号signal
4. 消息队列
5. 共享内存
6. 信号量
7. 套接字socket

管道通讯
一个进程在管道的尾部写入数据,另一个进程在管道的头部读取数据,管道包括有名管道和无名管道
有名管道:任意进程间通信
无名管道:父子进程间通信

特点:
1.管道通讯是单向的,有固定的读端与写端
2. 数据从管道中度出去后,数据在管道中就不存在了
3. 当进程去读空管道的时候,进程会阻塞
4. 当进程往满管道写入数据时,进程会阻塞
5. 管道容量为64KB

无名管道
在linux系统中,无名管道一旦创建完成后,操作无名管道等同于操作文件,无名管道的读取视作一个文件,无名管道的写端也被视作一个文件

2.函数学习

创建无名管道
函数名:pipe
函数原型:int pipe(int pipefd[2]);
函数功能:创建无名管道
头文件:<unistd.h>
返回值: 成功:0  失败:-1
参数说明: pipefd为文件描述符,pipefd[0]为读端,pipefd[1]位写端

#include <unistd.h>
#include <stdio.h>

void main()
{
	pid_t pid;
	int pipefd[2];
	char c_buff[10];
	
	pipe(pipefd);
	pid = fork();
	
	if(pid > 0)
	{
		write(pipefd[1],"hello",6);
		wait();
		close(pipefd[1]);
		exit(0);
	}
	if(pid == 0)
	{
		read(pipefd[0],c_buff,6);
		printf("child read %s\n",c_buff);
		close(pipefd[0]);
		exit(0);
	}
}

运行结果:child read hello



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值