Автор Тема: Задача на C/C++ — два процеса комуникиращи през обща памет  (Прочетена 2390 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

ivanovbg

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 5
Здравейте! Не, няма да ви моля да ми пишете задача...
Условието е следното:  Да се състави програма на C/C++ която създава два процеса,
комуникиращи през обща памет. Първият процес генерира 50 произволни
цели числа. Вторият процес ги прочита и записва четните числа във файл
A, а нечетните във файл B. За синхронизацията да се използва алгоритъм
на Декер.

Имам следното:
#include <stdio.h>
#include <fcntl.h>
#include <math.h>

int main()
{
int  pid_b, arr[50], i, buf, w, A, B; /* pid_a*/
char buffer;
// pid_a = create_process();
// if (pid_a==0)
// { // Parvi proces, koito generira 50 proizvolni chisla
for (i=0; i<50; i++)
{
buf=(rand()%100)+48; //buf=(rand()%55)+64;
arr[i]=buf;
}
wait(&w);
// }

// else if (pid_a>0)
// {
pid_b = create_process();
if (pid_b>0)
{ // Pravi proces, koito syzdava dva faila i sortira chislata po chetnost
if ((A = open("A.txt", O_CREAT|O_RDWR)) == -1)
{
printf("\nGreshno syzdaden fail 'A.txt' !");
return 0;
}
if ((B = open("B.txt", O_CREAT|O_RDWR)) == -1)
{
printf("\nGreshno syzdaden fail 'B.txt' !");
return 0;
}
else
{
A = open("A.txt", O_CREAT|O_RDWR|O_APPEND, 0754);
B = open("B.txt", O_CREAT|O_RDWR|O_APPEND, 0754);

for (i=0; i<50; i++)
{
if (arr[i]%2 == 0)
{
buffer = (char)arr[i];  //buffer = (char) 65;
write (A, &buffer, sizeof(buffer));
}

else
{
buffer = (char)arr[i]; //buffer = (char) 65;
write (B, &buffer, sizeof(buffer));
}
}
close(A);
close(B);
}
}
// }
return 0;
}

Та, според вас задачата отговаря ли на условието? Така и не можах да намеря добро описание на този алгоритъм на Декер.

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Е ти кажи това компилира ли се? Върви ли? Създава ли двата файла? Пълни ли ги с числа четни/нечетни?

На Уиндоус не съм запознат  със създаване на процеси и конкурентно програмиране на C/C++, но в твоя код който си постнал виждам да създаваш един процес само. Втория си го изкоментирал.
Такава функция create_process() изобщо не намерих. Да не е CreateProcess, или си написал някаква твоя функция който не си споделил?
Този wait(&w) какво прави? От къде я взе тази функция? Да не би да е от света на UNIX?

ivanovbg

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 5
Е ти кажи това компилира ли се? Върви ли? Създава ли двата файла? Пълни ли ги с числа четни/нечетни?

На Уиндоус не съм запознат  със създаване на процеси и конкурентно програмиране на C/C++, но в твоя код който си постнал виждам да създаваш един процес само. Втория си го изкоментирал.
Такава функция create_process() изобщо не намерих. Да не е CreateProcess, или си написал някаква твоя функция който не си споделил?
Този wait(&w) какво прави? От къде я взе тази функция? Да не би да е от света на UNIX?

Да в света на Unix е.

pepo

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 1
Здравейте, съжалявам, че пиша в толкова стара тема, но имам същата задача и се нуждая от малко помощ.Функцията create_process() откъде да я взема и може ли да се замести с нещо друго, така че програмата да работи правилно?

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Този код горе не става за нищо. Нито може да го компилираш, нито отговаря на условието.
Първо се научи да ъздаваш процеси. В зависимост от това на каква система разработваш или с fork, или с CreateProcess.