# problème C (2)



## vibra (2 Mars 2008)

Bonjour,
Je suis sur mac os x et j'utilise Xcode pour programmer en C.
Il se produit un problème lorsque je veux écrire dans un fichier. Le problème est que le mode d'ouverture "w" agit exactement comme la code d'ouverture "w+", c'est-à-dire que w m'efface le contenu du fichier avant d'écrire dedant, ce qui n'est pas normal
D'où vient cette erreur ?
Merci de votre aide.


----------



## Vivid (2 Mars 2008)

vibra a dit:


> Bonjour,
> Je suis sur mac os x et j'utilise Xcode pour programmer en C.
> Il se produit un problème lorsque je veux écrire dans un fichier. Le problème est que le mode d'ouverture "w" agit exactement comme la code d'ouverture "w+", c'est-à-dire que w m'efface le contenu du fichier avant d'écrire dedant, ce qui n'est pas normal
> D'où vient cette erreur ?
> Merci de votre aide.



si tu montrer ton code


----------



## Didier Guillion (3 Mars 2008)

Ben, si c'est normal...

w+ c'est pour ouvrir en lecture écriture

fait 

fopen(nom,"a");

pour ajouter au contenu existant.

Plus d'info :

http://opengroup.org/onlinepubs/007908775/xsh/fopen.html

Cordialement


----------



## vibra (5 Mars 2008)

Daccord, mais je ne comprend pas la différence entre w et w+


----------



## Didier Guillion (5 Mars 2008)

De mémoire :

"w" ouverture en ecriture, si le fichier existe il est vidé, s'il n'existe pas il est créé
"w+" ou "r+" ouverture en lecture/ecriture, si le fichier existe il est vidé, s'il n'existe pas il est créé dans le cas de "w+" mais pas dans le cas de "r+"

Cordialement


----------



## vibra (5 Mars 2008)

En fait la différence entre w et w+ c'est que dans un cas on peut lire et pas dans l'autre.
En fait en anglais writing, c'est juste écrire et update c'est écrire/lire c'est ça ?
Merci de ton aide !


----------



## Didier Guillion (5 Mars 2008)

vibra a dit:


> En fait la différence entre w et w+ c'est que dans un cas on peut lire et pas dans l'autre.
> En fait en anglais writing, c'est juste écrire et update c'est écrire/lire c'est ça ?
> Merci de ton aide !



Exact  !

Cordialement


----------



## vibra (5 Mars 2008)

Ok, merci beaucoup !


----------



## tatouille (7 Mars 2008)

man fopen

The argument mode points to a string beginning with one of the following
     sequences (Additional characters may follow these sequences.):

     ``r''   Open text file for reading.  The stream is positioned at the
             beginning of the file.

     ``r+''  Open for reading and writing.  The stream is positioned at the
             beginning of the file.

     ``w''   Truncate file to zero length or create text file for writing.
             The stream is positioned at the beginning of the file.

     ``w+''  Open for reading and writing.  The file is created if it does not
             exist, otherwise it is truncated.  The stream is positioned at
             the beginning of the file.

     ``a''   Open for writing.  The file is created if it does not exist.  The
             stream is positioned at the end of the file.  Subsequent writes
             to the file will always end up at the then current end of file,
             irrespective of any intervening fseek(3) or similar.


----------



## vibra (7 Mars 2008)

Ok, merci, c'est clair maintenant.


----------



## vibra (22 Mars 2008)

J'ai une nouvelle question. C'est d'ailleurs plus une inquiétude !
Si on fait appel à une allocation dynamique et qu'on oublie de faire "free" à la fin, l'os ne peut plus toucher à la mémoire utilisée par l'allocation. Mais alors la mémoire est définitivement perdue ?!!:rateau:


----------



## grumff (22 Mars 2008)

À priori il est capable de la récupérer quand tu quittes le programme. Mais tant qu'il tourne, elle est perdue.


----------



## vibra (22 Mars 2008)

grumff a dit:


> À priori


À priori seulement ?:mouais:


----------



## Didier Guillion (22 Mars 2008)

vibra a dit:


> À priori seulement ?:mouais:




Non. Avec Mac OS X, la memoire allouée a une tache est entierement libérée quand la tache se termine, meme via un crash. C'est un des avantages d'UNIX.
Par contre fait gaffe de ne pas allouer des tailles memoires trop grandes (genre tailles negatives mal transtypées) car Mac OS X va gérer du swap sur disque pour allouer des centaines de giga et cela risque de mal se terminer.

Cordialement


----------



## vibra (22 Mars 2008)

Merci beaucoup, je suis rassuré !!


----------



## vibra (29 Mars 2008)

Non, en fait je ne suis pas rassuré du tout !
Depuis quelques temps une barre violette s'affiche sur mon écran au moment de l'ouverture de la cession, puis disparait. 
Et puis j'ai eu un étrange bug qui faisait que je ne pouvais plus déplacer un dossier car il me l'effaçait! :rateau::affraid:
Je suppose que ces problèmes viennent du fait que j'ai du toucher à la mémoire en programmant


----------



## Didier Guillion (29 Mars 2008)

vibra a dit:


> Non, en fait je ne suis pas rassuré du tout !
> Depuis quelques temps une barre violette s'affiche sur mon écran au moment de l'ouverture de la cession, puis disparait.
> Et puis j'ai eu un étrange bug qui faisait que je ne pouvais plus déplacer un dossier car il me l'effaçait! :rateau::affraid:
> Je suppose que ces problèmes viennent du fait que j'ai du toucher à la mémoire en programmant



Cela me semble difficilement envisageable, plutot un probleme hardware a mon avis...

Cordialement


----------



## vibra (29 Mars 2008)

Et ça ce soigne ??:sick:


----------



## Didier Guillion (29 Mars 2008)

vibra a dit:


> Et ça ce soigne ??:sick:



Cela depasse mes compétences. Désolé.

Cordialement


----------



## Eul Mulot (30 Mars 2008)

Essaye un reset de la PRAM ou un bon MemTest pour voir ce qui se passe. J'ai eu un soucis avec une barrette mal placée qui me faisait des saloperie niveau affichage.


----------



## vibra (1 Avril 2008)

Merci de ton aide, mais les problèmes ont disparu aussi vite qu'ils sont venus.
Un reset de la PRAM, ça efface tout ce qu'il y a sur la mémoire ? Et un MemTest c'est quoi ?


----------



## Eul Mulot (1 Avril 2008)

Non non un reset PRAM n'efface rien de ta mémoire. Pour un memtest c'est juste un petit exécutable à télécharger et à lancer en single user, qui effectue toutes les opérations possibles sur ta mémoire afin de voir si elle n'est pas défectueuse.


----------



## vibra (2 Avril 2008)

En fait les problèmes sont réapparus concrètement, à qu'est que la PRAM, et comment on fait un reset PRAM stp ??


----------



## Eul Mulot (2 Avril 2008)

Après le premier "boing" de boot, il faut que tu tiennes enfoncé "alt-pomme-p-r" jusqu'à ce que tu entends ce bruit une seconde fois.



			
				Internet ... a dit:
			
		

> Depending on how far back you go in computer lore, you can find more than one definition of PRAM. The first is a Macintosh-only kind of internal computer memory. The second is more modern and, actually, still experimental.
> 
> PRAM in Mac land stands for Parameter random access memory (RAM), which is a kind of non-volatile RAM (NVRAM). PRAM contains a suite of very important information, including settings for a computer's startup disk and startup volume, time zone, and speaker volume. Previous versions of the Mac Operating System stored display and network settings in the PRAM. Mac OS X has eliminated that function, so users who have problems with network or display settings must reset PRAM.
> 
> ...


Source


----------



## vibra (4 Avril 2008)

Ok, merci.


----------

