`
lobin
  • 浏览: 423384 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C: Linux C 编程 - 信号量

 
阅读更多

信号量

semget

函数原型

int semget(key_t key, int nsems, int semflg);

 

信号量操控

semctl

函数原型

int semctl(int semid, int semnum, int cmd, ...);

 

信号量操作

semop

函数原型

int semop(int semid, struct sembuf *sops, unsigned nsops);

 

semtimedop

函数原型

int semtimedop(int semid, struct sembuf *sops, unsigned nsops, struct timespec *timeout);

 

 

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

int semid;

void do_exit()
{  
  if (semctl(semid, -1, IPC_RMID) == -1)
  {
    printf("semctl error\n");
    return;
  }
  printf("exit.\n");
  exit(0);
}

void on_signal_int(int sig)
{
  printf("signal: num=SIGINT(%d)\n", sig);
  do_exit();
}

void on_signal_term(int sig)
{
  printf("signal: num=SIGTERM(%d)\n", sig);
  do_exit();
}

void on_signal_kill(int sig)
{
  printf("signal: num=SIGKILL(%d)\n", sig);
  do_exit();
}

int main(int argc, char** argv)
{
  // SIGINT signal
  signal(SIGINT, on_signal_int);
  signal(SIGTERM, on_signal_term);
  
  // The signals SIGKILL and SIGSTOP cannot be caught or ignored.
  // signal(SIGKILL, on_signal_kill);  

  semid = semget((key_t) 6, 1, 0666 | IPC_CREAT | IPC_EXCL);
  if (semid == -1)
  {
    printf("%s is running...\n", argv[0]);
    return 0;
  }

  while (1)
  {
    
  }

  on_signal_int(SIGINT);
  return 0;
}

 

 

0
0
分享到:
评论

相关推荐

    Linux下C语言编程--信号处理函数.

    ### Linux下C语言编程——信号处理函数 #### 一、信号的基本概念与产生 在Linux系统中,**信号**是一种轻量级的进程间通信机制,用于通知接收进程某个特定事件的发生。它不仅可以由硬件异常(如除零错误)触发,也...

    01--Linux系统编程-信号.docx

    Linux系统编程中的信号机制是操作系统提供的一种异步通信方式,它允许进程间或者操作系统与进程之间传递简短的通知。信号的概念源于现实生活中的一些信号行为,它们具有意图简单、信息量小且满足特定触发条件的特点...

    Linux下C语言编程--进程通信、消息管理

    本文将详细介绍Linux环境下C语言编程中的几种进程通信方法,包括POSIX无名信号量、System V信号量、System V消息队列以及System V共享内存。 #### 1. POSIX无名信号量 ##### 理论基础 信号量是一种用于控制多个...

    Linux下C语言应用编程(作者-杨铸)配套教学ppt

    这组资源,"Linux下C语言应用编程(作者-杨铸)配套教学ppt",提供了对Linux环境下C语言编程的深入理解和实践指导。以下是一些核心知识点的详细说明: 1. **Linux下C语言编程环境**: - `11-Linux下C语言编程环境....

    Linux下C语言编程--线程操作

    ### Linux下C语言编程——线程操作 #### 前言:Linux下线程的创建与基础使用 在Linux环境中,线程作为一种重要的并发机制,为开发者提供了在单个进程中执行多个任务的能力。相较于进程,线程之间的切换成本更低,...

    Linux操作系统实验报告

    - 应用信号量解决多进程访问共享资源的问题。 #### 实验六:Linux内存基本原理 - **实验目标**: - 了解Linux内存管理的基本原理。 - 掌握虚拟内存的概念。 - **实验内容**: - 讲解物理内存与虚拟内存的区别...

    linux系统编程_linux系统编程-中文_

    进程间通信(IPC)也是Linux系统编程的重要部分,包括管道、消息队列、共享内存、信号量和套接字等方法。了解这些机制如何协同工作,可以帮助你设计出高效的多进程和多线程程序。 最后,理解Makefile和构建系统是...

    Linux系统编程-(pthread)线程通信(信号量).pdf

    【Linux系统编程——pthread线程通信(信号量)】 在多线程编程中,线程间的通信和同步是至关重要的,以确保数据的一致性和程序的正确运行。在这个主题中,我们将深入探讨一种用于线程同步的机制——信号量。信号量在...

    c语言linux系统编程进阶

    - **消息管理**:研究消息队列、信号量等机制,实现进程间的数据交换。 - **线程操作**:理解线程的创建、同步与调度,提升程序的并发执行能力。 - **网络编程**:掌握TCP/IP协议栈的基本原理,实现网络通信功能。 ...

    Linux下C语言编程教程

    ### Linux下C语言编程教程知识点概览 #### 第一章 基础知识 - **源程序编译**: 在Linux环境中使用GCC(GNU Compiler Collection)编译器进行C语言源程序的编译工作。GCC是一个功能强大的编译器,支持多种编程语言。...

    Linux Programming Bible

    - **第16章**:共享内存与信号量 - 共享内存的基本原理。 - 信号量的作用及其实现。 - 进程间通信的实际应用场景。 - **第17章**:管道与FIFO - 管道与命名管道的区别。 - 管道在进程间通信中的使用。 - FIFO...

Global site tag (gtag.js) - Google Analytics