#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <errno.h>
#define SEMKEY 1000
main()
{
int iSemid;
int ilRc;
short ilArray[2];
/*创建信号灯并初始化*/
iSemid = semget(SEMKEY,1,IPC_CREAT|0600);
if ( iSemid == -1 )
{
printf("创建信号灯错误semget errno:%d:%s\n",errno,strerror(errno));
return(-1170);
}
ilArray[0] = 1;
ilArray[1] = 1;
ilRc = semctl(iSemid,1,SETALL,ilArray);
if (ilRc==-1)
{
printf("信号灯初始化错误semctl SETALL errno:%d:%s\n",errno,strerror(errno));
return(-1170);
}
printf("start...\n");
Lock(iSemid,1); //锁
sleep(20); //等待20秒
printf("unlock...\n");
Unlock(iSemid,1); //解锁
printf("end...\n");
/*删除信号灯*/
ilRc = semctl(iSemid,0,IPC_RMID,0);
if(ilRc < 0)
{
printf("删除信号灯出错 semctl(RM) errno:%d:%s\n",errno,strerror(errno));
return(-1);
}
return(0);
}
int Lock(int iSemid,int iNum)
{
struct sembuf slSembuf;
int ilRc;
slSembuf.sem_num = iNum - 1;
slSembuf.sem_op = -1;
slSembuf.sem_flg = SEM_UNDO;
while(1){
ilRc = semop(iSemid,&slSembuf,1);
if (ilRc == -1)
{
printf("信号灯操作出错semop P() errno:%d:%s\n",errno,strerror(errno));
if(errno == EINTR) continue;
return(-1);
}
return(0);
}
}
int Unlock(int iSemid,int iNum)
{
int ilRc;
struct sembuf slSembuf;
slSembuf.sem_num = iNum - 1;
slSembuf.sem_op = 1;
slSembuf.sem_flg = SEM_UNDO;
ilRc = semop(iSemid,&slSembuf,1);
if (ilRc == -1)
{
printf("semop P() errno:%d:%s\n",errno,strerror(errno));
return(-1);
}
return(0);
}
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <errno.h>
#define SEMKEY 1000
main()
{
int iSemid;
int ilRc;
short ilArray[2];
/*创建信号灯并初始化*/
iSemid = semget(SEMKEY,1,IPC_EXCL);
if ( iSemid == -1 )
{
printf("创建信号灯错误semget errno:%d:%s\n",errno,strerror(errno));
return(-1170);
}
printf("semid=[%d]aaaaaaaaaaa\n",iSemid);
Lock(iSemid,1);
printf("bbbbbbbbbb \n"); //等20秒后带可以打印bbbbbbb
Unlock(iSemid,1);
return(0);
}
int Lock(int iSemid,int iNum)
{
struct sembuf slSembuf;
int ilRc;
slSembuf.sem_num = iNum - 1;
slSembuf.sem_op = -1;
slSembuf.sem_flg = SEM_UNDO;
while(1){
ilRc = semop(iSemid,&slSembuf,1);
if (ilRc == -1)
{
if(errno == EINTR) continue;
printf("信号灯操作出错semop P() errno:%d:%s\n",errno,strerror(errno));
return(-1);
}
return(0);
}
}
int Unlock(int iSemid,int iNum)
{
int ilRc;
struct sembuf slSembuf;
slSembuf.sem_num = iNum - 1;
slSembuf.sem_op = 1;
slSembuf.sem_flg = SEM_UNDO;
ilRc = semop(iSemid,&slSembuf,1);
if (ilRc == -1)
{
printf("semop P() errno:%d:%s\n",errno,strerror(errno));
return(-1);
}
return(0);
}
分享到:
相关推荐
Linux信号灯C语言编程示例 (包含信号灯回滚,信号等取值和初始化操作) 文件由两部分组成 分别是.h .c 文件,可以直接给C++程序调用
课程设计----模拟交通信号灯,用C++写的,可以编译通过,讲解很详细,有注释,可帮助你学习编程语言。可以帮助你完成课程设计或毕业设计。它的运行效果完全和十字路口交通信号灯的运转一样,达到模拟的效果。
模拟十字路口(东南西北走向)交通灯:通过单片机的P1口控制实验箱上6个LED灯(两红两绿两...每隔7秒开始改变信号灯, 一个方向红灯亮,一个方向绿灯亮,绿灯变红灯时要先闪烁6次,变黄灯,再变红灯。 红灯直接变绿灯。
51 单片机设计跑马灯的程序用(c 语言)编写 P1 口接 8 个发光二极管共阳,烧入下面程序 #include unsigned char i; unsigned char temp; unsigned char a,b; void delay(void) { unsigned char m,n,s; for(m=20;m>0...
第12 课,可编程自动控制控制跑马灯 第13课,用外中断方式读按键,控制灯的亮灭 第14课,模拟PWM输出控制灯的10个亮度级别 第15课,写一个字节到24c02中 第16课。写入一个字节到24c02并读出来验证 第17课,写入按键...
代码是基于stm32开发板,利用c语言编程,模拟交通信号灯
秒脉冲发生器是该 系统中定时器和控制器的标准时钟信号源,译码器输出两组信号灯的控制信号,经驱动电路后驱动信号灯工作,控制器是系统的主要部分,由它控制定时器和译码器的工作。 本系统采用单片机AT89C51为中心...
交通灯控制实现红绿灯状态变化,数码管显示,按键紧急状态模拟控制,内附PROTEUS仿真图片,使用C语言进行编程
关于交通灯的c语言编程, 得到的hex, 可以直接用在单片机上
智能交通灯C语言-------源代码,适合初级C语言学习的朋友参考练习,对编写小程序有一定帮助,希望能对C语言爱好者有所帮助。
交通信号灯的自动指挥系统,是实现交通的井然有序的关键。本设计采用AT89C51单片机来实现交通信号灯的自动指挥功能。通过AT89C51芯片的各个端口来控制各个路口以及人行道LED灯的亮暗来控制车辆的通行。然而本系统还...
交通信号灯控制方式很多,在学 习了单片机的有关知识之后,运用相关知识来设计完成交通信号灯。 二.功能概述 2.1设计任务:交通灯的硬件和软件设计 2.2设计目的 1.进一步熟悉和掌握单片机的结构和工作原理。 2.掌握...
交通信号灯控制方式很多,在学 习了单片机的有关知识之后,运用相关知识来设计完成交通信号灯。 二.功能概述 2.1设计任务:交通灯的硬件和软件设计 2.2设计目的 1.进一步熟悉和掌握单片机的结构和工作原理。 2.掌握...
交通信号灯控制 方式很多,在学习了单片机的有关知识之后,运用相关知识来设计完成交通信号 灯。 二.功能概述 2.1 设计任务:交通灯的硬件和软件设计 2.2 设计目的 1.进一步熟悉和掌握单片机的结构和工作原理。 2....
交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。本系统采用单片机AT89C51为中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展性强。本设计就是采用...
4.1定时器/计数器 定时器/计数器是单片机中最常用、最重要的功能模块之一,本节通过交通灯控制器实 例来演示定时器的使用,并复习如何使用散转程序。 首先介绍交通灯以及定时器/计数器的基础知识,接着介绍本实例...
是车载系统课程设计节点程序设计,能够实现控制基本汽车信号灯的亮灭。
和尚喝水问题 某寺庙,有小和尚、老和尚若干.庙内有一水缸,由小和尚提水入缸,供老和尚饮用。水缸可容纳 30 桶水,每次入水、取水仅为1...设水桶个数为5个,试用信号灯和PV操作给出老和尚和小和尚的活动。用C++实现
靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用MSC-51系列单片机ATSC51和可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8051芯片的P1口设置红、绿灯...
倍福BECKHOFF PLC:自动化编程笔记(一)对应的程序实例,实现流程顺序控制 - 流水灯。借助CASE OF语法(类似与C语言的 switch case) + 信号上升沿功能块。