Nella maggior parte dei casi, è previsto che qualsiasi funzione che agisce su un file sposterà il puntatore del file. Ci sono casi rari in cui ho usato le funzioni per dare un'occhiata al file, che prevedeva di lasciare il puntatore del file così come è stato trovato. In tutti gli altri casi, mi aspetto che il puntatore del file si sposti come un effetto collaterale della funzione.
Le funzioni che non spostano il puntatore del file potrebbero rompere le cose gravemente nella maggior parte dei casi in cui accedo ai file come oggetti. Tuttavia, potrei aspettarmi che una funzione abbia il contenuto del file per lasciare il puntatore del file nella sua posizione originale. Tuttavia, ci sono casi in cui desidero ricevere X byte dall'hash della posizione corrente e potrebbe non interessare a dove si spostava il puntatore. Mi aspetterei che il comportamento sia specificato per tale funzione.
Mentre gli effetti collaterali delle chiamate di funzione sono generalmente scoraggiati, questo è un caso in cui sono previsti. A meno che non si abbia a che fare con codice che ha motivo di accedere in modo casuale (database di qualche tipo), l'aspettativa è che le chiamate ripetute di una funzione avanzeranno attraverso il file.
Il codice del tipo di database potrebbe contenere un codice che sposta la posizione nella posizione dei dati e un codice diverso per leggere tali dati. Spesso l'indice e i file di dati sono separati, quindi potrebbe essere opportuno eseguire letture ripetute dopo un riposizionamento.
In un caso, mi aspettavo che una lettura tracciasse dove si trovava il puntatore del file, in modo che una successiva scrittura sovrascriverebbe i dati appena letti. Mentre questo era il comportamento documentato, ha fallito drasticamente. La scrittura ha riavvolto il file e sembrava non aver scritto nulla. Il risultato è stato un ciclo in cui i dati sono stati letti nella posizione richiesta e sovrascritta, seguita da un riavvolgimento del file. Ho cambiato il codice per leggere da un file e scrivere tutti i dati nel nuovo file con le modifiche richieste applicate.