Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2011, 17:18   #1
NewMem
Новичок
Джуниор
 
Регистрация: 26.05.2011
Сообщений: 1
Сообщение Сигналы

Написать программу, которая получает в качестве аргумента командной строки имя
файла, создаёт дочерний процесс, который читает содержимое этого файла и передаёт
его содержимое родительскому процессу используя только сигналы.
Код:
#include <signal.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#define MAXBUFF 100000
 
int main(int argc, char* argv[]){ 
    pid_t parent = getpid();
    
    int num;
    char buff[MAXBUFF];int fd;
 
    if (fork() < 0)
    {
        exit(1);
    }
 
    if (getpid() != parent)
    {   
        
        if (argc != 2)
        {
            kill(parent, SIGINT);
            exit(1);
        }
        fd = open(argv[1], 0666);
        if (fd < 0)
        {
            kill(parent, SIGINT);
            exit(1);
        }
        num = read(3, &buff, MAXBUFF);
        int i;
        for (i = 1; i <= fd; i++)
            {if (i == fd)
                kill(parent, SIGUSR2);
            else 
                kill(parent, SIGUSR1);
            sleep(1);
            }
    }
 
    if (getpid() == parent)
    {   
        int fd_ = 0;
         void my_handler(int nsig)
         { 
             fd_++;
         }
 
        void my_handler2(int nsig)
        { 
            exit(1);
        }
 
        void my_handler3(int nsig)
        { 
            char* buff_[MAXBUFF];
            fd_++;
            int n = read(fd_, buff_, MAXBUFF);
            write(1, buff_, n);
            exit(0);
        }
 
        while(1)
        {
            (void)signal(SIGUSR1, my_handler);
            (void)signal(SIGINT, my_handler2);
            (void)signal(SIGUSR2, my_handler3);
        }
    }
}
Ничего не выходит. Что делать?
NewMem вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уроки по C в Linux: Сигналы MaTBeu Qt и кроссплатформенное программирование С/С++ 4 27.10.2014 01:00
Сигналы Yelisey Общие вопросы C/C++ 1 08.05.2011 17:54
qt сигналы и слоты DANATER Помощь студентам 3 27.03.2011 22:21
сигналы в Qt! marselik Qt и кроссплатформенное программирование С/С++ 1 24.11.2010 23:29