請教sigaction函數的用法

沭水河畔 2010-12-08 10:40:59
請教該函數的用法,該函數中有一個同名結構體sigaction,定義如下:
           struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
};

一般情況下,我們只需要設置sa_handler就可以了,但manual里提到將sa_flags設為SA_SIGINFO時,將使用sa_sigaction指向的處理函數,那麼我想知道的是:此時代碼該如何寫呢?siginfo_t*,以及void*是在哪裡指定的呢?
是不是和int代表的信號值一樣是系統自動設定的?只需要我們拿來用就可以了?

void inthandler(int signum,siginfo_t *sigt,void *ptr)
{
....
}
...全文
298 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2010-12-08
  • 打赏
  • 举报
回复
IBM developerWorks 牛
平时真是只是用sa_handler,指定一个处理动作而已
信号是一种异步机制,处理不好可能引发意想不到的问题,难以定位
能少用就少用了
进程间通信的话,考虑其它通信机制了
沭水河畔 2010-12-08
  • 打赏
  • 举报
回复
由_sa_handler指定的处理函数只有一个参数,即信号值,所以信号不能传递除信号值之外的任何信息;由_sa_sigaction是指定的信号处理函数带有三个参数,是为实时信号而设的(当然同样支持非实时信号),它指定一个3参数信号处理函数。第一个参数为信号值,第三个参数没有使用(posix没有规范使用该参数的标准),第二个参数是指向siginfo_t结构的指针,结构中包含信号携带的数据值……
沭水河畔 2010-12-08
  • 打赏
  • 举报
回复
還是IBM developerWorks給力!
http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html
由_sa_handler指定的处理函数只有一个参数,即信号值,所以信号不能传递除信号值之外的任何信息;由_sa_sigaction是指定的信号处理函数带有三个参数,是为实时信号而设的(当然同样支持非实时信号),它指定一个3参数信号处理函数。第一个参数为信号值,第三个参数没有使用(posix没有规范使用该参数的标准),第二个参数是指向siginfo_t结构的指针,结构中包含信号携带的数据值,参数所指向的结构如下……
qq179862309 2010-12-08
  • 打赏
  • 举报
回复
这个信号 你可以用 kill -l来查看!
那些信号有自己设定的值 你可以自己进行判定!
mymtom 2010-12-08
  • 打赏
  • 举报
回复
没觉得!
这种文档到处都可以免费得到!
http://www.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html
http://www.opengroup.org/onlinepubs/009695399/functions/sigaction.html
[Quote=引用 2 楼 lishanchao 的回复:]


還是IBM developerWorks給力!
http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html
C/C++ code
由_sa_handler指定的处理函数只有一个参数,即信号值,所以信号不能传递除信号值之外的任何信息;由_sa_sigaction是指定的信号处理函数带有三个参数,是为实时信号而设的(当然……
[/Quote]
mymtom 2010-12-08
  • 打赏
  • 举报
回复
指定SA_SIGINFO时,一般用int sigqueue(pid_t pid, int signo, const union sigval value);发信号,
收到信号时信号处理函数的参数里的siginfo_t的union sigval si_value 成员,就是sigqueue指定的值,当然还可以得到其他的信息,比如发送这个信号的进程号和用户
pid_t si_pid Sending process ID.
uid_t si_uid Real user ID of sending process.

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧