#include <iostream>
#include <unistd.h>
#include <stdlib.h>
int main() {
std::cout << 1;
fork();
exit(0);
}
Urządzenie fork
znajduje się po przesłaniu strumieniowym do cout
, ale ten kod drukuje 11. Dlaczego? I dlaczego kod wypisuje tylko 1, jeśli std::endl
został dodany do cout
?Dlaczego fork() powoduje duplikowanie danych wyjściowych?
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
int main() {
std::cout << 1 << std::endl;
fork();
exit(0);
}
Bufory są przepłukiwane dwukrotnie w dwóch procesach. Człowieku, to musi być denerwujące. –
Niestety obiekty C++ nie grają dobrze z rozwidleniami. Zasadniczo, obiekt jest skutecznie kopiowany-konstruowany bez tworzenia kopii, a to obchodzi dużo ochrony zbudowanej przez C++. – SergeyA
Mogę sobie tylko wyobrazić, że spustoszenie 'fork()' spowoduje spadanie na standardowych pojemnikach. Po prostu tego nie rób. –