Si un fichier est ouvert à l'aide de la commande suivante:Ouverture d'un fichier 'a +' en mode
FILE *f1=fopen("test.dat","a+");
La page de manuel lit:
a +
Ouvert pour la lecture et annexant (écrire à la fin du fichier). Le fichier est créé s'il n'existe pas. La position initiale du fichier pour la lecture est au début du fichier, mais la sortie est toujours ajoutée à la fin du fichier.
donc f1
ont fait 2 pointeurs de compensation distincts, l'un pour l'autre pour lire & écrire?
Il peut également être utile de savoir que cela est généralement implémenté en termes de 'open' avec l'indicateur O_APPEND sur les systèmes POSIX: http://pubs.opengroup.org/onlinepubs/7908799/xsh/open.html –
cas fseek n'est pas appelé avant de lire, beaucoup d'espaces sont imprimés dans le code ci-dessous. Je n'attendais rien à imprimer à l'écran. Mais aucune raison pour laquelle les espaces sont imprimés? Cela signifie qu'EOF n'est pas rencontré correctement. Si je décommente fseek ci-dessous, les données sont correctement imprimées à l'écran. 'int main() { FICHIER * fp1; char ch; fp1 = fopen ("m.txt", "a +"); fputs ("données ajoutées", fp1); // fseek (fp1,0, SEEK_SET); while ((ch = getc (fp1))! = EOF) { putc (ch, stdout); } fclose (fp1); return 0; } ' –