发新话题
打印

内核空间和用户空间的通讯

内核空间和用户空间的通讯

在内核空间中有事件发生,有什么办法可以及时通知用户空间的应用程序?我原先准备用netlink,用NETLINK_GENERIC,但是我的程序需要支持2.4和2.6,这样就只能自己定义新的protocol,但当别的用户也定义相同id的protocol时就可能会引起冲突。
各位大虾有什么建议吗?小弟在此先谢过了!      

TOP

netlink不行的话,可用信号通知事件发生,至于“及时”,只要应用程序是running状态,普通情况都能满足要求了      
依然记得从你口中说出再见坚决如铁,昏暗中有种烈日灼身的错觉; 依然记得从你眼中滑落的泪伤心欲绝,混乱中有种热泪烧伤的错觉....

TOP

我试了一下信号,发现一个问题,当我给下面的进程发信号SIGUSR1时,进程运行正常,如果发的不是SIGUSR1而是SIGUSR2,进程会被结束掉,不知道为什么?
发信号是手动发的: kill -USR2 16943 (进程的pid = 16943)
系统显示[3]+ user defined signal 2    ./app

我的代码如下:

int handler(int sig, siginfo_t * si, void *data)
{
    printf("handler: sig %d\n", sig);
}

main()
{
    struct sigaction act;
    act.sa_sigaction = handler;
    act.sa_flags = SA_NOMASK|SA_ONESHOT;
    sigaction(SIGUSR1, &act, NULL);
    whil (1)
    {
        pause();
        printf("get signal\n");
    }
    exit(0);
}      

TOP

act.sa_sigaction = handler; ???
是 act.sa_handler=handler 吧.

进程接到没有定义的用户信号或SIGABORT  SIGALRM  SIGTERM......等等信号,而没有事先安排捕捉它,进程会终止!并且创建核心映象文件core-----是进程的映象.      

TOP

发新话题