Linux学习笔记26——管道

1,引入

     管道是进程间通信(IPC)的最常用的用法,但是它有两个限制:

  1. 管道只能在具有公共祖先的两个进程之前使用,通常是在父进程和子进程之间;
  2. 管道通常都是半双工的,即要么父进程写子进程读;要么子进程写父进程读;

函数原型如下:

#include<unistd.h>
int pipe(int fd[2]);

输入参数是创建管道成功后,输入端(fd[0])与输出端(fd[1])的文件描述符。

管道是用于进程间的通信的。在两个进程里都能看到fd[0]与fd[1]。

  • 如果父进程写,子进程读:
  1. 父进程关闭fd[0],通过fd[1]向管道写内容;
  2. 子进程关闭fd[1],通过fd[0]读取父进程写入管道的内容

  • 如果子进程写,父进程读:
  1. 子进程关闭fd[0],通过fd[1]向管道写内容;
  2. 父进程关闭fd[1],通过fd[0]读取子进程写入管道的内容

2,例子

实现一个典型的,父进程到子进程的例子

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

int main(){
	//15.2 管道
	int   n;
	int   fd[2];
	pid_t pid;
	char  line[100];

	//创建管道
	if (pipe(fd) < 0) {
		printf("pipe error !\n");
		exit(1);
	}

	//创建子进程
	if ((pid = fork()) < 0){
		printf("fork error !\n");
		exit(1);
	} else if (pid > 0) {
		//父进程,
		close(fd[0]); //关闭管道的读端
		write(fd[1], "hello world\n", 12); //向管道写入内容
	} else {
		//子进程,
		close(fd[1]); //关闭管道的写端
		n = read(fd[0], line, 100); //从管道里读取内容
		printf("%s",line);
	}

	exit(0);
}

这里父进程通过管道告诉了子进程一句“Hello World”。

输出结果如下:

➜  code g++ -g -W -o study_Linux study_Linux.c -lpthread
➜  code ./study_Linux
hello world

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
疫情居家办公系统管理系统按照操作主体分为管理员和用户。管理员的功能包括办公设备管理、部门信息管理、字典管理、公告信息管理、请假信息管理、签到信息管理、留言管理、外出报备管理、薪资管理、用户管理、公司资料管理、管理员管理。用户的功能等。该系统采用了MySQL数据库,Java语言,Spring Boot框架等技术进行编程实现。 疫情居家办公系统管理系统可以提高疫情居家办公系统信息管理问题的解决效率,优化疫情居家办公系统信息处理流程,保证疫情居家办公系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理疫情居家办公系统信息,包括外出报备管理,培训管理,签到管理,薪资管理等,可以管理公告。 外出报备管理界面,管理员在外出报备管理界面中可以对界面中显示,可以对外出报备信息的外出报备状态进行查看,可以添加新的外出报备信息等。签到管理界面,管理员在签到管理界面中查看签到种类信息,签到描述信息,新增签到信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值