#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);
}
分享到:
相关推荐
本示例着重讲解如何使用C语言实现信号灯,包括信号灯的初始化、信号灯回滚、信号等待和信号释放等操作。下面将详细介绍这些概念及其在`mysem.c`和`mysem.h`文件中的实现。 首先,信号灯分为两种类型:互斥量(互斥...
红绿灯控制系统的设计目标是通过单片机控制交通信号灯的交替变换,实现道路安全和交通流畅。设计主要包括硬件电路设计和软件程序设计两个部分,确保红绿灯按照预设的时序准确、稳定地工作。 3. **硬件介绍** 硬件...
在AT89C51上使用C语言编程,可以大大提高开发效率,同时减少对硬件细节的关注。 首先,要进行AT89C51的C语言编程,你需要一个C编译器,如Keil C51或SDCC。这些编译器能够将C源代码转换为8051汇编代码,然后烧录到...
对于想要进入这个领域的初学者,掌握单片机的C语言编程基础至关重要。C语言是一种通用的、面向过程的编程语言,因其简洁、高效而被广泛应用于硬件控制,包括单片机编程。 本教程“基于单片机的C语言编程基础”主要...
### 51单片机C语言编程入门知识点详解 #### 一、单片机概述与基础知识 ##### 1. 单片机定义 单片机(Single Chip Microcomputer),是一种集成电路芯片,它集成了中央处理器(CPU)、随机存取存储器(RAM)、只读...
本教程“AVR系列单片机C语言编程与应用实例”专注于使用C语言对AVR单片机进行编程和实践操作,对于学习和掌握单片机开发具有很高的实用价值。 首先,C语言是嵌入式领域中常用的一种高级编程语言,它具有简洁、高效...
"十天学会单片机和C语言编程"是一门旨在帮助初学者快速掌握单片机基础知识及C语言编程技能的教程。在这个过程中,你将学习到如何利用C语言这一强大的编程语言来控制单片机,实现各种实际应用。C语言因其高效、灵活的...
单片机C语言编程是电子工程领域中一个重要的学习主题,尤其在51单片机上,C语言因其简洁高效而被广泛使用。本压缩包包含了一系列与51单片机相关的C语言编程实例,旨在帮助学习者通过实践加深对单片机控制和C语言编程...
### 51单片机C语言编程入门(详讲版) #### 一、单片机基础知识 ##### 1. 单片机基本概念 - **单片机**:是一种将微处理器、存储器(程序存储器和数据存储器)、输入/输出接口电路等主要计算机部件集成在一块芯片上...
课程设计----模拟交通信号灯,用C++写的,可以编译通过,讲解很详细,有注释,可帮助你学习编程语言。可以帮助你完成课程设计或毕业设计。它的运行效果完全和十字路口交通信号灯的运转一样,达到模拟的效果。
在本项目中,"C语言控制实现仿真交通灯设计"是一个基于C语言的编程实践,目的是模拟真实的交通信号灯控制系统。这个系统可以帮助学习者理解如何用编程语言来控制硬件设备,以及如何通过软件实现定时任务,这对于...
单片机C语言编程是电子工程领域中一个重要的学习主题,尤其对于硬件应用开发者来说,掌握C语言在单片机上的应用是至关重要的。这个压缩包"单片机C语言编程100例(硬件应用)源码及电路图.zip"提供了一百个实例,涵盖...
5. **汇编语言或C语言编程**:编写控制程序通常使用51单片机的汇编语言或C语言。掌握基本的编程语法和结构,如循环、分支、函数调用等,是完成项目的关键。 6. **仿真软件**:在实际操作之前,通常会借助Keil ...
《MCS-51单片机C语言编程100例》是一本专注于51系列单片机的C语言编程实践教程。51单片机是微控制器领域中最为广泛使用的型号之一,由Intel公司开发,现在由许多厂商如Atmel、Microchip等生产。这本书通过100个具体...
51单片机C语言编程教程是一门专为初学者设计的课程,旨在帮助学习者掌握51系列单片机的C语言编程技术,同时也能理解基础的硬件知识。51单片机是微控制器领域广泛应用的一种型号,以其简单易用、性价比高而受到青睐。...
在这个项目中,学生需要利用单片机的知识,特别是C语言编程技能,设计一个能够模拟真实交通信号灯系统的模型。 **功能概述** 1. **设计任务**:构建一个交通灯的硬件系统,并编写相应的控制程序,该程序需能够按照...
数码管C语言编程成为了电子工程师和爱好者必须掌握的技能之一。本文档旨在向读者详细介绍如何通过C语言来控制数码管,实现数字的动态显示。 数码管的主要工作原理是通过控制其内部的发光二极管(LED)来显示不同的...
学习和理解这个程序可以帮助你提升C语言编程技能,特别是对于嵌入式系统和实时系统编程的理解。在实际应用中,你可能还需要考虑更多的因素,如电源管理、多灯协调、通信协议(如果多个红绿灯需要同步)等。
《MCS-51单片机经典实验C语言编程》是一个专为大学生设计的学习资源,旨在帮助他们掌握MCS-51单片机的基础知识和C语言编程技巧。MCS-51,又称为8051单片机,是微控制器领域中的一种经典型号,广泛应用于各种嵌入式...