Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ под Linux
Войти
Регистрация
Восстановить пароль
 
OneTwoThreeFour
0 / 0 / 0
Регистрация: 03.03.2016
Сообщений: 6
1

Процессы С++

17.05.2018, 21:20. Просмотров 178. Ответов 0

Процесс 1 порождает потомка 2. Оба процесса после этого открывают один и тот же файл и пишут в него по очереди по N байт. Организовать M циклов записи с помощью сигналов.

Мой код:
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
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <fsys/stat.h>
 
int fd;
int pid1, pid2, N=3, M=0, j=0, i;
char cbuf;
int c1='1', c2='2';
 
int main ()
{
  setpgrp(pid1, pid2);
  int st;
  pid1=getpid();
  printf("pid1=%d\n", pid1);
  fd=open("fd", O_CREAT | O_PDWR);
  pid2=fork();
  printf("pid2=%d\n", pid2);
  signal(SIGUSR1, f1);
  signal(SIGUSR2, f2);
  while (M!=10)
  {
    if (pid2 > 0)
      {
         printf("Process 2, %d\n", pid2);
         kill(pid1, SIGUSR1);
         printf("return pid1=%d, pid2=%d\n", pid1, pid2);
         if (pid1 > 0)
            {
               printf("Process 1\n");
               kill(pid2, SIGUSR);
            }
      }
         else
            {
               signal(SIGUSR1, f1);
               printf("In process 1\n");
               kill(pid2, SIGUSR2);
            }
         M++;
      }
    close(fd);
    exit(0);
    return 0;
}
 
void f1 (int signum)
{
    signal(SIGUSR1, f1);
    printf("Process 1 (%d) has got a signal from process 2 (%d)\n", pid1, pid2);
    for (i=0; i<N; i++)
      {
         write(fd, &c1, 1);
      }
    printf("Process 2, %d\n", pid2);
    kill(pid2, SIGUSR2);
    return;
}
 
void f2 (int signum)
{
    signal(SIGUSR1, f2);
    printf("Process 2 (%d) has got a signal from process 1 (%d)\n", pid2, pid1);
    while(j<3)
      {
         write(fd, &c2, 1);
         j++;
      }
    printf("Process 2, %d\n", pid2);
    kill(pid1, SIGUSR1);
    return;
}
Проблема в том, что он не перескакивает от сигнала в сигнал. Уже голову сломали, не видим, в чем проблема... Прошу помощи.
должен в итоге написать "222111222111222111222111222111", а пишет "222222222222222222222222222111"
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2018, 21:20
Ответы с готовыми решениями:

процессы
Необходимо реализовать функцию запуска и параллельного выполнения нескольких...

Процессы
Здравствуйте, нужна ваша помощь, дело в том что я пишу простую программку с...

Процессы и Демоны
Добрый день нужно написать 2 лабы но я и с линксом плохо знаком не то что с...

Процессы в Linux
Добрый день. Пытаюсь разобраться с процессами. Пишу программу с применением...

Процессы и каналы
Привет. Есть задание Всё понятно, кроме того, что выделено жирным,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2018, 21:20

Сортировка деревом. Процессы
Здравствуйте, пытаюсь реализовать сортировку с помощью дерева произвольным...

Процессы под unix
Есть такой код, который запускает файлы f1.out и f2.out, если их передать в...

Процессы и файлы в Linux
Определите, что происходит в родительском процессе, если дочерний процесс...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru