Linux - Redirection de la sortie vers un fichier - C - Programmation
Marsh Posté le 30-05-2006 à 19:37:50
jipo a écrit : Y aurait il une science de la redirection qui m'echappe sous Linux ? |
Quel rapport avec le langage C ?
http://forum.hardware.fr/hardwaref [...] ujet-1.htm
Marsh Posté le 30-05-2006 à 19:41:22
Ca me semble vachement curieux ton problème.
En effet, sauf si ton prog contient un truc du style
|
je ne vois pas d'où ca pourrait venir.
Si c'était un problème de permission, tu ne pourrais pas créer le fichier.
Ton disque n'est pas plein?
Marsh Posté le 30-05-2006 à 23:47:33
Non je suis root et c'est une machine de la mort qui tue l'espace ... sous RedHat 64 AS
Marsh Posté le 31-05-2006 à 10:20:26
désolé Taz,
mais le fichier est bien créé mais vide ...
Marsh Posté le 31-05-2006 à 10:47:39
tee te permet juste de rediriger vers la console et un fichier, en même temps.
Compiler en root c'est mal.
Tu pourrais poster ton code ici? J'aimerais tester sur ma debian.
Marsh Posté le 31-05-2006 à 13:42:14
En fait j'ai refait un test à partir d'un tout petit programme où il n'y a que 2 printf().
Et là cela fonctionne :
Code :
|
renvoit bien les chaines generees par les printf dans le fichier.
Donc cela vient du programme que je maintiens. Ce programme s'appuie sur une interface XMotif. L'interface graphique empecherait-elle la redirection par un moyen ou un autre ? J'ai demandé des éclaircissements à mon client, j'attend ...
Marsh Posté le 31-05-2006 à 13:52:34
Je viens de trouver le pourquoi ....
Dans mon programme le main est écrit de la façon suivante :
Code :
|
Je l'ai modifié en :
Code :
|
Et là la redirection fonctionne !
Qqu'un pourrait me fournir une explication ?
Je ne vois pas le rapport direct entre le fait que la fonction retourne int explicitement et la redirection ...
Marsh Posté le 31-05-2006 à 14:06:52
Ben non ... Ca n'a marché qu'une seule fois !
et après toujours le meme probleme à nouveau
Marsh Posté le 31-05-2006 à 17:28:11
Voilà ...
Cette fois j'ai trouvé : Mon programme quitte avec un _exit(0)
Je pense que les descripteurs de fichier sont fermés, mais que les écritures ne sont pas faites avant la fermeture ...
Quelqu'un peut il me confirmer cela, et m'indiquer une manière simple de mettre à jour un fichier de log si on quitte avec _exit() ou si le programme s'arrete sur une erreur ...
Merci
Marsh Posté le 31-05-2006 à 17:49:06
t'as fflush(stdout); à la fin ou pas ?
Marsh Posté le 31-05-2006 à 17:56:54
NON
Mais même si je l'avais, si jamais le programme plante et part en segm fault, est-ce qu'il y a moyen de recuperer le log ?
Marsh Posté le 31-05-2006 à 18:37:34
jipo a écrit : Voilà ... |
J'ai l'impression que ton code a été codé par des porcs.
Le fait d'appeller _exit() ne change rien.
Les descripteurs de fichier sont fermés, il devrait y avoir écriture.
T'as vérifié qu'il n'y avait pas un appel a isatty()?
Marsh Posté le 30-05-2006 à 18:57:27
Slt,
J'ai un executable toto que j'ai compilé sous Linux. Ce programme contient pas mal d'appels à printf()
Je l'execute de la façon suivante :
# ./toto
Je vois défiler les différents messages (printf)
Ensuite je veux rediriger les messages du programme vers un fichier. Je l'execute de la façon suivante :
# ./toto > ./liste.txt
Les messages ne défilent plus. Le fichier liste.txt a bien été créé, mais il est systématiquement vide ?!?!?!?!?
Y aurait il une science de la redirection qui m'echappe sous Linux ? Un paramètre système pour la gestion des redirections ?
---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)