[C++, Linux] Jak wyłączyć buforowanie potoków?
Ostatnio zmodyfikowano 2015-07-20 12:23
DejaVu Temat założony przez niniejszego użytkownika |
[C++, Linux] Jak wyłączyć buforowanie potoków? » 2015-07-17 20:34:56 cmn::Subprocess app; app.open( "grep costam" );
std::wstring row; while( app.readLine( row ) ) wprintf( L"Line: %ls\n", row );
Mam sobie powyższy program, który uruchamia drugi proces. Problem w tym, że pipe buforuje dane i tym samym wyników nie otrzymuję co wiersz, lecz co 4KB danych. Czy ktoś z Was wie jak wyłączyć buforowanie potoku lub jak rozwiązać problem w inny sposób? |
|
Elaine |
» 2015-07-18 10:09:16 Problem w tym, że pipe buforuje dane |
Nie pipe, tylko grep. man grepman stdbuf |
|
DejaVu Temat założony przez niniejszego użytkownika |
» 2015-07-18 13:06:35 |
|
Elaine |
» 2015-07-19 01:41:26 A grep nie buforuje przypadkiem danych po jednym wierszu? |
Nie. Możesz się łatwo przekonać sam, wykonując grep foo | cat. To nie ma sensu, fsync służy do opróżniania bufora wyjściowego należącego do FILE*. Miałoby sens, gdybyś wywoływał to w procesie grepa, ale zabawa z tym jest jeszcze bardziej bez sensu. …oczywiście używasz pipe, nie popen? |
|
DejaVu Temat założony przez niniejszego użytkownika |
» 2015-07-19 11:25:58 Tak, używam pipe do utworzenia deskryptorów, a po wykonaniu forka w procesach używam dup2. |
|
DejaVu Temat założony przez niniejszego użytkownika |
» 2015-07-20 12:23:14 Grep faktycznie był źródłem problemów, a nie potoki. Dzięki! |
|
« 1 » |