Timestap und Daemon



  • Hallo,
    Ich habe zwei Anfängerfragen:
    Wie komme ich mit C++ an den Timestap auf einem Linux-System? Welche Header brauche ich dafür?

    Wie kann ich mit C++ einen Daemon starten? Ich habe diesen Source auf http://pronix.de gefunden nur leider ist er in C und ich habe keine ahnung wie ich ihn in C++ schreiben soll 😞

    #include <stdio.h>
    #include <unistd.h>
    #include <syslog.h>
    #include <sys/types.h>
    
    #define CHILD 0
    #define ERROR -1
    
    void start_daemon(char *log_name, int facility)
    {
     int i;
     pid_t pid;
    
     /*Elternprozeß beenden, somit haben wir einen Waisen
        dessen sie jetzt vorerst init annimmt*/
     if((pid = fork()) != CHILD) exit(0);
     /*Unser Kindprozess wird zum Session-Führer. Mißlingt dies,
        kann der Fehler daran liegen das der Prozeß bereits Sessionführer
        ist */
     if(setsid() == ERROR)
      {
      fprintf(stderr, "%s kann nicht Session-Führer werden!\n",log_name);
      exit(0);
      }
     /* Gründe für das Root-Wurzelverzeichnis:
         +core-Datei wird im aktuellen Arbeitsverzeichnis hinterlegt
         +Damit bei Beendigung mit umount das Dateisystem sicher abgehängt
          werde kann */
     chdir("/");
     /*Damit wir nicht die Bitmaske vom Elternprozeß erben bzw. diese
        bleiben, stellen wir diese auf 0*/
     umask(0);
     /*Wir schließen alle geöffneten Filedeskriptoren....*/
     for(i=sysconf(_SC_OPEN_MAX); i>0; i--)
      close(i);
    
     /*Da unser Dämonprozeß selbst kein Terminal für die Ausgabe hat....*/
     openlog(log_name, LOG_PID, facility);
    }
    
    int main(int argc, char **argv)
    {
     start_daemon("meinDaemon", LOG_USER);
     while(1);
     /*Enlossschleifen: Hier sollte nun der Code für den
        Daemon stehen, was immer er auch tun soll.
        Bei Fehlermeldungen Beispiesweise:
        if(dies_ist_Passiert)
         syslog(LOG_WARNING, "dies_ist_Passiert");
        else if(das_ist_Passiert)
         syslog(LOG_INFO, "das_ist_Passiert");*/
     return 0;
    }
    


  • Plutonium schrieb:

    Wie kann ich mit C++ einen Daemon starten? Ich habe diesen Source auf http://pronix.de gefunden nur leider ist er in C und ich habe keine ahnung wie ich ihn in C++ schreiben soll 😞

    Eigentlich genauso. Du kannst ein paar stilistische Sachen wie die #define ändern, aber man muß nur bei einer Sache aufpassen. Die C Header Dateien sollten mit einem "extern "C" { ... }" included werden.



  • Die System API ist eben in C, unter C++ musst du dann entsprechende Wrapper nehmen (ist ja unter den meisten anderen Betriebssystemen auch so)

    Die More, Boost oder ACE Librarys helfen dir hier.




Anmelden zum Antworten