Проблема с процессами в C

#c

#c

Вопрос:

Я пишу программу, которая содержит два процесса. Один процесс получает два числа из входных данных и складывает их вместе. Второй процесс показывает добавленный результат.

Проблема в том, что он не может получить число из входных данных.

 #include <sys/types.h>
#include <unistd.h>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int a,b,c=1;
bool res = false;
void Add(){
if(res==true){
c=a b;
cout<<"Process 1 was done !n";
cout<<c<<endl;}
}
void Print(){
if(c!=1){
cout<<c<<endl;
cout<<"Process 2 was done !n";}
}


int main(){
cout<<"Enter a,b :n";
cin>>a>>b;
res= true;
pid_t pid;
pid  = fork();
if(pid==0)
Print();
else
Add();

return 0;}
  

Работает на Ubuntu.

Комментарии:

1. В чем проблема, кажется, у меня это работает? Если я ввожу «2 3», я получаю «Процесс 1 завершен! 5″Пожалуйста, объясните, каким должен быть ответ, которого вы ожидаете.

2. проблема в том, что когда я ввожу 2 и нажимаю enter , приходит сообщение, в котором говорится: команда не найдена !

3. другая проблема заключается в том, почему мы не можем вызвать метод Add перед Print, на самом деле мы можем, но получаем неверный результат . я хочу получить такой результат, который :

4. Вероятно, вам нужно добавить ./ перед командой. Например, если вы скомпилировали g my_code.cpp -o my_prog; затем вы выполняете команду ./my_prog

5. На самом деле я хочу сделать свой основной код! пожалуйста , взгляните на это . я отредактировал свой пост !

Ответ №1:

Если вы скомпилируете свою программу

 g   processes.cpp -o process
  

затем вы запускаете программу

 ./process
  

У вашей программы также есть проблема в том, что при форке кода копируются глобальные переменные.
В вашем дочернем процессе значение c никогда не обновляется
и так

 int c=1;
void Print(){
if(c!=1){
  //this code will never be called 
}
  

Наконец, ваша инструкция

 cout<<"Enter a,b :n";
  

вводит в заблуждение, поскольку вы не обрабатываете пришедший,

ввод

 2,3 
  

даст вам неправильный результат для добавления,
Вместо этого вам следует ввести

 2 3
  

Комментарии:

1. спасибо, так что же мне делать, чтобы решить эти проблемы, я очень новичок в процессах!

2. извините, у меня вопрос, вы сказали, что: «глобальные переменные скопированы. В вашем дочернем процессе значение c никогда не обновляется и поэтому » . в процессах нулевой возврат не является дочерним?! значит, дочерним будет метод Add, а родительским — Print, не так ли ?!

3. я сказал, что я новичок в процессе, это ясно из моего кода. поэтому я буду благодарен вам, если вы объясните структуры процессов простым способом. спасибо …!

4. неужели мне никто не поможет ?!

5. @1Programmer: вам нужно открыть окно терминала / консоли или иным образом «войти» на хост Linux и получить приглашение командной строки. Если вам нужна помощь в этом, объясните, какую ОС вы используете и как вы получаете доступ к Linux box и редактируете файлы. Если вы можете получить приглашение командной строки, то просто введите команды g ... и ./process , перечисленные в этом ответе выше, которые скомпилируют и затем запустят вашу программу. В более общем плане, если вам нужна дополнительная помощь, вы можете попробовать проголосовать за ответ, который кажется полезным, чтобы выразить некоторую признательность, прежде чем просить больше времени и усилий.