c - Linux 中的 sighandler_t typedef 语句?
问题描述
在 Linux 中学习 Signals 时,我遇到了这样的声明:
typedef void (*sighandler_t)(int);
sighandler_t signal (int signo, sighandler_t handler);
处理函数必须返回void
,其原型的形式为:
void my_handler (int signo);
Linux 使用typedef
, sighandler_t
, 来定义这个原型。
当我看到有关功能的 Linux 手册页时,signal()
它就在那里。
但我不明白typedef
这里的陈述是什么意思。
谁能解释一下这是什么typedef sighandler_t
意思?
解决方案
这是一点 C 魔法,它说明了以下内容:
typedef void (*sighandler_t)(int);
有一种特殊的类型被称为
sighandler_t
是一个指向一个函数的指针,它接受一个整数参数并且不返回任何内容。
sighandler_t signal(int signo, sighandler_t handler);
有一个函数
signal
将一个整数命名signo
和一个函数指针handler
作为参数并返回一个函数指针。
字面意思是“typedef
类型定义”,用于定义复杂类型的占位符——如函数指针或结构等。
函数指针的定义有点超出了这个问题的范围,但可以被认为是用户编写的命令,框架将调用它,而不知道该函数将是什么。
推荐阅读
- java - Using Bazel java_proto_library on Alpine
- python - Remove rows from a panda dataframe with unsorted index
- node.js - S3.upload not working in production environment but working in localhost NodeJS
- python - Batch File (.bat) Equivalent of Shell Script (.sh) "&!"
- python - What causes an Altair Chart to be displayed when it is the last statement in a JupyterLab cell?
- javascript - Rails 6 javascript file isn't grabbing html element properly
- css - CSS绝对按钮具有通过按钮“推送”的输入字段
- react-native - React Navigation v4 remove Bottom navigator
- reactjs - 有没有办法在反应中将道具传递给包含的组件?
- r - Having issues installing gam package in RStudio ver. 3.6.2