linux下关于signal(SIGUSR1,sig_usr)==SIG_ERR的错误如何解决?

error: invalid conversion from ‘void (*)()’ to ‘void (*)(int)’
error: initializing argument 2 of ‘void (* signal(int, void (*)(int)))(int)’

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的函数返回值是以前的信号处理函数地址。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网