Für den größten Teil meines Lebens, habe ich cstdio
verwendet. Jetzt versuche ich auf iostream
umzustellen.Run.exe und umleiten stdin und und
Angenommen, ich habe ein eigenes Programm namens „foo.cpp“, der wie folgt aussieht:
int main(){ // foo.cpp
int x;
std::cin >> x;
std::cout << x + 5 << "\n";
}
In einem anderen Programm namens „bar.cpp“, rufe ich die foo ausführbar. In der Vergangenheit, wenn ich stdin und stdout in eine Datei umleiten wollte, würde ich freopen
wie so verwenden:
int main(){ // bar.cpp, redirecting stdin and stdout
freopen("foo.in", "r", stdin); // Suppose "foo.in" contains a single integer "42"
freopen("foo.out", "w", stdout);
system("foo.exe"); // "foo.out" will contain "47"
}
Jetzt stringstreams Ich versuche std::cin
und std::cout
zu umleiten. Etwas wie folgt aus:
int main(){ // bar.cpp, redirecting cin and cout
std::istringstream instr("62");
std::ostringstream outstr;
std::cin.rdbuf(instr.rdbuf());
std::cout.rdbuf(outstr.rdbuf());
system("foo.exe"); // outstr should contain "67"
}
Aber was ich gelernt habe, ist, dass std::cin
und std::cout
nicht umgeleitet wurde, als „foo.exe“ ausgeführt wird. Das Programm erwartet nun eine Benutzereingabe und druckt auf std::cout
. Wenn die Ausführung von "foo.exe" durchgeführt wurde, blieben std::cin
und std::cout
innerhalb von "bar.cpp" immer noch an instr
bzw. outstr
umgeleitet.
Meine Frage ist, gibt es einen Weg, es mit iostream
zu tun, wie ich es beabsichtigte, oder bin ich mit der Verwendung von freopen
fest?
Das Betriebssystem ist verantwortlich für die Verarbeitung der Ausgabe von ausführbaren Dateien. Die C++ - Sprache verfügt nicht über Funktionen zum Umleiten der Ausgabe. –
Gemeinsame Lösungen für die gemeinsame Nutzung von Daten zwischen Programmen: Dateien, Sockets, Rohrleitungen (sagen Sie OS, um die Ausgabe eines anderen Programms in die Standardeingabe für Ihr Programm zu leiten), gemeinsame Speicherbereiche. Das Internet durchsuchen. –
Haben Sie versucht, die gleichen Freopen-Anrufe zu machen? – stark