#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
, перечисленные в этом ответе выше, которые скомпилируют и затем запустят вашу программу. В более общем плане, если вам нужна дополнительная помощь, вы можете попробовать проголосовать за ответ, который кажется полезным, чтобы выразить некоторую признательность, прежде чем просить больше времени и усилий.