OVH Cloud OVH Cloud

récupération d'erreur

5 réponses
Avatar
Akeu
bonjour,
Je voudrais décompresser un fichier dans mon logiciel.
Avant de décompresser un fichier quelconque je teste si celui ci
n'est pas corrompu.
je fait donc popen ("tar tzvf fichierarecuper", -r)
Mais je ne récupère rien par fgets

Même chose sur une console
si je lance tar tzvf fichiervide >toto

tar tvf fichiervide >toto
tar: fichiervide: ne peut open: Aucun fichier ou répertoire de ce type
tar: Erreur non récupérable: fin de l'exécution immédiate


le fichier toto est vide : comment faire pour récupérer les erreurs qui
sont affichées à l'écran?

5 réponses

Avatar
Pascal Bourguignon
Akeu writes:

bonjour,
Je voudrais décompresser un fichier dans mon logiciel.
Avant de décompresser un fichier quelconque je teste si celui ci
n'est pas corrompu.
je fait donc popen ("tar tzvf fichierarecuper", -r)
Mais je ne récupère rien par fgets

Même chose sur une console
si je lance tar tzvf fichiervide >toto

tar tvf fichiervide >toto
tar: fichiervide: ne peut open: Aucun fichier ou répertoire de ce type
tar: Erreur non récupérable: fin de l'exécution immédiate


le fichier toto est vide : comment faire pour récupérer les erreurs qui
sont affichées à l'écran?


Les erreurs sont écrites sur le file descriptor 2, donc...

--
__Pascal Bourguignon__ http://www.informatimago.com/

Nobody can fix the economy. Nobody can be trusted with their finger
on the button. Nobody's perfect. VOTE FOR NOBODY.

Avatar
Akeu
Le Thu, 08 Dec 2005 16:32:07 +0100, Pascal Bourguignon a écrit :

Akeu writes:

bonjour,
Je voudrais décompresser un fichier dans mon logiciel. Avant de
décompresser un fichier quelconque je teste si celui ci n'est pas
corrompu.
je fait donc popen ("tar tzvf fichierarecuper", -r) Mais je ne
récupère rien par fgets

Même chose sur une console
si je lance tar tzvf fichiervide >toto

tar tvf fichiervide >toto
tar: fichiervide: ne peut open: Aucun fichier ou répertoire de ce type
tar: Erreur non récupérable: fin de l'exécution immédiate


le fichier toto est vide : comment faire pour récupérer les erreurs
qui sont affichées à l'écran?


Les erreurs sont écrites sur le file descriptor 2, donc...


il suffit de rajouter 2>&1


Avatar
Pascal Bourguignon
Akeu writes:

Le Thu, 08 Dec 2005 16:32:07 +0100, Pascal Bourguignon a écrit :

Akeu writes:

bonjour,
Je voudrais décompresser un fichier dans mon logiciel. Avant de
décompresser un fichier quelconque je teste si celui ci n'est pas
corrompu.
je fait donc popen ("tar tzvf fichierarecuper", -r) Mais je ne
récupère rien par fgets

Même chose sur une console
si je lance tar tzvf fichiervide >toto

tar tvf fichiervide >toto
tar: fichiervide: ne peut open: Aucun fichier ou répertoire de ce type
tar: Erreur non récupérable: fin de l'exécution immédiate


le fichier toto est vide : comment faire pour récupérer les erreurs
qui sont affichées à l'écran?


Les erreurs sont écrites sur le file descriptor 2, donc...


il suffit de rajouter 2>&1


Par exemple. Mais 2>&1 est traité par un shell, il faudrait alors utiliser:

popen("bash -c 'tar ztvf fichier.tar.gz 2>&1'","-r")

Il serait plus direct d'écrire soit-même les appels à pipe, dup2, fork et exec.


--
__Pascal Bourguignon__ http://www.informatimago.com/
Wanna go outside.
Oh, no! Help! I got outside!
Let me back inside!



Avatar
Bob qui Trolle
Pascal Bourguignon wrote:
Akeu writes:

popen("bash -c 'tar ztvf fichier.tar.gz 2>&1'","-r")

Il serait plus direct d'écrire soit-même les appels à pipe, dup2, fork et exec.


<troll> En oubliant pas qu'il est parfois difficile de gérer de maniè re
portable l'erreur ETXTBSY ou difficile à expliquer au chef ce
qu'implique le fait que POSIX ne documente pas la pratique shabang en
tête de fichier pourtant généralement admise, ce qui incite à uti liser
une abstraction de plus haut niveau pour un logiciel destiné à un vas te
usage (car acheter des composants coûtera toujours moins cher que
chercher à faire s'entendre des spécialistes passés, présents, et futur
en design de système d'exploitation) </troll>

<troll> D'ailleurs, ne serait-ce que pour ce genre de raison, les
langages de script vaincront </troll>

Avatar
Stephane Chazelas
On Fri, 09 Dec 2005 00:22:20 +0100, Pascal Bourguignon wrote:
[...]
il suffit de rajouter 2>&1


Par exemple. Mais 2>&1 est traité par un shell, il faudrait alors utiliser:

popen("bash -c 'tar ztvf fichier.tar.gz 2>&1'","-r")
[...]


Non, popen lance un shell, un shell POSIX en therorie.

popen("tar ztvf fichier.tar.gz 2>&1","-r")


--
Stephane