在3个进程之间发送同步信号

时间:2017-11-14 14:32:47

标签: c

我正在研究信号项目得到一个0的文件,通过使用同步信号p1-> p2-> p3-> p1增加到输入(例如./count 300 sample.txt)将数字增加1,进入睡眠状态并拨打下一个。

但我遇到了两个问题

  1. 如何以及在何处实施递增数字处理,信号处理或主要(0 - > 1 - > 2 ...输入)

  2. 不知道如何用sigwait()或sigprocmask()实现有什么区别? 。我可以选择其中任何一个来保证它们是同步的吗?或者我应该只是睡觉?

  3. 下面是我到目前为止一直在努力的代码。

    #include <stdio.h>
    #include <signal.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <string.h>
    void sig_usr1(int signo)
    {       
            char a;
            sigset_t sigset, oldset;
            sigemptyset (&oldset);
            sigemptyset (&sigset);
            sigaddset(&sigset, SIGUSR1);
            sigprocmask(SIG_BLOCK, &sigset, &oldset);
    
            fd =open("./sample.txt",O_RDWR);
            pread (fd, a, sizeof(a));
            if (argv[0]>a)
            {a ++;
            truncate ("./sample.txt", 0);
            write(fd, a, sizeof(a));
            }
    }
    int main (int argc, char** argv)
    {       
            int fd;
            int num=0;
            struct sigaction usrsig ;
            if(!(argv[0]>0))
                    printf("insert positive integer");
            fd = open("./sample.txt",O_RDWR|O_CREAT|O_TRUNC);
          write(fd, num ,sizeof(num);
            pid_t child[3];
    
            usrsig.sa_handler =sig_usr;  // Parent
            sigemptyset(&usrsig.sa_mask); 
            usrsig1.sa_flags = 0;
            sigaction(SIGUSR1,&usrsig, 0);
    
            for ( i=0; i<3; i++)
            {
                    child[i] = fork();
                    if(child[i] == 0)
                    break;
            }
            pid_t prev;
            if(i ==0)       prev = getppid();
    
            else            prev = child[i-1];
    
            kill(pid_prev, SIGUSR1)
    }
    

0 个答案:

没有答案