重庆交通大学信息科学与工程学院
综合性设计性实验报告
班 级: 物联网15xx班
姓名 学号:gllh
实验项目名称:进程控制与信号互斥
实验项目性质: 综 合 性
实验所属课程:《Linux操作系统》
实验室(中心):语音楼801信息实验室
指 导 教 师 :xx
实验完成时间: 201x年xx月xx日
一、实验目的
理解Linux核心进程及信号量的概念、进程的调度和进程通信以及信号量在进程控制中的作用。本次实验的目标是在Linux环境下实现一个多线程对临界资源的互斥操作,利用信号量实现对临界资源的保护,支持Linux下文件输入输出,提高对Linux环境下进程、信号量机制和文件操作等知识的理解。
二、实验内容及要求
在程序中调用semget()函数实现信号量创建,用semop()函数来改变信号量的值,用semctl()函数打开一个信号量。进行分析、编写、调试——对比分析,熟悉semget()函数和信号量的概念、定义、调用及函数返回值。
1、编写程序,创建信号量或获得在系统中已存在的信号量,掌握信号量semaphore在进程管理中的应用。
2、编写程序,验证信号量对于进程间通信机制的改变。
3、编写程序,分析信号量函数对一个文件共享资源操作的控制。
三、实验设备及软件
PC机一台,Linux虚拟机一台。
四、设计方案
1. 题目
Linux中信号量对进程间通信的影响。
2. 设计的主要思路
在编程过程中对信号量函数进行调用和进程创建,主要以对文件操作的形式进行对信号量函
数的调用,并分析信号量在进程控制中的作用,并熟悉信号量函数的概念、定义、调用及函数返回值。
3. 主要功能
实现对文件的读写操作以及进程间如何使用信号量来进行通信。
4. 主要的流程图
五、主要代码
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void main()
{
intfd=0;
key_t key;
intsemid;
char buffer[100];
structsembuf sops;
int ret;
key=ftok("/home",1);
semid=semget(key,1,IPC_CREAT);
ret=semctl(semid,0,GETVAL);
semctl(semid,0,SETVAL,1);
printf("init value of sem is %d\n",ret);
fd=open("./",O_RDWR|O_APPEND);
sops.sem_num=0;
sops.sem_op=-1;
semop(semid,&sops,1);
write(fd,"wulian1 ",8);
sleep(10);
write(fd,"have a rest",11);
sops.sem_num=0;
sops.sem_op=1;
semop(semid,&sops,1);
int fd2=open("./",O_RDONLY); 进程间通信实验报告心得
memset(buffer,0,sizeof(buffer));
while(read(fd2,buffer,sizeof(buffer))>0)
{
printf("%s\n", buffer);
memset(buffer, 0, sizeof(buffer));
}
close(fd2);
}
六、测试结果及说明
1、semget()函数
它的作用是创建一个新信号量或取得一个已有信号量,函数为:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论