操作系统实验——进程通信

参考资料

  • https://www.cnblogs.com/52php/p/5862114.html
  • https://www.cnblogs.com/52php/p/5861372.html

1.实验要求

1、进程通信

编写一段程序,实现进程的管道通信。

使用系统调用 pipe()建立一条管道线:两个子进程 P1 和 P2 分别向管道各写一句话:

Child 1 is sending a message!

Child 2 is sending a message!

父进程则从管道中读出 来自两个子进程的信息,显示在屏幕上。

要求父进程先接收子进程 P1 发来的消息,然后再接收子进程 P2 发来的消息。(可以通过 sleep()将自身进入睡眠)

2、 消息的创建,发送和接收.

(1) 使用系统调用 msgget(), msgsnd(), msgsrv()及 msgctl()编制一长度为 1K 的消息(如个人通信录信息)的发送和接收程序.

① 观察上面程序,说明控制消息队列系统调用 msgctl()

② 共享存储区的发送和接收。

(2) 使用共享存储区相关的系统调用 shmget(),shmat(),sgmdt(),shmctl(),编制一个与上述功能相同的程序.

(3) 比较上述两种消息通信机制中数据传输的时间。

2.管道通信

  • 代码实现
#include<stdio.h>
#include <stdlib.h>
int main()
{int id,fd[2],pid;
char buf[50],s[50];
//创建一个管道 fd[0]:读管道,fd[1]:写管道。
pipe(fd);
while ((id=fork())==-1);
if (id==0)
{   //将后边的字符串写到buf中sprintf(buf,"Child1 is sending message!");write(fd[1],buf,50);//立即终止调用进程exit(0);}
else
{//在获得通知前该线程将一直等待wait(0);read(fd[0],s,50);printf("%s\n",s);while ((pid=fork())==-1);if (pid==0){sprintf(buf,"Child2 is sending message!");write(fd[1],buf,50);exit(0);}else{wait(0);read(fd[0],s,50);printf("%s\n",s);}
}
return 0;
}
  • 运行结果

3.消息队列通信

  • 代码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#define MSG_KEY 24
//消息队列标识符
int msqid;struct msgbuf{//    消息类型long mtype;//    缓冲区大小char mtext[1024];
}msgbuf;void client(){msqid=msgget(MSG_KEY,0666|IPC_CREAT);printf("Input a line:");scanf("%s",msgbuf.mtext);msgbuf.mtype=1;//将消息输入到缓冲区中msgsnd(msqid,&msgbuf,1024,0);
}void server(){msqid=msgget(MSG_KEY,IPC_CREAT|0666);//从缓冲区中取出消息msgrcv(msqid,&msgbuf,1024,2L,0);printf("The reversed line is:%s\n",msgbuf.mtext);//删除消息队列msgctl(msqid,IPC_RMID,0);
}int main()
{int p1;while((p1=fork())==-1);if (p1==0){server();wait(0);}else{client();}return 0;
}
  • 运行结果

4.共享区通信

暂未实现,有会的小伙伴可以在评论区留言。大家一起交流进步。

操作系统实验——进程通信相关推荐

  1. 操作系统实验进程控制(C语言版)

    操作系统实验进程控制 1.实验目的 2.实验内容 3.实验准备 3.1进程 3.1.1进程的含义 3.1.2进程状态 3.1.3进程状态之间的装换 3.2进程控制块 3.3进程的创建与撤消 3.4进程 ...

  2. 操作系统实验-进程控制(python实现)

    操作系统实验-进程控制(python实现) 一.实验目标 模拟操作系统对进程的管理.实现进程之间的切换. 二.实验要求 (1)单处理机,即一次只能 1 个进程处于运行态 (2)内核实现进程切换和进程调 ...

  3. Linux多线程矩阵,操作系统实验(进程)多线程实现矩阵乘法

    <操作系统实验(进程)多线程实现矩阵乘法>由会员分享,可在线阅读,更多相关<操作系统实验(进程)多线程实现矩阵乘法(6页珍藏版)>请在人人文库网上搜索. 1.多线程编程实现矩阵 ...

  4. 操作系统实验--进程的创建撤销和控制

    进程的创建撤销和控制 一.实验名称 进程的创建撤销和控制 二.实验内容 学生独立设计用于描述进程的数据结构,完成进程的创建.同步和互斥. 三.实验原理和设计思路 在Linux系统下用fork()函数创 ...

  5. 【操作系统】进程通信-思维导图

    https://www.liuchuo.net/archives/1690 因为图片上传大小限制,复制过来会看不清晰,直接放链接吧~

  6. Linux进程的创建和父子进程同步,操作系统实验报告_Linux进程创建与通信.doc

    操作系统实验报告_Linux进程创建与通信 2011-2012学年第一学期 专 业: 班 级: 学 号: 姓 名:提交日期:2011年11月实验二 Linux进程创建与进程通信 [实验目的 1. 熟悉 ...

  7. 操作系统——实验贰——进程通信(一)管道及共享内存

    一. 实验目的 熟悉并掌握管道机制,并实现进程间通信 熟悉并掌握共享内存机制,并实现进程间通信 二. 实验内容 任务一: (1)阅读以上父子进程利用管道进行通信的例子(例1),写出程序的运行结果并分析 ...

  8. 2020 操作系统 实验二 进程通信

    实验二.进程通信 一.实验名称 进程通信 二.实验目的 掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法. 三.实验原理 邮箱机制类似于日常使用的信 ...

  9. 操作系统实验四——使用命名管道实现进程通信

    操作系统实验四--使用命名管道实现进程通信 一. 实验目的 (1)了解windows系统环境下的进程通讯机制. (2)熟悉Windows系统提供的进程通信API. 二. 实验准备 相关API函数介绍 ...

  10. 操作系统实验·Linux进程通信与内存管理

    预备知识 Linux进程的数据结构 在Linux中,进程用task_struct表示,所有进程被组织到以init_task为表头的双向链表中(见[include/linux/sched.h]SET_L ...

最新文章

  1. linux shell 的 for 循环
  2. TCP/IP协议簇分层详解---转
  3. Web 安全开发规范手册 V1.0
  4. 度量空间的应用_使用Dropwizard度量标准监视和测量无功应用
  5. 贫血的Domain Model之说
  6. vr格式视频价格_如何以100美元的价格打造自己的VR耳机
  7. 直方图尖峰python_直方图、密度图、散点图,python数据可视化方法,你要的都在这里...
  8. bboss session自定义session id生成机制介绍
  9. CCF 201809-2 买菜
  10. systrace抓取方式
  11. 嵌入式和单片机有什么区别
  12. 网络共享计算机权限访问,访问共享计算机的时候提示没有权限使用网络资源的解决方法...
  13. 互联网糖水营销策略-科学城篇
  14. linux持续测试ip端口延迟,Linux下使用nping测试TCP\UDP延迟
  15. Android 2 时代到来了,敢为天下先是我等求知若渴的程序员的优秀品质
  16. 马王堆汉墓帛书‧老子——甲本释文(德经)
  17. 计算机考研搜集的资料(408)
  18. 解决Cadence 17.4软件无法启动,capture cis启动缓慢,打开项目缓慢,allegro 打开程序未响应(即使微软拼音切换兼容模式也无法解决的情况)
  19. onlyoffice协同编辑(多人共享编辑)、在线文档编辑,支持word、excel
  20. 【MySQL】DDL语句详解:列类型、列约束及自增列_Unit03

热门文章

  1. 产品经理通用标准工作流程
  2. 外资公司章程标准范本
  3. 校园网认证破解教程(广某大学)
  4. MATLAB绘制柱状图带标准误差线
  5. vue地址选择插件V - Distpicker
  6. SuiteCRM的汉化
  7. 服务器端移动端车牌识别sdk
  8. 微信小程序上传图片失败总结
  9. 深度学习与计算机视觉教程(15) | 视觉模型可视化与可解释性(CV通关指南·完结)
  10. linux、docker容器缺少tailf命令,解决方案。