`
microjava
  • 浏览: 309989 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

c语言编程之信号灯

阅读更多
#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语言编程示例(包含信号灯回滚,信号等取值和初始化操作)

    Linux信号灯C语言编程示例 (包含信号灯回滚,信号等取值和初始化操作) 文件由两部分组成 分别是.h .c 文件,可以直接给C++程序调用

    十字路口交通信号灯模拟程序

    课程设计----模拟交通信号灯,用C++写的,可以编译通过,讲解很详细,有注释,可帮助你学习编程语言。可以帮助你完成课程设计或毕业设计。它的运行效果完全和十字路口交通信号灯的运转一样,达到模拟的效果。

    c语言控制51单片机完成交通信号灯(红绿灯)

    模拟十字路口(东南西北走向)交通灯:通过单片机的P1口控制实验箱上6个LED灯(两红两绿两...每隔7秒开始改变信号灯, 一个方向红灯亮,一个方向绿灯亮,绿灯变红灯时要先闪烁6次,变黄灯,再变红灯。 红灯直接变绿灯。

    51单片机C语言编程基础及实例

    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&gt;0...

    单片机C语言编程学习入门教程30课PDF(包括实验例程原理图和效果图内容超详细)

    第12 课,可编程自动控制控制跑马灯 第13课,用外中断方式读按键,控制灯的亮灭 第14课,模拟PWM输出控制灯的10个亮度级别 第15课,写一个字节到24c02中 第16课。写入一个字节到24c02并读出来验证 第17课,写入按键...

    基于stm32的交通信号灯代码

    代码是基于stm32开发板,利用c语言编程,模拟交通信号灯

    基于c语言单片机十字交通灯课程设计.docx

    秒脉冲发生器是该 系统中定时器和控制器的标准时钟信号源,译码器输出两组信号灯的控制信号,经驱动电路后驱动信号灯工作,控制器是系统的主要部分,由它控制定时器和译码器的工作。 本系统采用单片机AT89C51为中心...

    交通灯控制系统+C语言源代码

    交通灯控制实现红绿灯状态变化,数码管显示,按键紧急状态模拟控制,内附PROTEUS仿真图片,使用C语言进行编程

    交通信号灯程序

    关于交通灯的c语言编程, 得到的hex, 可以直接用在单片机上

    智能交通灯C语言-------源代码

    智能交通灯C语言-------源代码,适合初级C语言学习的朋友参考练习,对编写小程序有一定帮助,希望能对C语言爱好者有所帮助。

    交通灯_C语言_源代码_交通灯_at89c51_

    交通信号灯的自动指挥系统,是实现交通的井然有序的关键。本设计采用AT89C51单片机来实现交通信号灯的自动指挥功能。通过AT89C51芯片的各个端口来控制各个路口以及人行道LED灯的亮暗来控制车辆的通行。然而本系统还...

    单片机c语言课程设计交通灯(2).doc

    交通信号灯控制方式很多,在学 习了单片机的有关知识之后,运用相关知识来设计完成交通信号灯。 二.功能概述 2.1设计任务:交通灯的硬件和软件设计 2.2设计目的 1.进一步熟悉和掌握单片机的结构和工作原理。 2.掌握...

    单片机c语言课程设计交通灯(1).doc

    交通信号灯控制方式很多,在学 习了单片机的有关知识之后,运用相关知识来设计完成交通信号灯。 二.功能概述 2.1设计任务:交通灯的硬件和软件设计 2.2设计目的 1.进一步熟悉和掌握单片机的结构和工作原理。 2.掌握...

    单片机c语言课程设计交通灯.pdf

    交通信号灯控制 方式很多,在学习了单片机的有关知识之后,运用相关知识来设计完成交通信号 灯。 二.功能概述 2.1 设计任务:交通灯的硬件和软件设计 2.2 设计目的 1.进一步熟悉和掌握单片机的结构和工作原理。 2....

    基于单片机交通灯c语言设计

    交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。本系统采用单片机AT89C51为中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展性强。本设计就是采用...

    单片机c语言课程设计交通灯.doc

    4.1定时器/计数器 定时器/计数器是单片机中最常用、最重要的功能模块之一,本节通过交通灯控制器实 例来演示定时器的使用,并复习如何使用散转程序。 首先介绍交通灯以及定时器/计数器的基础知识,接着介绍本实例...

    车载系统节点程序

    是车载系统课程设计节点程序设计,能够实现控制基本汽车信号灯的亮灭。

    pv操作和尚喝水问题

    和尚喝水问题 某寺庙,有小和尚、老和尚若干.庙内有一水缸,由小和尚提水入缸,供老和尚饮用。水缸可容纳 30 桶水,每次入水、取水仅为1...设水桶个数为5个,试用信号灯和PV操作给出老和尚和小和尚的活动。用C++实现

    单片机交通灯闯红灯检测车流量

    靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用MSC-51系列单片机ATSC51和可编程并行I/O接口芯片8255A为中心器件来设计交通灯控制器,实现了能根据实际车流量通过8051芯片的P1口设置红、绿灯...

    倍福PLC编程笔记1-流水灯程序.zip

    倍福BECKHOFF PLC:自动化编程笔记(一)对应的程序实例,实现流程顺序控制 - 流水灯。借助CASE OF语法(类似与C语言的 switch case) + 信号上升沿功能块。

Global site tag (gtag.js) - Google Analytics