毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

sigqueue发送附加信息无效 第2页

更新时间:2012-10-7:  来源:毕业论文
发送的值已经传了过去,关键在于如果这个值是一个指针,进程内指针所指向的地址是否能访问,内容是什么。
一楼的例子里,字符串常量在两个进程里是在同一地址。
只有在共享内存或者同一程序的情况下才可以。
可是如果使用共享内存或同一程序的的话,地址已经知道,也没有必要用信号发送一个指针了,直接使用共享内存好了。毕竟信号只是一种简单的简单的进程间通信。

C/C++ code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>

void sig_action(int signo, siginfo_t *info, void *addr)
{
        printf("%s [%s:%d]\n", info->si_value.sival_ptr, __FILE__, __LINE__);
}

int main(int argc, char* const argv[])
{
        struct sigaction act;
        char *data;

        data = malloc(100);
        sprintf(data, "Hello %10d", getpid());
        printf("%s [%s:%d]\n", data, __FILE__, __LINE__);

        act.sa_sigaction = sig_action;
        act.sa_flags = SA_SIGINFO;
        sigaction(SIGUSR1, &act, NULL);

        pid_t pid;

        if ((pid = fork()) == -1) {
                return 1;
        } else if (pid == 0) {
                union sigval val;
                val.sival_ptr = data;
                sprintf(data, "Hello %10d", getpid());
                printf("%s [%s:%d]\n", data, __FILE__, __LINE__);
                sigqueue(getppid(), SIGUSR1, val);
        }

        while (((pid = wait(0)) == -1 && errno == EINTR) || pid > 0) {
        }

        return 0;

上一页  [1] [2] 

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©chuibin.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。