Я пытаюсь создать программу для создания нескольких процессов, каждая из которых читает строку из консоли, а затем делайте что-то с ней. У меня возникают проблемы с getline(cin, temp)
, только иногда читая строку. Входной буфер уже загружен 4 строками текста.C++ Getline не всегда получает строку в нескольких разветвленных процессах в Linux
EDIT: Мне нужно использовать fork, который создает несколько процессов (а не потоков), чтобы использовать wait
, который ждет завершения первого дочернего процесса, а затем продолжит.
#include <iostream>
#include <iostream>
#include <string>
#include <cstring>
#include <sstream>
#include <unistd.h>
#include <sys/wait.h>
using namespace std;
int childprog();
int main()
{
pid_t childpid;
for (int i = 0; i < 4; ++i)
{
if ((childpid = fork()) == 0) //Child process
{
childprog();
return 0;
}
}
if (childpid != 0) //If Parent
{
wait(0);
//Stuff
return 0;
}
}
int childprog()
{
string temp;
getline(cin, temp);
cout << temp << endl; //Actually do other stuff, just here for debugging
return 0;
}
В то время как он должен распечатать:
string number one
string number two
string number three
string number four
Он печатает:
string number one
string number two
string number three
или
(blank line)
string number one
string number two
с пустыми строками в любом из возможных положений.
Спасибо за помощь!
Можете ли вы предоставить [MCVE], пожалуйста? –
OK, сделано. Программа полностью runable @ πάνταῥεῖ – DDriggs00