LINUX.ORG.RU

Сообщения beginner99

 

Помогите разобраться с программой!

Форум — Development

Вот задание. Процесс 1 открывает файл, порождает потомка 2, пишет в файл N байт и посылает сигнал SIG1 процессу 2. Процесс 2 по сигналу SIG1 читает данные, выводит их на экран и завершается. Если сигнал от процесса 1 не поступит в течение M секунд, процесс 2 начинает считывать данные по сигналу SIGALRM.
Вот как я пыталась его реализовать:

#include <stdio.h>
#include <signal.h>
#include <wait.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>

int f_in, fd, ppid, pid, N, M, count=0;

void wakeup ()                         //
{
        signal(SIGALRM, wakeup);
        printf("Wake up!\n");
}

void sleeptime (int timeout)
{
        signal(SIGALRM, wakeup);
        alarm(timeout);
        pause();
}

void sigper(int n)
{
        signal(SIGUSR1,sigper);
        printf("KOL-VO BYTE: %d\n", count);
        write(f_in,"1",1);
        kill(pid,SIGUSR1);
}
void sigchail(int n)
{
        signal(SIGUSR1, sigchail);
        write(f_in,"2",1);
        kill(ppid,SIGCHLD);
}
int main(int argc, char*argv[])
{
        ppid=getpid();
        if((f_in= open(argv[1],O_RDONLY))<0){
                ERR("Can't open %s\n",argv[1]);
        }
        N = atoi(argv[2]);

        if (pid=fork()<0){
                ERR("Can't fork");
        }
        else if(fork_pid>0){
                signal(SIGUSR1,sigper);
                kill(pid,SIGUSR1);
        }
        else {
                pause();
                signal(SIGUSR1,sigchail);
                _exit(-1);
        }
        read(1,&inp,1);
        putchar(inp);
        close(f_in);
        printf("1");
        return(0);
}

Заранее благодарю за помощь!

 , ,

beginner99
()

RSS подписка на новые темы