Ich habe zwei Prozesse: t1.cpp
und t2.cpp
.Rohrbefehl machen Standardeingabe gebrochen
t1.cpp
und t2.cpp
sind vereinfacht, ich möchte das Problem einfach beschreiben.
//t1.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "hello\n"
<< "world\n"
<< "ok ok\n";
return 0;
}
//t2.cpp
#include <iostream>
#include <limits>
using namespace std;
int main()
{
string str;
while(getline(cin,str)){
cout << str <<endl;
}
//cin.clear();
//flush the cin
//cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
char x;
cin >> x;
return 0;
}
Nach t1.cpp
und t2.cpp
kompilieren. Ich führe sie auf diese Weise .
Probleme treten auf! cin >> x;
in t2.cpp
gescheitert! Ich habe keine Chance von der Tastatur aus zu tippen.
Es scheint, dass der Pipe-Befehl von redirecting the STDIN_FILENO
implementiert wird. Verbietet es die Standardeingabe gleichzeitig?
Meine harten Anforderungen ist Befehl zusätzlich |
, Daten von dem Ausgang der t1
mit Schale erhalten, ich mit den Nutzern in t2
.Für Beispiel interagieren will, würde ich eigentlich Sure to del?[y/n],and wait users's anwser.
Nicht wirklich eine C++ Frage. https://unix.stackexchange.com/questions/103885/piping-data-to-a-processs-stdin-without-causing-eof-afterward – LogicStuff
Ich denke, die richtige Antwort ist "do "Aber ich weiß nicht, was das ist. Liest es aus '/ dev/tty'? Wie kommt es, dass ich Eingaben zuverlässig an jeden Befehl senden kann, den ich an "weniger" anschließe? –