Cofanie efektów ungetc (): „Jak” robią to fseek (), rewind () i fsetpos ()? Czy bufor jest uzupełniany za każdym razem?

Huh! Jak mam to wszystko wyjaśnić? Spróbuję:

Wiem, że pliki otworzyły się za pomocąfopen() są buforowane do pamięci. Używamy bufora dla wydajności i łatwości. Podczas odczytu z pliku zawartość pliku jest najpierw odczytywana do bufora, a my czytamy z tego bufora. Podobnie, w pliku zapisu do pliku, zawartość jest najpierw zapisywana w buforze, a następnie w pliku.

Ale co zfseek(),fsetpos() irewind()rzut efekt poprzednich połączeńungetc()? Czy możesz mi powiedziećw jaki sposób to znaczy, biorąc pod uwagę, że otworzyliśmy plik do odczytu i jest on kopiowany do buforaungetc() zmieniliśmy niektóre postacie w buforze. Oto, czego po prostu nie rozumiem, nawet po wielu wysiłkach:

Oto co powiedział oungetc() -„Wywołanie fseek, fsetpos lub rewind on stream odrzuci wszystkie znaki, które poprzednio zostały do ​​niego wprowadzone za pomocą tej funkcji”. - Jak można odrzucić postacie już umieszczone w buforze? Jedno z podejść polega na tym, że oryginalne postacie, które zostały usunięte, są „zapamiętywane” i każda nowa postać, która została wprowadzona, jest identyfikowana i zastępowana oryginalnym znakiem. Inną opcją jest załadowanie kopii oryginalnego pliku do bufora i umieszczenie wskaźnika pliku w zamierzonym położeniu. Które z nich robi fseek, fsetpos lub przewijanie do tyłu, aby odrzucić znaki użyte przy użyciuungetc()?

W przypadku strumieni tekstu, w jaki sposób obecność nieprzeczytanych znaków w strumieniu, znaków, które zostały wprowadzone do użyciaungetc(), wpływają na wartość zwracanąftell()? Moje zamieszanie wynika z następującej liniiftell() iungetc() z tego linku oftell(ŹRÓDŁO)

„W przypadku strumieni tekstowych wartość liczbowa może nie mieć znaczenia, ale nadal może być użyta do przywrócenia pozycji do tej samej pozycji później za pomocą fseek (jeśli są znaki, które są odkładane przy użyciu ungetc wciąż oczekującego na odczyt, zachowanie jest niezdefiniowane). ”

Skupiając się na ostatniej linii powyższego akapitu, co mapending of being read zrobić z odrzuconą postacią „ungetc () -”? Za każdym razem czytamy postać, która została wprowadzona do strumienia za pomocąungetc()to prawdaodrzucone po przeczytaniu?

questionAnswers(2)

yourAnswerToTheQuestion