信号量
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; }
相关推荐
### Linux下C语言编程——信号处理函数 #### 一、信号的基本概念与产生 在Linux系统中,**信号**是一种轻量级的进程间通信机制,用于通知接收进程某个特定事件的发生。它不仅可以由硬件异常(如除零错误)触发,也...
Linux系统编程中的信号机制是操作系统提供的一种异步通信方式,它允许进程间或者操作系统与进程之间传递简短的通知。信号的概念源于现实生活中的一些信号行为,它们具有意图简单、信息量小且满足特定触发条件的特点...
本文将详细介绍Linux环境下C语言编程中的几种进程通信方法,包括POSIX无名信号量、System V信号量、System V消息队列以及System V共享内存。 #### 1. POSIX无名信号量 ##### 理论基础 信号量是一种用于控制多个...
这组资源,"Linux下C语言应用编程(作者-杨铸)配套教学ppt",提供了对Linux环境下C语言编程的深入理解和实践指导。以下是一些核心知识点的详细说明: 1. **Linux下C语言编程环境**: - `11-Linux下C语言编程环境....
### Linux下C语言编程——线程操作 #### 前言:Linux下线程的创建与基础使用 在Linux环境中,线程作为一种重要的并发机制,为开发者提供了在单个进程中执行多个任务的能力。相较于进程,线程之间的切换成本更低,...
- 应用信号量解决多进程访问共享资源的问题。 #### 实验六:Linux内存基本原理 - **实验目标**: - 了解Linux内存管理的基本原理。 - 掌握虚拟内存的概念。 - **实验内容**: - 讲解物理内存与虚拟内存的区别...
进程间通信(IPC)也是Linux系统编程的重要部分,包括管道、消息队列、共享内存、信号量和套接字等方法。了解这些机制如何协同工作,可以帮助你设计出高效的多进程和多线程程序。 最后,理解Makefile和构建系统是...
- 掌握进程的概念,包括进程的创建、调度、通信机制(如管道、信号量、共享内存)以及进程间的同步与互斥问题,是深入Linux编程的关键。 2. **文件操作**: - 文件操作是任何编程语言中不可或缺的一部分。在Linux...
### Linux操作系统下C语言编程入门知识点详解 #### 一、基础知识概述 在Linux操作系统下学习C语言编程,首先需要掌握一些基础知识。这部分内容主要涵盖了源程序的编译、Makefile的编写、程序库的链接、程序调试...
【Linux系统编程——pthread线程通信(信号量)】 在多线程编程中,线程间的通信和同步是至关重要的,以确保数据的一致性和程序的正确运行。在这个主题中,我们将深入探讨一种用于线程同步的机制——信号量。信号量在...
- **消息管理**:研究消息队列、信号量等机制,实现进程间的数据交换。 - **线程操作**:理解线程的创建、同步与调度,提升程序的并发执行能力。 - **网络编程**:掌握TCP/IP协议栈的基本原理,实现网络通信功能。 ...
- 学习TCP/IP基础知识,深入socket编程,了解进程间通信机制(如消息队列、共享内存、信号量)以及多线程编程。最终实现一个小型FTP服务器miniftpd。 第五阶段:跟我一起学 C++ - 进入C++的世界,理解面向对象编程...
### Linux下C语言编程教程知识点概览 #### 第一章 基础知识 - **源程序编译**: 在Linux环境中使用GCC(GNU Compiler Collection)编译器进行C语言源程序的编译工作。GCC是一个功能强大的编译器,支持多种编程语言。...
- **第16章**:共享内存与信号量 - 共享内存的基本原理。 - 信号量的作用及其实现。 - 进程间通信的实际应用场景。 - **第17章**:管道与FIFO - 管道与命名管道的区别。 - 管道在进程间通信中的使用。 - FIFO...
### Linux C语言编程入门知识点详解 #### 一、基础知识 ##### 源程序编译 在Linux环境下,C语言程序的编译主要依赖于GNU的`gcc`编译器。`gcc`支持多种语言的编译,对于C语言程序而言,它的使用非常直观。 **示例*...