Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

trois petites questions

23 réponses
Avatar
pere.noel
La première question :

dans main(...) faut-il terminer pae return ou exit, je présume exit
EXIT_SUCCES|EXIT_FAILURE ???

La seconde question :

si un fichier est vide (ce qui peut-être "normal" (ie non pathologique)
le "file = fopen(file_name, "r");" retourne NULL ???

j'ai eu ce cas...

y a tt'il un moyen de vérifer la différence entre :

fichier non présent et fichier présent MAIS vide ???

dans le cas ou "file = fopen(file_name, "r");" retourne NULL, le
"fclose(file);" restet'il utile ou non ? (je pense que non...

La troisième question :

elle concerne les vars d'environnement.

avec getenv("HOME"); je peux attraper le HOME du USER, SHELL et TERM
aussi mais y a t'il un moyen de lister les vars d'env vues par C ???

par exemple existe-t'il un var donnant le séparateur "/" dans les pathes
de fichiers ???

c tout pour aujourd'hui )))

au fait, le K&R et nettement + lisible que le delannoy (bien nommé
àlanoix) ;-)

--
une bévue

10 réponses

1 2 3
Avatar
Xavier Roche
dans main(...) faut-il terminer pae return ou exit, je présume exit
EXIT_SUCCES|EXIT_FAILURE ???


return est amha plus propre. Mais bon, les goûts et les couleurs.

La seconde question :
si un fichier est vide (ce qui peut-être "normal" (ie non pathologique)
le "file = fopen(file_name, "r");" retourne NULL ???


Non. Un fichier vide est parfaitement légal.

j'ai eu ce cas...


Ce n'est pas normal. Problème d'accès en lecture ?

FILE *fp = fopen("/tmp/foo", "r");
if (fp != NULL) {
} else {
const err = errno; /* #include <errno.h> */
fprintf(stderr, "error %x (%s)n", err, strerror(err));
..

aussi mais y a t'il un moyen de lister les vars d'env vues par C ???


"environ" est en général présent
extern char **environ;
<http://www.opengroup.org/onlinepubs/007908799/xsh/environ.html>

char **e;
for(e = environ ; *e != NULL ; e++)
printf("%sn", *e);

au fait, le K&R et nettement + lisible que le delannoy (bien nommé
àlanoix) ;-)


Le K&R est effectivement un très bon bouquin pour attaquer le C. Ca se
lit d'une traite, et permet de démarrer assez rapidement..

Avatar
Harpo
Xavier Roche wrote:

dans main(...) faut-il terminer pae return ou exit, je présume exit
EXIT_SUCCES|EXIT_FAILURE ???


return est amha plus propre. Mais bon, les goûts et les couleurs.


J'ai commis un post à ce sujet :
<441a542a$0$20162$

Il n'y a pas eu de contestation mais c'est peut-^etre que je les ai
endormis avant la fin.

Je pense que le truc 'normal', c'est return.

La seconde question :
si un fichier est vide (ce qui peut-être "normal" (ie non
pathologique) le "file = fopen(file_name, "r");" retourne NULL ???


Non. Un fichier vide est parfaitement légal.


L'erreur devait venir d'ailleurs.

--
http://patrick.davalan.free.fr/


Avatar
pere.noel
Harpo wrote:

J'ai commis un post à ce sujet :
<441a542a$0$20162$


comment fait-on pou retrouver ce message ?

Il n'y a pas eu de contestation mais c'est peut-^etre que je les ai
endormis avant la fin.

Je pense que le truc 'normal', c'est return.

La seconde question :
si un fichier est vide (ce qui peut-être "normal" (ie non
pathologique) le "file = fopen(file_name, "r");" retourne NULL ???


Non. Un fichier vide est parfaitement légal.


L'erreur devait venir d'ailleurs.


possible, dans ma précipitation...

ok, merci à tout deux.

j'ai posé la question exit vs return parce qu'avec l'un comme l'autre
si, au terminal je fais :

toto=`./test`; echo $toto


je n'ai rien en retour (même avec return) ???

bon, ça c'est du shell HS car :

~/work/C/my_libs/dll_path%> echo $?
0


donc ça roule...
--
une bévue



Avatar
Eric Levenez
Le 10/09/06 19:07, dans
<1hlgq1w.1o6ermkjz6quN%, « Une bévue »
a écrit :

Harpo wrote:

J'ai commis un post à ce sujet :
<441a542a$0$20162$


comment fait-on pou retrouver ce message ?


Pas évident. Soit tu utilises un lecteur de news qui archive ce que tu lis
et il faut que tu ai déjà lu ce message! Soit tu recherches avec google
(<http://groups.google.com/advanced_search> champ "message ID"), mais cela
ne marche que pour les messages qui sont archivés (beaucoup d'utilisateurs
refusent l'archivage en mettant un X-No-Archive dans leur message).

Donc quand on veut aider quelqu'un on ne donne jamais l'ID du message mais
directement l'URL où le récupérer de façon sûr, comme par exemple :

<http://groups.google.com/group/fr.comp.lang.c/msg/9321ceb66a490052>

j'ai posé la question exit vs return parce qu'avec l'un comme l'autre
si, au terminal je fais :

toto=`./test`; echo $toto


je n'ai rien en retour (même avec return) ???


Là tu demandes au shell de mémoriser la sortie stdout dans la variable toto.
Cela n'a rien à voir avec le code de retour du programme qui est $?.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.


Avatar
pere.noel
Eric Levenez wrote:

Donc quand on veut aider quelqu'un on ne donne jamais l'ID du message mais
directement l'URL où le récupérer de façon sûr, comme par exemple :

<http://groups.google.com/group/fr.comp.lang.c/msg/9321ceb66a490052>


OK, merci !

j'ai posé la question exit vs return parce qu'avec l'un comme l'autre
si, au terminal je fais :

toto=`./test`; echo $toto


je n'ai rien en retour (même avec return) ???


Là tu demandes au shell de mémoriser la sortie stdout dans la variable toto.
Cela n'a rien à voir avec le code de retour du programme qui est $?.


j'avais rectifié le tir de moi-même...
--
une bévue



Avatar
Harpo
Eric Levenez wrote:


Donc quand on veut aider quelqu'un on ne donne jamais l'ID du message
mais directement l'URL où le récupérer de façon sûr, comme par exemple
:

<http://groups.google.com/group/fr.comp.lang.c/msg/9321ceb66a490052>


Ok, ou quand c'est trop long :
http://minilien.com/?By2wnAzuLs

Désolé pour ma paresse.

j'ai posé la question exit vs return parce qu'avec l'un comme l'autre
si, au terminal je fais :

toto=`./test`; echo $toto


je n'ai rien en retour (même avec return) ???


Là tu demandes au shell de mémoriser la sortie stdout dans la variable
toto. Cela n'a rien à voir avec le code de retour du programme qui est
$?.


Et puis j'ai beau chercher, j'en perds mon shell, je ne vois pas la
différence avec
./test

--
http://patrick.davalan.free.fr/



Avatar
Eric Levenez
Le 10/09/06 20:00, dans <450452dd$0$29461$, « Harpo »
a écrit :

Eric Levenez wrote:

<http://groups.google.com/group/fr.comp.lang.c/msg/9321ceb66a490052>


Ok, ou quand c'est trop long :
http://minilien.com/?By2wnAzuLs


On ne poste jamais de mini liens (et surtout sans quoter avec <> comme il
faut). En plus de pouvoir pointer vers n'importe quoi de douteux, cela n'est
pas poli du tout (sans parlé de la pub qu'il faut se taper). La seule
méthode valable est le lien complet encadré avec des <>. La norme indique
clairement que les blancs et new-line sont ignorés dans les URL entre les
<>, ceci permet de faire des liens multi-lignes. Si un lecteur de news n'est
pas capable de gérer cela, il faut le jeter et utiliser un autre lecteur.

toto=`./test`; echo $toto




Et puis j'ai beau chercher, j'en perds mon shell, je ne vois pas la
différence avec
./test


Si c'est vraiment le cas, il faut poster ta question sur un groupe unix.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.




Avatar
Harpo
Eric Levenez wrote:

On ne poste jamais de mini liens (et surtout sans quoter avec <> comme
il faut). En plus de pouvoir pointer vers n'importe quoi de douteux,


Vous avez raison, Ô hardi défenseur de l'ordre moral et des vertus
publiques.

--
http://patrick.davalan.free.fr/

Avatar
Denis Leger
Le Sun, 10 Sep 2006 17:48:20 +0200


La première question :

dans main(...) faut-il terminer pae return ou exit, je présume exit
EXIT_SUCCES|EXIT_FAILURE ???

La seconde question :

si un fichier est vide (ce qui peut-être "normal" (ie non
pathologique) le "file = fopen(file_name, "r");" retourne NULL ???



Jamais. si le fichier existe et est accessible en lecture, fopen renvoie
un descripteur de fichier, et ne se préoccupe absolument pas de la
taille du fichier en question.

j'ai eu ce cas...

y a tt'il un moyen de vérifer la différence entre :
fichier non présent et fichier présent MAIS vide ???
dans le cas ou "file = fopen(file_name, "r");" retourne NULL, le
"fclose(file);" restet'il utile ou non ? (je pense que non...)



Ben si, il faut fermer le fichier, même s'il est vide !


La troisième question :

elle concerne les vars d'environnement.

avec getenv("HOME"); je peux attraper le HOME du USER, SHELL et TERM
aussi mais y a t'il un moyen de lister les vars d'env vues par C ???



Oui, avec main :

int main(int argc, char * argv[], char * envp[])
{
...
}

dans envp, tu as toutes les variables d'environnement...


--
Denis Léger

Avatar
pere.noel
Denis Leger wrote:

Jamais. si le fichier existe et est accessible en lecture, fopen renvoie
un descripteur de fichier, et ne se préoccupe absolument pas de la
taille du fichier en question.



ça devait être une fausse manip alors => à vérifier...

j'ai eu ce cas...

y a tt'il un moyen de vérifer la différence entre :
fichier non présent et fichier présent MAIS vide ???
dans le cas ou "file = fopen(file_name, "r");" retourne NULL, le
"fclose(file);" restet'il utile ou non ? (je pense que non...)



Ben si, il faut fermer le fichier, même s'il est vide !


OK

La troisième question :

elle concerne les vars d'environnement.



Oui, avec main :

int main(int argc, char * argv[], char * envp[])
{
...
}

dans envp, tu as toutes les variables d'environnement...


j'essaie asap...

ah merci beaucoup, je suppose quelles sont sous la forme :

MACHIN=bidule ???

j'ai essayé avec environ aussi :
int main(void) {
extern char **environ;
char **e;
char *key, *value;
for(e = environ ; *e != NULL ; e++) {
key = strtok(*e, "=");
value = strtok(NULL, "=");
printf("%s = %sn", key, value);
}
return EXIT_SUCCESS;
}

(d'après ce que m'a donné "Xavier Roche" plus haut dans ce fil :
<http://groups.google.fr/group/fr.comp.lang.c/msg/b8fe3dfe32303c32>)

ext-ce qu'on peut toujours comptéer sur PWD ???
--
une bévue


1 2 3