• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nie rozumiem działania funkcji setvbuf

VPS Starter Arubacloud
0 głosów
137 wizyt
pytanie zadane 10 marca 2018 w C i C++ przez k3ybo4rd Obywatel (1,180 p.)
Nie rozumiem funkcji setvbuf.

1. Nie wiem kiedy ją stosować setvbuf i fflush...

2. Po co się ją stosuje? ( Przecież nawet jeśli tego nie stosujemy to możemy zapisać dane do pliku)

3. Do czego właściwie służy ( Tyle co wiem to że tworzy alternatywny bufor do użytku standardowych funcji wejścia/wyjścia)

4. Po co stosuje się funkcję fflush() ???

Czytałem na ten temat i w książce Praty "Szkoła programowania Język C" i na różnych stronach, szukałem też przykładów a i tak nie wiem z czym to się je??

2 odpowiedzi

+2 głosów
odpowiedź 10 marca 2018 przez mokrowski Mędrzec (155,460 p.)

Istniejącemu strumieniowi (czy standardowemu czy też plikowemu), możesz stawiać różne wymagania.

Jeśli chcesz np. aby wczytywanie danych lub zapis do/z pliku odbywało się z maksymalną szybkością, możesz osiągnąć to alokując bufor w pamięci o wielkości BUFSIZ. Często urządzenia wyjściowe (np. dyski), mają "ulubioną" wielkość porcji danych które zapisują z maksymalną prędkością (8192 lub 4092 bajtów).

Jeśli zainteresowany jesteś raportowaniem błędów lub zapisem natychmiastowym danych do pliku (strumień stderr, log aplikacji), będziesz chciał wyłączyć całkowicie buforowanie na tym strumieniu. Cokolwiek do niego trafi, natychmiast znajdzie się w pliku, konsoli lub gdziekolwiek gdzie prowadzi ostatecznie strumień.

Jeśli system ma mało pamięci a chcesz przetwarzać dane linia po linii (np. interpreter komend), najprawdopodobniej przestawisz strumień w tryb pracy liniowy. 

Właśnie do tych zadań służy setbuf(...) i setvbuf(...).

Jeśli istnieje bufor na danym strumieniu, chcesz kontrolować kiedy nastąpi jego opróżnienie nie tylko gdy sam się wypełni. Być może np. chcesz by dane były w pliku teraz! Występuje to czasem np. przy okazji programowania wielowątkowego. Czasem w aplikacji otwarte jest kilka strumieni i gdy na jednym coś się pojawia, chcesz zapisać i być pewnym zapisu tej informacji w innym. Od tego masz fflush(...).

komentarz 11 marca 2018 przez k3ybo4rd Obywatel (1,180 p.)
:-) Dzięki
+1 głos
odpowiedź 10 marca 2018 przez Patrycjerz Mędrzec (192,340 p.)
Funkcję setvbuf stosuje się wtedy, gdy chce się zmienić domyślny bufor strumienia, czyli jego adres, tryb działania oraz rozmiar. Funkcja fflush natomiast wymusza zapis danych z buforu do strumienia.

W typowych zastosowaniach nie trzeba wywoływać setvbuf. Domyślny bufor spełnia swoje zadanie odpowiednio. Natomiast fflush można wywołać wtedy, gdy chcemy zapisać dane wcześniej niż przed zamknięciem pliku lub przepełnieniem buforu (tego drugiego się jedynie domyślam).
komentarz 10 marca 2018 przez k3ybo4rd Obywatel (1,180 p.)
No właśnie, ale po co zmieniamy domyślny bufor strumienia? Podasz przykład?
1
komentarz 10 marca 2018 przez Patrycjerz Mędrzec (192,340 p.)
Nie znam praktycznego wykorzystania funkcji setvbuf. Wszystko zależy od potrzeb programisty i założeń programu. Tobie radzę zapomnieć o tej funkcji, najprawdopodobniej nigdy ci się nie przyda, po co sobie nią zaprzątać głowę.
komentarz 10 marca 2018 przez k3ybo4rd Obywatel (1,180 p.)
Nie wiem Patrycjerzu, jestem laikiem i szczerze nie wiem co jest potrzebne a co nie :-)

Podobne pytania

0 głosów
0 odpowiedzi 117 wizyt
pytanie zadane 9 kwietnia 2022 w Python przez niezalogowany
0 głosów
1 odpowiedź 251 wizyt
0 głosów
1 odpowiedź 144 wizyt
pytanie zadane 3 kwietnia 2022 w Python przez niezalogowany

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...