Pas du tout efface.
Syslog n'est la que pour logguer les logs d'une application grace a l'appel syslog (voir la manpage).
La definition d'un demon, c'est un programme qui tourne en standalone et qui est decorrele d'une session utilisateur.
Pour faire ca, ca implique quelques fork et quelques changement avec seteuid je crois.
Ensuite, la notion de stdin/stdout est tres subjective. stdin c'est juste le canal 0, stdout c'est juste le canal 1.
Souvent d'ailleurs, un demon comme inetd/xinetd s'amuse avec les descripteurs de la socket et les dup() pour que le serveur auquel il passe la main puisse directement utiliser stdin/stdout comme entree/sortie vers la socket.
C'est un moyen de "passer" la socket d'un processus pere vers un processus fils.
Si tu as envie que ton programme puisse repondre a des requetes utilisateurs, ce n'est pas tres complique :
1- tu lance ton demon (donc fork() et refork() et seteuid())
2- tu ouvres une socket en ecoute
3- lors d'une connection entrante, tu cree la socket cliente
4- ensuite, suivant si tu veux traiter les connections 1 par 1 ou simultanement, tu vas lancer une thread par socket cliente ou non
5- pour repondre a la requete du client, il faut que tu definisse un protocole, c'est a dire le langage compris a la fois par l'application cliente et ton serveur
6- tu lis la requete, tu fais le traitement, tu repond.
En ce qui concerne le protocole, il peut etre binaire ou texte.
S'il est texte, tu pourras alors utiliser telnet pour te connecter a ton serveur.
Un protocole texte peut etre du style :
requete client : HELO
reponse serveur : HELO!
requete client : LIST
reponse serveur : la liste des fichiers d'un repertoire particulier separe par des espaces par exemple.
Il faut evidemment prendre en compte les cas ou le client s'interrompt en plein milieu d'une requete ou de la session. Mais apres c'est de la gestion reseau.
Si ta question c'est comment faire pour rediriger stdin et stdout de mon serveur vers un client, la reponse est "tu peux le faire", mais comme stdin et stdout vont passer par la socket tu devras quand meme prendre en compte les problemes reseaux pour blinder ton serveur, donc autant utiliser directement la socket.
Sinon, fclose(), dup(), sont tes amis.
[^] # Re: dialogué avec un deamon
Posté par Epsos . En réponse au journal dialogué avec un deamon. Évalué à 2.
Syslog n'est la que pour logguer les logs d'une application grace a l'appel syslog (voir la manpage).
La definition d'un demon, c'est un programme qui tourne en standalone et qui est decorrele d'une session utilisateur.
Pour faire ca, ca implique quelques fork et quelques changement avec seteuid je crois.
Ensuite, la notion de stdin/stdout est tres subjective. stdin c'est juste le canal 0, stdout c'est juste le canal 1.
Souvent d'ailleurs, un demon comme inetd/xinetd s'amuse avec les descripteurs de la socket et les dup() pour que le serveur auquel il passe la main puisse directement utiliser stdin/stdout comme entree/sortie vers la socket.
C'est un moyen de "passer" la socket d'un processus pere vers un processus fils.
Si tu as envie que ton programme puisse repondre a des requetes utilisateurs, ce n'est pas tres complique :
1- tu lance ton demon (donc fork() et refork() et seteuid())
2- tu ouvres une socket en ecoute
3- lors d'une connection entrante, tu cree la socket cliente
4- ensuite, suivant si tu veux traiter les connections 1 par 1 ou simultanement, tu vas lancer une thread par socket cliente ou non
5- pour repondre a la requete du client, il faut que tu definisse un protocole, c'est a dire le langage compris a la fois par l'application cliente et ton serveur
6- tu lis la requete, tu fais le traitement, tu repond.
En ce qui concerne le protocole, il peut etre binaire ou texte.
S'il est texte, tu pourras alors utiliser telnet pour te connecter a ton serveur.
Un protocole texte peut etre du style :
requete client : HELO
reponse serveur : HELO!
requete client : LIST
reponse serveur : la liste des fichiers d'un repertoire particulier separe par des espaces par exemple.
Il faut evidemment prendre en compte les cas ou le client s'interrompt en plein milieu d'une requete ou de la session. Mais apres c'est de la gestion reseau.
Si ta question c'est comment faire pour rediriger stdin et stdout de mon serveur vers un client, la reponse est "tu peux le faire", mais comme stdin et stdout vont passer par la socket tu devras quand meme prendre en compte les problemes reseaux pour blinder ton serveur, donc autant utiliser directement la socket.
Sinon, fclose(), dup(), sont tes amis.