linux下关于signal(SIGUSR1,sig_usr)==SIG_ERR的错误如何解决?
答案:1 悬赏:80
解决时间 2021-01-21 02:01
- 提问者网友:鼻尖触碰
- 2021-01-20 20:48
linux下关于signal(SIGUSR1,sig_usr)==SIG_ERR的错误如何解决?
最佳答案
- 二级知识专家网友:你哪知我潦倒为你
- 2021-01-20 21:58
SIG_ERR它表示一个函数指针,如果不出错的话,signal()会返回以前的信号处理函数的地址。
你的SIGUSER1定义了吗?默认的话,系统没有这一个信号
SIG_ERR是这样定义的
#define SIG_ERR (void (*) () ) -1追问SIGUSR1貌似没定义,应该怎么定义下啊追答#define SIGUSER1 100
就是宏定义 定义成100追问还是有错,是不是因为signal(SIGUSR1,sig_usr)里的参数需要强转换啊
sig_usr() 的定义:
static void sig_usr()
{
int spid = getpid();
printf("Process %d receives signal.\n",spid);
}追答这个函数是有参数的static void sig_usr(int)追问这个不应该是自己定义的函数吗追答是自己定义的,但是要按照系统规定的来啊,signal(SIGUSR1,sig_usr),signal函数第二个参数是信号处理程序的地址,这个信号处理函数的参数是int型的,必须这样,signal的函数返回值是以前的信号处理函数地址。
你的SIGUSER1定义了吗?默认的话,系统没有这一个信号
SIG_ERR是这样定义的
#define SIG_ERR (void (*) () ) -1追问SIGUSR1貌似没定义,应该怎么定义下啊追答#define SIGUSER1 100
就是宏定义 定义成100追问还是有错,是不是因为signal(SIGUSR1,sig_usr)里的参数需要强转换啊
sig_usr() 的定义:
static void sig_usr()
{
int spid = getpid();
printf("Process %d receives signal.\n",spid);
}追答这个函数是有参数的static void sig_usr(int)追问这个不应该是自己定义的函数吗追答是自己定义的,但是要按照系统规定的来啊,signal(SIGUSR1,sig_usr),signal函数第二个参数是信号处理程序的地址,这个信号处理函数的参数是int型的,必须这样,signal的函数返回值是以前的信号处理函数地址。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯