Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
3 / 3 / 2
Регистрация: 01.06.2013
Сообщений: 69

Процессы и сигналы (выдает ошибки)

01.06.2013, 10:38. Показов 1749. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые программисты, необходимо было написать программу: Процесс 1 открывает файл и после этого порождает потомка 2, который в свою очередь порождает потомка 3. Процесс 2 пишет N байт в общий файл, посылает сигнал процессу 3, который тоже пишет N байт в файл и посылает сигнал процессу 1, который считывает данные из файла и выводит их на экран.

Я написал, но выдает много ошибок. Не могли бы Вы помочь мне, определить и устранить ошибки!
Большое спасибо за любую помощь!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
#include <fstream>
#include <sys/types.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#define M 10
#define N 5
static struct sigaction act1;
static struct sigaction act2;     // всякие глобальные переменные 
static struct sigaction act3;
int* viv=new int[M];
int* byit=new int[M];
char name[20]="prob.txt";  
pid_t pid1, pid2, pid3;
FILE* f;
 
void func3(int signo) // обработка сигнала для третего процесса
{
    act3.sa_handler=func3;      // повторная "привязка"  
    sigaction(SIGUSR1,&act3,0);
    printf("treti'i!\n");
    for(int i=0;i<M;i++)
  {
    byit[i]=i;    // инициализируем массив символов
    fprintf(f,"%d\n",byit[i]);       // пишим его в файл     
  }
    kill(pid1,SIGUSR1);              // отправляем сигнал в первый процесс тем самым "разбудив" егo 
    fclose(f);                       // закрываем файл
 
}
void func2(int signo) //обработка сигнала для второго процесса  
{
   act2.sa_handler=func2;      // повторная "привязка"  
   sigaction(SIGUSR1,&act2,0);
   printf("vtoroy!\n");
   for(int i=0;i<M;i++)
  {
    byit[i]=i;    // инициализируем массив символов
    fprintf(f,"%d\n",byit[i]);       // пишим его в файл     
  } 
   kill(pid3,SIGUSR1);              // отправляем сигнал в третий процесс тем самым "разбудив" егo 
}
  void func1(int signo)        //обработка сигнала для первого процесса
 {
   act1.sa_handler=func1;
   sigaction(SIGUSR1,&act1,0);   // повторная "привязка"
   f=fopen(name,"rb+");          //повторное открытие файла для чтения
   printf("pervyi!\n");
   for(int i=0;i<M;i++)
   {                                                                
        fscanf(f,"%d",&viv[i]);  // считываем инфу из файла
        printf("%d\n",viv[i]);   // выводим на экран
   }
 }
 
int main()
{
    f=fopen(name,"wb+");        // создаем файл в первом процессе(которым является запущенная прога)
    act1.sa_handler=func1;
 
    pid2=fork();                // создаем дочерний процесс 2
    if(pid2==0)    // если его PID нулевой - то мы находимся в нем (т.е. идет второй процесс и все что написано - выполняется в нем)
    {
        act2.sa_handler=func2;   
        sigaction(SIGUSR1,&act2,0);   // задаем обработку сигнала, для второго процесса
        //   alarm(N);                     // функция которая пошлет сигнал к пробуждению процессу в котором она находится через N сек.
        //   pause();                      // до прибытия сигнала (любого, кроме прописанного на игнор) процесс "спит"
        pid3 = fork();              // Создаем третий дочерний процесс
        if (pid3==0)
        {
            act3.sa_handler=func3;   
            sigaction(SIGUSR1,&act3,0);   // задаем обработку сигнала, для второго процесса
            sleep(2); // задеркжка 
        }
        if (pid3<0)
        {
            sleep(1);               // даем время добавить обработчик ("привязка")
            printf("Cann't create process 3: error \n");
            //wait(int *status);            //приостанавление выполнение текущего процесса
            wait(int st);           //приостанавление выполнение текущего процесса
            printf("Process 2: end\n");
        }
    }
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.06.2013, 10:38
Ответы с готовыми решениями:

Процессы и сигналы
У меня такое задание &quot;Процесс 1 открывает файл и порождает потомков 2 и 3. Потомки пишут в файл по N байт и завершают работу. После этого...

Процессы и сигналы на Ubuntu
создать два процесса и сделать так что бы 1 посылал второму сигнал usr1 а второй первому usr2 и так до бесконечности

При использование функций компилятор выдает ошибки
Здравствуйте, надо использовать некоторые функции библиотеки amd framewave вместо обычных. Я столкнулся с некоторыми сложностями. При...

1
36 / 38 / 7
Регистрация: 01.06.2011
Сообщений: 237
03.06.2013, 00:36
для начала можете отладить программу только для двух процессов, без третьего. это проще, и всё встанет на свои места
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.06.2013, 00:36
Помогаю со студенческими работами здесь

ПРОЦЕССЫ И СИГНАЛЫ ОС UNIX
Здравствуйте,очень нужна Ваша помощь в создании программы на C++. Владея, исключительно, только теоритическими навыками в данной области,...

И снова процессы и сигналы
доброго дня всем, снова набивший всем оскомину вопрос о процессах и сигналах. есть такой код #include &lt;sys/wait.h&gt; #include...

Ноутбук при загрузке выдает повторяющиеся сигналы
Здравствуйте! В общем такая проблема. Ноутбук при загрузке выдает повторяющиеся (не знаю сколько точно но около ста ) сигналы и только...

Не включается ноут. Выдает сигналы BIOS (2 коротких, 1 длинный)
Не включается ноут. Выжает сигналы BIOS (2 коротких, 1 длинный) ПОчитал в вики что это ВОЗМОЖНО ошибка видеокарты, но я не уверен, тк...

Inet Explorer при обнаружении ошибки вместо описания ошибки выдает иероглифы
Начал изучение ASP. Inet Explorer при обнаружении ошибки вместо описания ошибки выдает иероглифы... А мне ОЧЕНЬ хотелось бы почитать, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru