„unbuffer” lub „stdbuf” do usuwania buforowania standardowego?

13

Czy istnieje różnica między unbuffer (1) a stdbuf (1)? Z tego, co zbieram, unbuffer robi coś więcej niż „najlepszy wysiłek” wywołania na początku zestawu funkcji libc (X) buf, a następnie pozostawienia rzeczy?

dan3
źródło

Odpowiedzi:

14

Działają na zupełnie inne sposoby.

Program rozpakowujący program oczekuje na uruchomienie nazwanego polecenia. Ponieważ oczekiwanie tworzy pseudo-tty do dołączenia do standardowego procesu potomnego, dziecko może zostać oszukane, myśląc, że powinno używać buforowania linii zamiast buforowania bloków. Niektóre programy zmienią swoje zachowanie, gdy isatty (standardowe wyjście) jest prawdziwe, inne tego nie zrobią i bardzo trudno jest ustalić, która będzie, a która nie.

Program stdbuf próbuje umieścić libstdbuf przed libc dla dynamicznie ładowanych plików binarnych. Gdzie libstdbuf przedefiniowuje domyślną strategię buforowania wywołań libc stdio.

Dowiedziałem się tego przez

 apt-get source expect coreutils

i czytanie odpowiedniego źródła dla każdego programu.

msw
źródło
Niektóre niepokojące rzeczy (ze strony podręcznika): unbuffer -pmogą wydawać się działać niepoprawnie, jeśli proces wprowadzający dane wejściowe do bufora niebuforowego zakończy działanie. Zastanów się: process1 | unbuffer -p process2 | process3jeśli proces 1 zakończy się, proces 2 może jeszcze nie zostać zakończony. Nie jest możliwe, aby
unbuffer
Wygląda na to, że stdbuf może również kontrolować buforowanie stdin programów używających strumieni C, co wydaje się ważne. Być może powinno to zostać uwzględnione w odpowiedzi na korzyść przyszłych czytelników.
dan3