|
我编译运行了如下代码:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void fun(int sig)
{
if(34==sig)
printf("\n34 recieve\n");
if(35==sig)
printf("\n35 recieve\n");
}
int main(int argc,char *argv[],char *env[] )
{
pid_t pid;
void (*pfun)(int);
if((pid=fork())>0)
{
// sleep(1);
kill(pid,34);
exit(0);
}
signal(34,fun);
pfun=fun;
pfun(35);
pause();
return 0;
}
函数输出:
35 recieve
34 recieve
而把程序改成:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void fun(int sig)
{
if(34==sig)
printf("\n34 recieve\n");
if(35==sig)
printf("\n35 recieve\n");
}
int main(int argc,char *argv[],char *env[] )
{
pid_t pid;
// void (*pfun)(int);
if((pid=fork())>0)
{
sleep(1);
kill(pid,34);
exit(0);
}
signal(34,fun)(35);
// pfun=fun;
// pfun(35);
pause();
return 0;
}
或者:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void fun(int sig)
{
if(34==sig)
printf("\n34 recieve\n");
if(35==sig)
printf("\n35 recieve\n");
}
int main(int argc,char *argv[],char *env[] )
{
pid_t pid;
void (*pfun)(int);
if((pid=fork())>0)
{
sleep(1);
kill(pid,34);
exit(0);
}
pfun=signal(34,fun);
// pfun=fun;
pfun(35);
pause();
return 0;
}
就会不 产生任何输出!这是为什么?
我 看一些资料上说signal函数返回的 就是关联上的函数的地址,为什么我后面的调用方式失败,但编译通过。 |
|