大雪给解决一下
#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include<sys/sem.h>
const GP_KEY = 55555;
#define sem_key 6998l
#define SEM_PERM 0600
static struct sembuf LockOp[2]=
{
0,0,0,
0,1,SEM_UNDO
};
static struct sembuf UnlckOp[1]=
{
0,-1,(IPC_NOWAIT|SEM_UNDO)
};
struct student
{
unsigned int nid;
char name[20];
};
struct stu_sys
{
struct student p[3];
}*STU;
int shmid,semid;
void LockSem()
{
if((semid=semget(sem_key,1,SEM_PERM|IPC_CREAT))==-1)
{
perror ("LockSem() Get semaphore error");
}
if(semop(semid,&LockOp[0],2)==-1)
{
perror("LockSem() Lock semaphore error");
}
}
/*解锁信号灯*/
void UnlockSem()
{
if((semid=semget(sem_key,1,SEM_PERM|IPC_CREAT))==-1)
{
perror("UnlkSem() Get semaphore error");
}
if(semop(semid,&UnlckOp[0],1)==-1)
{
perror("UnlkSem() Unlock semaphore error");
}
}
unsigned char *initshm(key_t key ,int size)
{
unsigned char *retval;
if((shmid = shmget(key,size,0666|IPC_CREAT))==-1)
{
printf("shmget failed \n");
exit(-1);
}
if((retval = shmat(shmid,(unsigned char *)0,0)) ==(unsigned char *)-1)
{
printf("shmat failed \n");
exit(-1);
}
return retval;
}
unsigned char *findid(int id )
{
STU = (struct stu_sys *) initshm(GP_KEY,sizeof(struct stu_sys));
if( STU->p[0].nid !=0)
{
printf("sorry! shared memory is empty\n");
exit(-1);
}
else
{
for(int i =1;i<3;i++)
if(STU->p[i].nid == id)
return STU->p[i].name;
}
return NULL;
}
int main()
{
STU = (struct stu_sys *) initshm(GP_KEY,sizeof(struct stu_sys));
if( STU->p[0].nid ==0)
{
STU->p[0].nid = 0;
strcpy(STU->p[0].name,"nobady");
STU->p[1].nid = 1002;
strcpy(STU->p[1].name,"wang");
STU->p[2].nid = 1005;
strcpy(STU->p[2].name,"zhang");
shmdt(STU);
}
else
{
printf("己读入shared memory \n");
}
pid_t cld;
if( (cld=fork())==0)
{
LockSem();
STU = (struct stu_sys *) initshm(GP_KEY,sizeof(struct stu_sys));
unsigned char *p = findid(1002);
printf("\nfind id is 1002 and name is %s\n",p);
shmdt(STU);
sleep(6);
UnlockSem();
}
for(int i =0;i<4;i++)
{
if((cld=fork())==0)
{
LockSem();
STU = (struct stu_sys *) initshm(GP_KEY,sizeof(struct stu_sys));
for(int i = 1;i<3;i++)
{
printf("\n%d\n",STU->p[i].nid);
printf("%s\n",STU->p[i].name);
}
shmdt(STU);
printf("\n %d",i);
UnlockSem();
}
}
}
相关推荐
java学生选课系统源码数据库 MySQL源码类型 WebForm
Java学生选课系统源码 1.全面展示学生选课管理系统所包含的信息. 2.登陆窗口模块区分教师(管理员)和学生身份. 3.教师登陆模块:教师登陆系统可以录入学生信息和课程信息以及管理课程和学生信息查看学生的学分情况 4.学生登陆模块:学生登陆系统后可以进行选课,并查看自己所选的课程。 该系统使用了先进的数据库技术与数据管理技术,使数据的准确性与安全性得到了很大的提高,且在用户的并行操作与用户管理方面也有了极大地改善. 教师登录模块功能需求 教师登陆系统后可以对学生的个人信息进行查询操作,然后教师可以对学生和课程信息进行增删改查操作。 学生模块功能需求 通过调研得出学生信息管理系统中需要在学生登录或验证身分后,可以自行完成学生的选课以及学生个人信息的查询,也可以进行选课和删除已选课程等操作,方便用户使用.
java学生成绩管理系统源码数据库 MySQL源码类型 WebForm
Java学生成绩管理系统源码 运行环境:jdk7+tomcat7+mysql+MyEclipse 运用技术:servlet +jsp+mysql Ajax +easyui+jQuery 源码描述: 该学生信息管理系统涉及到学生、教师、系统管理员、班级、学生成绩、课程。设置一个系统管理员对系统进行 管理。所有用户需输入账号、密码登录进入系统;管理员进入系统后可对学生、老师、班级、课程进行增删改查 操作;学生进入系统,查看成绩、查看和修改自己的信息;老师进入系统后,对自己这门课程的学生设置课程成 绩、查看和修改自己的信息,查看学生的信息和成绩、以及统计分析学生的成绩;
JAVAspringboot学生课程查询系统源码数据库 MySQL源码类型 WebForm
springboot学生课程查询系统源码 SpringBoot课程查询系统Java前后端分离JavaWeb项目React 查询班级课程,排课功能,登录,退出等 运行环境:jdk1.8+idea/eclipse+maven3+mysql5.6 使用技术:SpringBoot2+MyBatis+H-ui+EasyUi
java学生考勤管理系统源码数据库 MySQL源码类型 WebForm
Java学生考勤管理系统源码 由jsp+ssh+mysql实现的Java web学生考勤管理系统,其中struts版本是struts2。本系统实现了管理员、学生、教师三个角色的功能,其中管理员可以管理基本信息,如班级信息、课程信息、用户信息、课程表等。 教师可以管理自己班级的学生的请假信息、考勤信息等。学生可以查看自己的请假信息、考勤信息,提交请假单等。系统内置了物种颜色皮肤,可自由切换,使得系统焕然一新
JAVA的SpringBoot+Vue学生管理系统源码数据库 MySQL源码类型 WebForm
SpringBoot+Vue学生管理系统源码 采用前后端分离开发的项目,前端采用 Vue 开发、后端采用 SpringBoot + Mybatis 开发。 系统功能 1、admin 实现对教师,学生,课程的 CRUD 实现对教师业务以及学生业务的全方位控制 2、teacher 实现查询我开设的课程,以及选择我课程的学生信息 对学生成绩的登陆 3、student 实现选课退课的功能 实现成绩查询的功能


