TLPI-Chapter 20 信号

《unix环境高级编程》里面的outhdr.h 《unix环境高级编程》里面的几乎所有的程序都用到的ourhdr.h,亲测可以使用,需哟啊的下载 立即下载
基本概念

信号是事件发生时对进程的通知机制。有时也称为软件中断,信号与硬件中断相似之处在于打断了程序执行的正常流程,大多数情况下,无法预测信号到达的精确时间。
一个具有合适权限的进程能够向另一进程发送信号,信号的这一用法可作为一种同步技术,甚至是进程通信IPC的原始形式。进程也可以向自身发送信号。然而发往进程的诸多信号,通常都是源于内核。
引发内核为进程产生信号的各类事件如下:
硬件发生异常:硬件异常的例子包括执行一条异常的机器语言指令,如被0除,或者引用了无法访问的内存区域。

用户键入能够产生信号的中断特殊字符:包括中断字符(Control-C)

发生了软件事件:列入,针对文件描述符的输出变为有效,调整了中断窗口大小、定时器到期、进程执行的CPU时间超限、或者改进程的某个子进程退出

信号分两大类:

内核向进程通知事件,构成所谓传统或者标准信号,编号1~31。
实时信号
信号产生后,会稍后被传递给某一进行,而进程也会采取某些措施来响应信号,在产生和到达期间,信号处于等待(pending)状态。如果需要确保一段代码不为传递来的信号所中断,可将信号添加到信号掩码中,会阻止该信号的到达,直到稍后对其解除阻塞。进程可以使用各种系统调用对其信号掩码添加和移除信号。

信号到达后,进程视具体信号执行如下默认操作之一:
忽略信号:内核将信号丢弃
终止进程
产生核心转储文件,同时进程终止:核心转储文件包含对进程虚拟内存的镜像,可将其加载到调试器中以检查进程终止时的状态
停止进程:暂停进程的执行
于之前暂停后再度恢复进程的执行

除了根据特定信号而采取默认行为之外,程序也能改变信号到达时的响应行为,称为对信号的处置设置。程序可以将对信号的初值设置为如下之一:
采取默认行为
忽略信号
执行信号处理器(信号处理器程序是由程序员编写的函数,用于为响应传递来的信号而执行适当任务)

改变信号处置:signal()
void (*signal(int sig, void (*handler)(int)))(int);

关于signal()函数的声明理解可以参考文章分析C声明

#include <signal.h>
#include "tlpi_hdr.h"

static void sigHandler(int sig)
{
    printf("Ouch!\n");                  /* UNSAFE (see Section 21.1.2) */
}

int main(int argc, char *argv[])
{
    int j;

    if (signal(SIGINT, sigHandler) == SIG_ERR)
        errExit("signal");

    for (j = 0; ; j++) {
        printf("%d\n", j);
        sleep(3);                       /* Loop slowly... */
    }
}
Linux/UNIX系统编程手册的支持代码 Linux/UNIX系统编程手册的支持代码,即tlpi_hdr.h,error_functions.h,get_num.c等在全文工程会用到的附带代码,以及第8.2部分/etc/passwd部分代码。 立即下载

相关推荐

Maya绑定:人物绑定详细案例(创建骨骼、镜像骨骼、IK创建、IK打组、IK控制器、FK控制器、烘焙动画、导出)

Maya绑定:人物绑定详细案例(创建骨骼、镜像骨骼、IK创建、IK打组、IK控制器、FK控制器、烘焙动画、导出)

m0_45877477的博客 1633

6. 进程

这里初步描述了什么是进程,以及进程大概在虚拟内存当中的构成。并且详细讲解了它的程序存储,数据存储,堆,栈,输入参数以及环境变量等知识

u010933311的博客 444

不写代码,Cursor 10分钟开发1个APP!保姆级教程喂饭来了

做出第一个能运行的app,那种成就感真的很棒。虽然过程可能有点折腾,但只要耐心一点,问题都能解决。记住,遇到问题不要慌,现在有AI帮忙,大部分问题都能快速解决。重要的是迈出第一步,开始动手实践。你的第一个app可能很简单,但这是一个很好的开始。随着经验积累,你能做出的东西会越来越酷。现在就开始行动吧,说不定下个月你就能向朋友炫耀你自己做的app了!

chenhong007的博客 1551

tlpi_hdr.h头文件使用及设置

使用的头文件,主要如下: ename.c.inc error_functions.h get_num.h tlpi_hdr.h 其中ename.c.inc文件定义了一个字符串数组,用于对应错误码的名称。 error_functions.h文件声明了本书自定义的错误处理函数。 get_num.h文件声明了本书自定义的数值提取函数。 tlpi_hdr.h文件则包含了后续需用到的系统调用头文件。 将头文件复制到默认的编译器寻找目录下,并将实现打包成静态库,然后使用别名来默认链接静态库。 具体操作如下: 第一步.

liao__ran的博客 1957

RTC 实时时钟实验

如果在 RTC_CR 寄存器中设置了相应的允许位,则在每个TR_CLK 周期中 RTC 产生一个中断(秒中断)。void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data) // 往备份区域写用户数据的函数 (这个函数的第一个参数就是寄存器的标号了,这个是通过宏定义定义的)存储在 RTC_ALR 寄存器中的可编程时间相比较,如果 RTC_CR 控制寄存器中设置了相应允许位,比较匹配时将产生一个闹钟中断。寄存器操作完成,并同步之后,设置秒钟中断。

m0_55996456的博客 1205

基于QGIS的DEM地形数据精细化处理:从裁剪、合并到成果输出

本文详细介绍了使用QGIS进行DEM地形数据的精细化处理流程,包括数据获取、裁剪、合并及成果输出等关键步骤。通过实战技巧和注意事项,帮助用户高效处理地形数据,适用于GIS分析、三维建模等应用场景。

weixin_29093017的博客 450

LinuxUNIX系统编程手册——(四)文件IO:通用的IO模型

所有执行 I/O 操作的系统调用都以文件描述符,一个非负整数(通常是小整数),来指代打开的文件。文件描述符用以表示所有类型的已打开文件,包括管道(pipe)、FIFO、socket、终端、设备和普通文件。大多数程序都期望能够使用 3 种标准的文件描述符,见下表。文件描述符用途POSIX名称stdio流0标准输入stdin1标准输出stdout2标准错误stderr。

hello_world0_0的博客 1152

深入解析Docker Overlay2磁盘空间占用问题及高效清理策略

本文深入解析了Docker Overlay2存储驱动导致磁盘空间占用的核心原因,包括镜像与容器残留、日志文件膨胀、应用层泄漏及驱动特性。提供了从全局检查到精准定位的完整排查方法,并给出了从常规清理到配置优化的多维度高效清理策略,帮助用户从根本上解决Docker磁盘空间问题。

data3的博客 900

TLPI-Chapter 4文件IO

所有执行I/O操作的系统调用都以文件描述符(一个非负整数)来指代打开的文件。文件描述符用以表示所有类型的已打开文件,包括管道、FIFO、socket、终端、设备、普通文件。它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。每个进程,文件描述符都自成一套。 三种标准的文件描述符: 0 标准输入 1 标准

尘世中迷途小书童 506

C#上位机开发揭秘:从新手到大神的蜕变之路,代码实例全解析!

上位机通常是与硬件设备(如嵌入式系统、PLC、传感器等)进行通信的计算机程序。它的作用是通过某种通信协议(如串口、TCP/IP 等)向设备发送命令,并接收设备的反馈数据。上位机需要有一个图形用户界面(GUI)来展示数据或控制硬件设备。通过本篇教程,我们介绍了 C# 上位机开发的基本步骤,从串口通信的实现,到图形用户界面的构建,再到进阶功能的实现。作为上位机开发的新手,掌握这些基础知识是非常重要的。而随着经验的积累,你可以逐步尝试更复杂的功能,比如多线程处理、数据分析与存储等。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 4828

网规第三版:第4章网络资源设备(完结)

第 4 章 网络资源设备 调整内容: 更新主流网络设备(交换机、路由器、防火墙)的技术参数与选型标准 增加国产化网络设备与信创产品的相关内容 精简已淘汰的设备类型与技术指标

鹿鸣天涯 268

4. 文件I/O:通用I/O模型

描述了基本文件I/O的概念。讲解了open, read, write, close, lseek 以及 ioctl基本函数

u010933311的博客 631

【人工智能之深度学习】12. BERT微调实战:医疗文本分类的领域自适应技巧与工业级实现

摘要:医疗文本分类是自然语言处理在医疗健康领域的核心应用,可辅助疾病诊断、病历结构化和医疗质量监控。然而,医疗文本的专业术语密集、实体关系复杂及数据长尾分布等特性,导致通用BERT模型性能受限。本文系统阐述医疗文本分类的领域自适应技术,从理论原理到工业级实现展开全流程讲解。首先分析医疗文本的独特属性及技术挑战;随后详解领域继续预训练、适配器微调、对抗训练等核心技术的数学原理;构建包含数据预处理、模型优化、隐私保护的完整实战架构;通过疾病分类、情感分析、事件检测三大案例验证技术有效性。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1005

板凳--------第20章-信号:基本概念1

信号是事件发生时对进程的通知机制,软件中断。信号与硬件中断的相似之处在于打断了程序执行的正常流程,无法预测信号到达的精确时间。一个具有权限的进程能够向另一进程发送信号。信号,一种同步技术,甚至是进程间通信( IPC)的原始形式。进程也可以向自身发送信号。然而,发往进程的诸多信号,通常都是源于内核。引发内核为进程产生信号的各类事件如下。1.硬件发生异常,即硬件检测到一个错误条件并通知内核,随即再由内核发送相应信号给相关进程。2.用户键入了能够产生信号的终端特殊字符。

fengye207161的博客 1307

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

c语言中pi怎么写头文件,tlpi_hdr.h头文件的使用以及配置

本章介绍系统编程的基础概念和一些后续章节用到的函数及头文件,并说明了可移植性问题。系统调用是受控的内核入口,通过系统调用,进程可以请求内核以自己的名义去执行某些动作,比如创建子进程,执行I/O操作,进行进程间的通信等。系统调用与C语言的函数调用类似。但是系统调用的过程比C语言函数调用复杂,开销也大得多。Linux 的系统调用通过 int 0x80 实现,用系统调用号来区分入口函数。操作系统实现系统...

weixin_35795512的博客 958

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C 语言套接字UDP机制实现

说明:此示例仅用于展示UDP的实现方法,仅供参考学习,没有实际使用功效。另外此实现分为服务器与客户机两部分代码,开发环境为GNU glibc_2.24,运行环境为Debian 9(linux)。 服务器端代码为: #include<tlpi_hdr.h> /*此头文件具体包含内容在本文最末尾列出*/ int main() { int sock_no; int return_s...

JmanCryTears的博客 367

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

linux下C通过系统调用进行基本IO操作

一.Linux下通过系统调用对普通文本文件进行I/O操作步骤: 调用open()获得一个文件描述符 利用获得的文件描述符作为read() 和write()的一个参数,进行I/O操作。 使用close()释放文件描述符及其相关资源。 文件描述符:一个非负整数(无符号整数),用于引用在内核中打开的文件。打开或创建一个文件时,内核返回一个文件描述符。读写一个文件时利用open、creat函数返回的文件描述

Try的博客 1787

linux系统编程手册错误,Linux系统编程手册 学习笔记(二)

第四章:文件I/O:通用的I/O模型在该章节中讨论的文件描述符的概念。其中包括:打开文件,关闭文件,从文件中读取数据和向文件中写数据。概述所有执行I/O操作的系统调用都以文件描述符(一个非负整数(通常是比较小的整数))来指代打开的文件。文件描述符用以表示所有类型的已打开文件,包括管道(pipe)、FIFO、socket、终端、设备和普通文件。下面介绍执行I/O操作的4个主要系统调用:open:fd...

weixin_39652658的博客 245

Linux系统编程错误处理函数

作为linux的菜鸟,最近在看《Linux/Uinx》系统编程手册,不得不说这是本很好很好的书。今天整理了一下在本书上册开始部分给出的错误处理函数如下,希望对大家有所帮助: //tlpi_hdr.h #ifndef TPLI_HDR_H #define TPLI_HDR_H /*Prevent accidental double inclusion*/ #include &amp;lt;sys/...

Walker-C 1364

TLPI(liunx/unix系统编程手册)笔记(三) 文件IO:通用的IO模型

读下来总的就是介绍了四个IO的API--open,read,write,close。 大家都是知道的,everything is file,在linux系统里面一切都是看作文件来操作的,学习linux就得先学好文件IO,也可以看见TLPI这本书的介绍完一些概念之后就开始介绍文件IO了。 IO,大概的分为磁盘文件IO,buffering(缓冲)IO。貌似缓冲的水很深,之后会写博客。 ...

217

Linux系统编程手册 学习笔记(二)

第四章:文件I/O:通用的I/O模型 在该章节中讨论的文件描述符的概念。其中包括:打开文件,关闭文件,从文件中读取数据和向文件中写数据。 概述 所有执行I/O操作的系统调用都以文件描述符(一个非负整数(通常是比较小的整数))来指代打开的文件。文件描述符用以表示所有类型的已打开文件,包括管道(pipe)、FIFO、socket、终端、设备和普通文件。 下面介绍执行I/O操作的4个主要系统调...

Capr1corn的博客 1594

TLPI-Chapter 6 进程

每个进程都有一个唯一进程标识号(process ID),并保存有对其父进程号的记录。 进程的虚拟内存逻辑上被划分为许多段:文本段、数据段、栈和堆。 栈由一系列帧组成,随函数调用而增长,随函数返回而减,每个帧都包含有函数局部变量、函数实参以及单个函数调用的调用链接信息。 程序调用时命令行参数通过argc argv参数提供给main()函数。通常argv[0]包含调用程序的名称。 每个进程都会获

尘世中迷途小书童 364

TLPI UNIX linux系统编程手册源代码运行

Title: TLPI-源代码运行 date: 2017-09-20 23:55 url: TLPI-begin 上周末开始看《UNIX/Linux系统编程手册》这本书,周末的时间看到第四章,觉得这本书比直接看Linux内核要好接受的多,因为从代码入手,可以更好的理解,比如第三章系统调用的讲解,如果只是理论方面可能比较枯燥,那么这本书中的代码,如何运行呢?下载代码这本书的主页.代码版本有两个

尘世中迷途小书童 4917

shell脚本判断文件是否存在

有一个需求是判断某一个目录下文件是否存在,如果该文件不存在,则从当前目录拷贝文件到该目录。 由于没有学习写过shell脚本,晚上下班回来搜索后写出了如下的脚本,这里shell的if语法格式与C语言大致相同,语法格式: if [ 条件 ]; then 条件成立 else 条件不成立 fi fi是结束if语句。version1.0#!/bin/sh myFile="/

尘世中迷途小书童 4万+
上一篇: 指针数组与数组指针
下一篇: [APUE]第一章UNIX基础知识总结
52coder
博客等级 码龄17年 87粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值