zoukankan      html  css  js  c++  java
  • 第四章:管道与FIFO

    4.1:概述

    管道是最初的Unix IPC形式,可追溯到1973年的Unix第三版。尽管对于许多操作来说很有用,但它们的根本局限在于没有名字,从而只能由亲缘关系的进程使用。这一点随FIFO的加入得改正。

    本章讲述管道和FIFO的创建与使用。我们使用一个简单的文件服务器例子,同时查看一些客户-服务器程序设计问题:IPC通道需要量、迭代服务器与并发服务器、字节流与消息接口。

    4.2:一个简单的客户-服务器例子

    下图所示的客户-服务器例子在本章和第六章中都要用,我们用它来分析说明管道、FIFO和System V消息队列。

    图中客户从标准输入(stdin)读进一个路径名,并把它写入IPC通道。服务器从该IPC通道读出这个路径名,并尝试打开其文件来读。如果服务器能打开该文件,它就读出其中的内容,并写入IPC通道,以作为对客户的相应;否则,它就响应以一个出错消息。

    4.3:管道

    所有的Unix都提供管道,它由pipe函数创建,提供一个单向数据流。

    #include <unistd.h>
    int pipe(int fd[2]); // 返回:若成功则为0,若出错则为-1

    该函数返回两个文件描述符:fd[0]和fd[1],前者打开来读,后者打开来写。

    管道的典型用途是以下述方式为两个不同进程(一个是父进程,一个是子进程)提供进程间的通信手段。首先由一个进程(它将成为父进程)创建一个管道后调用fork派生一个自身的副本,接着,父进程关闭这个管道的读出端(fd[0]),子进程关闭同一管道的写入端(fd[1]),这样就在父子进程间提供了一个单向数据流。如果要实现双向的数据流,则需要使用两个管道。

    4.4:全双工管道

    用两个半双工管道来实现。

    4.5:popen和pclose

    4.6:FIFO

    FIFO即有名管道。

    4.7:管道和FIFO的额外属性

    4.8:单个服务器,多个客户

    4.9:对比迭代服务器和并发服务器

    4.10:字节流和消息

    4.11:管道和FIFO限制

    4.12:小结

  • 相关阅读:
    SQL键值约束、索引使用
    C#字符串的四舍五入
    VB中字符串操作函数
    C#文本选中及ContextMenuStrip菜单使用
    C#关于new的用法
    C#有关日期的使用方法
    break,continue的区别
    在Lua中使用数字的时候有个坑
    关于自动寻径和图、邻接表的学习和启发
    关于在Cocos2dx引擎中手动绑定C++到Lua
  • 原文地址:https://www.cnblogs.com/lit10050528/p/5472403.html
Copyright © 2011-2022 走看看