Daemon unix-like

Soyez le premier à donner votre avis sur cette source.

Vue 10 905 fois - Téléchargée 242 fois

Description

Un deamon unix est un processus interne qui s'exécute en arrière-plan plutôt que sous le contrôle direct d'un utilisateur (ca permet de liberer votre SHELL)c'est l'equivalent d'un service NT sous windows .
ecrire un daemon en C est tres simple avec ses quelque fonction :

-fork
-switch
-umask
-sid
-chdir
-close(shell)
-boucle infini

cc -c daemon.c -o demon

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
#include <signal.h>

void daemonize(); // Creation du deamon

int main(int argc,char *argv[])
{
/**demarrage du deamon

  • /
daemonize(); /** ps -aux pour verifier le pid
  • /
while(1) // boule infini { /**ceci est une GRAVE ERREUR un deamon ne doit jamais intergir avec l'utilsateur . il est ecrit pour executer des tacher cache (hidden task) ex: service reseau ftp,web. Mettez ca dans la tete ceci est un exemple
  • /
puts("tic..c le demon"); /*pur que le puts marche vous devez commenter ou supprimer la fonction close(STDOUT_FILENO);
  • /
sleep(30); } return EXIT_SUCCESS } void deamonize(void) { pid_t pid,sid; pid=fork(); switch(pid) { case 0: //on sort de la boucle break; case -1: //erreur exit(EXIT_FAILURE); break; default : //process parent exit(EXIT_SUCCESS); } /** on travaille maintenant dans le processus child
  • /
umask(0); sid=setsid(); if(sid<0) { perror("sid"); exit(EXIT_FAILURE); } if(chdir("/")<0){ perror("chdir"); exit(EXIT_FAILURE); } printf("Demon demarer pid=%d\n",(int)getpid()); close(STDIN_FILENO); //fermer le SHELL close(STDOUT_FILENO); close(STDERR_FILENO); }

Conclusion :


Marche impec sour tous les unix-like

FREEBSD FOR LIFE

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
286
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
22 avril 2012
2
A première vue, il doit y avoir moyen, mais je n'ai pas essayé... Tenvoies un signal SIGUSR1 ou SIGUSR2 et tu l'attache à un handler...
Messages postés
4
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
5 février 2008

En dehors d'un KILL, y a t-il une façon de fermer le démon proprement ?
Messages postés
4
Date d'inscription
mardi 2 novembre 2004
Statut
Membre
Dernière intervention
5 février 2008

Magnifique !!!
Messages postés
286
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
22 avril 2012
2
Très bien ! Il y a longtemps que je cherchais ça !
Merci !
Messages postés
32
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
14 avril 2009

salut,
je sais tu dois supprimer ou commenter les 3 close pour que le puts fonctionne.
c'est un example le puts ne doit jamais apparaitre dans la boule infini du demon
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.