BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #83150同步于 2014/10/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教Linux C的信号处理(sigaction)「已解决」

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