linux进程间通信-管道

一 管道的局限性

    管道有两个局限性:(1)他是半双工(即数据只能在一个方向上流动)。(2)它只能在具有公共祖先的进程之间使用。一个管道由一个进程创建,然后该 进程调用fork,此后父子进程之间就可该管道。

 

二 管道的创建

   用函数pipe创建:
#include<unistd.h>
int pipe(int files[2]);
参数:filedes返回两个文件描述符:filedes[0] 为从管道读而打开,filedes[1]为管道写而打开。filedes[1]的输出是filedes[0]的输入。

三 管道原理图

  如下这张图可以说明管道的原理,即一个父进程创建一个子进程后,父进程打开写管道,子进程打开读管道。

四 管道只有一端时的情况

当管道的一端被关闭后,下列规则起作用:
(1)  当读一个写端已被关闭的管道时,在所有数据都被读取后, read返回0,以指示达到了文件结束处(从技术方面考虑,管道的写端还有进程时,就不会产生文件的结束。可以复制一个管道的描述符,使得有多个进程具有写打开文件描述符。但是,通常一个管道只有一个读进程,一个写进程。下一节介绍F I F O时,我们会看到对于一个单一的FIFO常常有多个写进程)。
(2)  如果写一个读端已被关闭的管道,则产生信号 SIGPIPE。如果忽略该信号或者捕捉该信号并从其处理程序返回,则 write 出错返回,errno设置为EPIPE。
(3) 在写管道时,常数 PIPE_BUF 规定了内核中管道缓存器的大小。如果对管道进行 write调用,而且要求写的字节数小于等于 PIPE_BUF,则此操作不会与其他进程对同一管道(或 FIFO )的write操作穿插进行。但是,若有多个进程同时写一个管道(或 FIFO) ,而且某个或某些进程要求写的字节数超过 PIPE_BUF字节数,则数据可能会与其他写操作的数据相穿插。
 

五 例子

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
 
#define MAXLINE (2014)
 
int main(void)
{
    int n, fd[2];
    pid_t pid;
    char line[MAXLINE];
 
    if (pipe(fd) < 0)
        printf("pipe error");
 
    if((pid = fork()) < 0)
        printf("fork error");
     else if (pid > 0) 
     { /* parent */
        close(fd[0]);/* close read */
        printf ("the process pid %d\n", getpid());
        printf ("the process write to pipe : hello world!\n");
        write(fd[1], "hello world\n", 12);
     } 
    else
    { /* child */
         close(fd[1]); /* close write */
         printf("the process pid %d\n", getpid());
         n = read(fd[0], line, MAXLINE);
         write(STDOUT_FILENO, line, n);
    }
 
    exit(0);
}
 

 

 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/fangshenghui/p/4039833.html

# 高校智慧校园解决方案摘要 智慧校园解决方案是针对高校信息化建设的核心工程,旨在通过物联网技术实现数字化校园的智能化升级。该方案通过融合计算机技术、网络通信技术、数据库技术和IC卡识别技术,初步实现了校园一卡通系统,进而通过人脸识别技术实现了更精准的校园安全管理、生活管理、教务管理和资源管理。 方案包括多个管理系统:智慧校园管理平台、一卡通卡务管理系统、一卡通人脸库管理平台、智能人脸识别消费管理系统、疫情防控管理系统、人脸识别无感识别管理系统、会议签到管理系统、人脸识别通道管理系统和图书馆对接管理系统。这些系统共同构成了智慧校园的信息化基础,通过统一数据库和操作平台,实现了数据共享和信息一致性。 智能人脸识别消费管理系统通过人脸识别终端,在无需接触的情况下快速完成消费支付过程,提升了校园服务效率。疫情防控管理系统利用热成像测温技术、视频智能分析等手段,实现了对校园人员体温监测和疫情信息实时上报,提高了校园公共卫生事件的预防和控制能力。 会议签到管理系统和人脸识别通道管理系统均基于人脸识别技术,实现了会议的快速签到和图书馆等场所的高效通行管理。与图书馆对接管理系统实现了一卡通系统与图书馆管理系统的无缝集成,提升了图书借阅的便捷性。 总体而言,该智慧校园解决方案通过集成的信息化管理系统,提升了校园管理的智能化水平,优化了校园生活体验,增强了校园安全,并提高了教学和科研的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值