Opróżnianie plików ed fopen () otwartych w trybie aktualizacji, pomiędzy operacjami odczytu i zapisu. Potrzebne jest jawne spłukiwanie?

Przeczytałem o przełączaniu między operacjami odczytu i zapisu (i odwrotnie) dla plików otwartych do aktualizacji przy użyciufopen() (POŁĄCZYĆ)

„W przypadku plików otwartych do aktualizacji (takich, które zawierają znak„ + ”), na których dozwolone są zarówno operacje wejściowe, jak i wyjściowe, strumień powinien zostać opróżniony (fflush) lub zmieniony (fseek, fsetpos, rewind) między operacją zapisu przez operację odczytu lub operację odczytu, która nie dotarła do końca pliku, po którym następuje operacja zapisu. ”

Są tutaj dwie rzeczy, które chciałbym podkreślić

strumień powinien zostać opróżniony (fflush) lub zmieniony (fseek, fsetpos, rewind)między operacją zapisu a operacją odczytulub operacja odczytu, która nie dotarła do końca pliku, po którym następuje operacja zapisu.

1) Jeśli chodzi o pierwszy punkt, czy myjawnie potrzebuję opróżnić między operacją zapisu i odczytu. Mam na myśli, przypuśćmy, że jeśli zamierzamy napisać do nowego pliku, a następnie odczytać go z powrotem. W tym przypadku użyjfseek() lubrewind() aby dostać się do początku pliku po zapisaniu ma sens, a jako efekt uboczny będzie opróżnić bufor. Ale chcę wiedzieć, co by się stało, jeśli aktualizujemy / nadpisujemy pierwszą część już istniejący plik z nowymi danymi, ale gdy już to zrobimy, chcemynatychmiast zacznij odczytywać pozostałe, stare dane z tego miejscaCzy musimy użyć czegoś takiegofseek(pFile,0,SEEK_CUR) tak, że opróżniamy bufor dlawrite-read przejście, a jednocześnie nie zmienia pozycji wskaźnika pliku? To samo zamieszanie wynika również z drugiego scenariusza, kiedy chcemy przeczytać pierwszą połowę pliku izaraz po tym chcesz tam zacząć pisać. Odpowiedz na to pytanie.

2) Druga część oreading operation which did not reach the end-of-file zdaje się sugerować, że jeśli operacja odczytu dotrze do końca pliku i zamierzamy później pisać, nie potrzebujemy do tego bufora do opróżnieniaread-write transition.Możesz to potwierdzić, to znaczy? Tylkowrite-read przejście wymaga zaczerwienienia, a nieread-write przejście, zwłaszcza jeśli odczyt osiągnął koniec pliku?

questionAnswers(1)

yourAnswerToTheQuestion