zoukankan      html  css  js  c++  java
  • 2014025640《嵌入式系统程序设计》第七周学习总结

    学习内容

    有名管道和消息队列的传输和接收,并且在课上和课下实验楼中进行了程序的验证和操作。

    1.有名管道

    有名管道可以将两个互不相关的进程实现彼此的通信,

    可以通过路径名来指出,并且在文件系统中是可见的。

    读进程

    1.若管道是阻塞打开,且FIFO内无数据,则读进程一直堵塞下去,直到有数据写入。
    2.不是阻塞打开,不管有没有数据,会立即执行。

    写进程

    阻塞打开,跟读进程一样,直到有东西写入

    2.mkififo()函数

    函数原型

    int mkfifo( const char *pathname, mode_t mode );

    参数:
    可以看出这个函数有需要两个参数。
    第一个参数在系统中创建一个文件。
    第二个参数写FIFO权限。
    返回值:
    成功返回值为0。
    失败返回值为-1。

    注意:
    对命名管道,除非写入方主动打开管道的读取端,否则读取方是无法打开命名管道的。
    Open调用执行后,读取方将被锁住。
    接收和发送是要在两个终端中进行的。首先要启动读管道,然后再启动写管道,如果读的时候没有启动,会一直阻塞。

    3.msgget()函数

    作用:

    被用来创建新的消息队列或获取已有的消息队列

    函数原型

    int msgget ( key_t key, int msgflg)

    第一个参数:消息队列对象的关键字(key),函数将它与已有的消息队列对象的关键字进行比较来判断消息队列对象是否已经创建。
    第二个参数:函数进行的具体操作。它可以有如下的值:
    IPC_CREAT:如果消息队列对象不存在,则创建,否则则进行打开操作;
    IPC_EXCL:(用”|”连接IPC_CREAT),如果消息对象不存在则创建之,否则产生一个错误并返回。
    返回值:
    成功:消息队列ID号
    失败:-1

    4.msgctl()函数

     作用:

    msgctl()函数,我们可以直接控制消息队列的行为。

    函数原型:

    int msgctl ( int msgqid, int cmd, struct msqid_ds *buf )

    第一个参数:是消息队列对象的标识符。
    第二个参数:是函数要对消息队列进行的操作。
    操作方式有如下:
    IPC_STAT:取出系统保存的消息队列的msqid_ds数据,并将其存入参数buf指向的msqid_ds结构中。
    IPC_SET:设定消息队列的msqid_ds数据中的msg_perm成员。设定的值由buf指向的msqid_ds结构给出。
    IPC_EMID:将队列从系统内核中删除。
    返回值:
    成功:0
    失败:-1

  • 相关阅读:
    dotnet 读 WPF 源代码笔记 了解 WPF 已知问题 用户设备上不存在 Arial 字体将导致应用闪退
    WPF 基础 2D 图形学知识 判断点是否在线段上
    WPF 实现自定义的笔迹橡皮擦
    WPF 加载诡异的字体无法布局
    dotnet 5 从 IL 层面分析协变返回类型新特性
    WPF 笔迹触摸点收集工具
    dotnet C# 序列化 XML 时进行自动格式化
    自定义systemctl服务
    maven之三大特性属性、profile、资源过滤
    dependencyManagement与dependencies
  • 原文地址:https://www.cnblogs.com/156005140qq/p/6977950.html
Copyright © 2011-2022 走看看