EAGAIN n'est pas une valeur de retour de read() ; c'est un code d'erreur retourné dans errno.
EAGAIN n'est pas une valeur de retour de read() ; c'est un code d'erreur retourné dans errno.
Exact.
read va renvoyer 0 en cas de souci, puis positionner errno à la valeur kivabien.
Cf. le man :
Envoyé par man 2 read
ok j'avais pas compris ça.. je vais voir comment utiliser errno..
Edit: bon du coup j'ai fait ça qui fonctionne:
Mais du coup qu'est ce que ça apporte par rapport au fait de tester while(ret>0)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 do{ ret=read(fd, chaine, 300); if(ret>0) affichage->append(QString(chaine)); } while(errno!=EAGAIN);
Salut,
alors je reviens vers vous pour vous remercier de m'avoir aidé sur ce sujet
J'ai appris à me servir d'un pipe dans la console et aussi à l'exploiter depuis un programme en C ^^ Il me reste pas mal de choses à voir sur ce sujet mais j'ai désormais un bon point de départ.
A la première page, nous avons aussi parlé de l'option d'empêcher le démon de "forker" -f .. du coup j'ai paramétré le script de démarrage avec -f Lo pour exploiter la sortie standard.
Et ça fonctionne parfaitement bien.. Du coup dans Qt, j'ai pu utiliser la classe QProcess pour lancer le démon et surveiller sa sortie standard ! Il a fallu tout de même paramétrer les droits de l'utilisateur avec sudo visudo pour modifier le fichier sudoers pour que mon programme puisse lui-même lancer le démon, d'autant qu'il utilise le port 162.
Voilà du coup j'ai le choix entre deux façons de faire
Prochaine étape, comprendre comment créer et utiliser des socket ^^
Le mieux c'est execve + fork + pipe
Enfin quand j'ai dev un shell il y a longtemps j'ai fait ça
http://www.developpez.net/forums/d70...ork-pipe-exec/
ou encore
http://sparis.free.fr/Cours_LInfo/OS...cessusUnix.pdf
Bon courage
Un merci tardif pour ton message (que je viens à peine de voir ) ..
Partager