返回信息流我想在程序收到SIGTERM/SIGINT等信号的时候,把一些数据保存下来,比如char *msg的内容。
可以用sigaction等函数,如果msg是全局变量,这个好办,在sa_sigaction信号处理函数中可以直接访问。
如果msg是局部变量,怎么传递给sa_sigaction信号处理函数呢?
void (*sa_sigaction)(int, siginfo_t *, void *); 有三个参数,第一个是信号值,第三个据说不常用,第二个siginfo_t结构体里面,也没找到可以传递msg的成员啊。。。
还是说我考虑的方向不对?求了解的同学告知。
这是一条镜像帖。来源:北邮人论坛 / cpp / #83150同步于 2014/10/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教Linux C的信号处理(sigaction)「已解决」
ipv4
2014/10/7镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
根据man手册,信号处理函数原型是void (*sa_sigaction)(int, siginfo_t *, void *);这样的,参数都是操作系统传递的,没找到地方传递自定义指针。。
【 在 lian123841 的大作中提到: 】
: 用malloc分配一块内存保存msg的数据,然后再传给sa_sigaction信号处理函数
只能全局。
http://stackoverflow.com/questions/6970224/providing-passing-argument-to-signal-handler
啊。。我好奇,比如程序退出前删除临时文件这样的操作,一般是怎么做的。
【 在 doug 的大作中提到: 】
: 只能全局。
: http://stackoverflow.com/questions/6970224/providing-passing-argument-to-signal-handler
如果你要用信号的话,那就/proc/进程号/fd/去看吧。
【 在 ipv4 的大作中提到: 】
: 啊。。我好奇,比如程序退出前删除临时文件这样的操作,一般是怎么做的。
:
嗯,多谢。。
【 在 doug 的大作中提到: 】
: linux下open 之后 直接unlink 不就行了么?
: 在该fd关闭的时候,该文件会被内核自动删除。