ERREUR RELATIVE A FOPEN/FCLOSE

sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 - 28 juil. 2003 à 17:04
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 28 juil. 2003 à 22:53
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/11131-erreur-relative-a-fopen-fclose

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2003 à 22:53
Oui mais ...

Je veux dire (amicalement) que tant que l'on ne fais pas des malloc trop gros, il est rare mais cela arrive, que le malloc retourne NULL, donc je peux me permettre dans chacun de mes programme, quitter des qu'il y a une erreur !

Bon voila c'est tout !
A moi, c'est vachement utile !
Toi tu en fais ce que tu veux

JCDjcd
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
28 juil. 2003 à 21:09
bon je t'explque...

malloc est une fonction de la lib standard

xmalloc est une fonction qui sur-couche malloc, on est toujours d'accord ??

mnt, il serais stupide d'ecrire une fonction qui sur-couche xmalloc

de plus une fonction qui prendra trop de sur-couche, comme tu dis quil est mieux de faire, tendra etre plus dupliquer car pour certaines taches, elle fera trop de travail, et donc plein de truc inutile...

il te faudra donc copier cette fonction et enlever des choses, ce qui n'est pas tres logique, je pense quil est mieux de surcoucher au minimum, et ensuite de rajouter les specificiter la ou on en a besoin

enfin bon... je pense que nous devrions clore la discution ici car nous derivons mechament du sujet, et de plus, elle ne mene nul part, personne n'as tord, personne n'as raison, juste des point de vue divergent dont on a deja suffisement parler

:)
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2003 à 20:52
Faux !
Les sur-couche ont tres souvent plus de parametres !
Logique, elle sont plus puissate, et peuvent faire plus de choses !
Donc moi je pense qu'elle devrait avoir plus d'argument !


je cite : "aussi le prend pas mal, mais il faut vraiment etre stupide pour surcoucher une fonction deja surcoucher, je ne voit vraiment pas a quoi sa sert, et ni pourquoi le faire"

apparement la fonction est DEJA sur-couchee, ... OU ??
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
28 juil. 2003 à 20:43
> exit(1);
> Mais c'est juste une convention !

ah bon ? d'ou, depuis quand ?

> Sinon pourquoi le exit prend un valeur ... c'est juste pour faire
> joli !??

mdr, parceque 0 c'est pas une valeur ?

> Et je n'ai pas compris : il ne vaut pas nommer un fonction avec des
> majuscules ??

il me semble avoir ecrit "la norme ansi n'interdit pas, mais preconise fortement de ne pas utiliser de majuscule pour definir des nom de fonctions"

donc si tu avais lu correctement, tu aurais su que je n'ai pas dit que c'est interdit, mais que c'est deconseiller

> Et pour imfomation : la fonction xmalloc ou xfopen ou encore
> xfclose N'EXISTE PAS !!!!!!!!!!

ah bon ?? bah je savais pas...

biensure qu'elle n'existe pas, c'est a nous de les re-ecrire, encore une fois, si tu avais lu correctement, tu aurais vu que j'ai dit que la norme ansi preconise de mettre un x devant les fonctions secure qu'on a re-ecrit, et personne n'interdit de rajouter les gestions d'erreurs et autres dedans

c'est juste quil est preferable d'eviter de modifier les parametres originaux

void *malloc(size_t size);
void *xmalloc(size_t size);

ni plus, ni moins
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2003 à 19:08
exit(1);
Mais c'est juste une convention !
Sinon pourquoi le exit prend un valeur ... c'est juste pour faire joli !??



Mais je suis tout fais d'accord sur ce point : il faut factoriser la gestion des erreurs au maximum !

Et je n'ai pas compris : il ne vaut pas nommer un fonction avec des majuscules ??

Et pour imfomation : la fonction xmalloc ou xfopen ou encore xfclose N'EXISTE PAS !!!!!!!!!!


he oui peut etre que chez toi ca existe, mais sur d'ancien compilateur ... il connait pas ! en revanche malloc est plus portable !
De plus il est plus agreable de le faire soit meme, car dans un gros projet si on veut traiter le erreurs nous-meme (car on est bien oblige) il faut reecrire la fonction, en plus je peux a mon gre rajouter des fonctionnalite ... du genre la ligne et le fichier dans lequel c'est produit l'erreur ... pour situer l'appelant ! chose qu'il n'y a pas avec le xmalloc pre-programmer !
le xmalloc c'est pour les petits projets ...
Un exemple similaire : la fonction random : pour le petit programme c'est tres bien, pour les debut en C aussi ... mais pour des vraie probleme qui ont besoin de random (un bon exemple est le calcul d'un volume dans l'espace) ... he bien il s'avere que la fonction random est HORRIBLEMENT nulle ! l'algorithme est tres bof !
Tout ca pour dire qu'il faut mieux des fois reecrire certaines sur-couche plus appropriees !


Cordialement JCDjcd.
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
28 juil. 2003 à 18:22
alors tout d'abord, exit(0) est tout a fait correct, je vois pas le probleme a mettre zero, et encore moins pourquoi il faut absoluement mettre une valeur non-nulle, il n'y a pas de norme pour ca, chacun renvoie ce quil veut, et a part zsh, je ne connais pas beaucoup d'autre shells qui se soucie du retour d'un programme....

pour ce qui est de la surcouche, dans un gros gros projet, tu est bien content de l'avoir ta surcouche et de pas avoir a re-ecrire 200'000 fois tes if pour tester ton malloc ou ton file descriptor, tu gagne une place pas possible dans ton code, et c'est plus concie, biensure si tu te limite a coder une calculette tu peux t'en foutre, mais dans un projet de plus de 10'000 lignes deja, t'es contant de l'avoir

aussi le prend pas mal, mais il faut vraiment etre stupide pour surcoucher une fonction deja surcoucher, je ne voit vraiment pas a quoi sa sert, et ni pourquoi le faire

de plus, je pense que changer les parametres initiaux d'une fonction, ca le fait pas trop void *malloc(size_t size) devrais garder les memes arguments et ne pas en prendre d'autres...

la nomination du x devant une fonction secure est telle qu'elle est decrite dans la norme ansi

de plus, la norme ansi n'interdit pas, mais preconise fortement de ne pas utiliser de majuscule pour definir des nom de fonctions, ce que tu as formidablement bien montrer avec xMalloc

voila, sans rancunes
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
28 juil. 2003 à 17:33
exit(0);

non non non, il faut retouner une valeur != de 0, par exemple 1
Donc exit(1);

Pour cer qui est de la surcouche ... quand j'ai plein de sur-couches
je fais xxmalloc... puis xxxxxxmalloc !

Et le joutrs ou ma fonction de depart s'appelle xyz !
Ma fonction de sur-couche s'appelle xxyz, au quel cas la vrai fonction est yz et xxyz est une sur-sur-couche !!

La nomination n'est pas mtres bonne ... il fautdrait peut-etre mettre des majuscules, ou _, ect ...



Le but de cette source etait de monter le traitement des erreurs
relatives au fonctions fopen et fclose ...


Et pour ce qui est de stderr ... pas forcement !
si j'ai mon fichier error.txt ... il faudrait plutot faire :
void *xMalloc(FILE *fileError,size_t size);

Et si tu as envi que se soit stderr, tu fais :
p = xMalloc(stderr,100*sizeof(MY_STRUCT));

Comme on rend content tout le monde !
sebseb42 Messages postés 495 Date d'inscription dimanche 6 juillet 2003 Statut Membre Dernière intervention 9 novembre 2007 1
28 juil. 2003 à 17:04
ces fonctions aurais du s'appeler xfopen et xfclose, les surcouche secure des fonctions existante generalement prennent un x devant

et aussi je te conseil de preciser dans tes message que tu quitte :) de plus il est preferable d'ecrire sur la sortie d'erreur via un fprintf(stderr, "error");

un peux comme xmalloc

void *xmalloc(size_t size)
{
void *ptr;

ptr = malloc(size);
if (ptr == NULL)
{
fprintf(stderr, "unable to perform malloc, exiting
");
exit(0);
}
return (ptr);
}

:)
Rejoignez-nous