重庆交通大学信息科学与工程学院
  综合性设计性实验报告
班        级:  物联网15xx班   
姓名  学号:gllh
实验项目名称:进程控制与信号互斥
实验项目性质:        综 合 性   
实验所属课程:《Linux操作系统》
实验室(中心):语音楼801信息实验室
指 导 教 师 :xx
实验完成时间: 201xxxxx
一、实验目的
理解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小时内删除。