`
lobin
  • 浏览: 430832 次
  • 性别: 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-c语言编程.pdf

    - 掌握进程的概念,包括进程的创建、调度、通信机制(如管道、信号量、共享内存)以及进程间的同步与互斥问题,是深入Linux编程的关键。 2. **文件操作**: - 文件操作是任何编程语言中不可或缺的一部分。在Linux...

    Linux操作系统下C语言编程入门

    ### Linux操作系统下C语言编程入门知识点详解 #### 一、基础知识概述 在Linux操作系统下学习C语言编程,首先需要掌握一些基础知识。这部分内容主要涵盖了源程序的编译、Makefile的编写、程序库的链接、程序调试...

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

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

    c语言linux系统编程进阶

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

    C++JIAOCHENG

    - 学习TCP/IP基础知识,深入socket编程,了解进程间通信机制(如消息队列、共享内存、信号量)以及多线程编程。最终实现一个小型FTP服务器miniftpd。 第五阶段:跟我一起学 C++ - 进入C++的世界,理解面向对象编程...

    Linux下C语言编程教程

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

    Linux Programming Bible

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

    linux C语言编程入门

    ### Linux C语言编程入门知识点详解 #### 一、基础知识 ##### 源程序编译 在Linux环境下,C语言程序的编译主要依赖于GNU的`gcc`编译器。`gcc`支持多种语言的编译,对于C语言程序而言,它的使用非常直观。 **示例*...

Global site tag (gtag.js) - Google Analytics