file.open(/dev/isdnctrl) mit cat /dev/isdnctrl macht Probleme



  • Hallo zusammen!

    Ich hab' folgendes Problem, ich bin gerade daran einen ISDN logger als Server zu realisieren. Dekodierung der ISDN Daten funktioniert und die Verwaltung der Anrufe funktiert. So weit, so gut.

    Ich habe aber keinen Blass wie ich dieses Programm (ich werde es als Open Source freigeben) als Server-Realisieren soll.

    z.B.: wenn das Programm läuft werden Anrufen und deren Nummern, inklusive Dauer und Kosten erkannt, geloggt und auf der Konsole ausgegeben. Aber sobald ich auf der Konsole, während das Programm läuft, z.B. cat /dev/isdnctrl (oder auch tail -f ,,,) ausführe, dann funktioniert:

    char buffer[255];

    file.open("/dev/isdnctrl");
    while (-1)
    {
    file.getline(buffer,255);
    }

    nicht mehr. strlen(buffer)=0! Ich habe einen Check eingebaut damit dann das Programm abbricht.

    Was muss ich tun um das Device für meinen (bis jetzt) Logger benutzbar zu halten? Ung gibt's auf dem Netz Dokus, wo erklärt wird wie Server zu realisieren sind? Auch wie z.B. die Werte die vom Programm ausgegeben werden, von anderen Programmen gelesen werden, ohne das man ein File benutzen müsste.

    Ich bin ein Newbie, bitte habt geduld mit mir.

    Vielen Dank im Voraus.





  • Original erstellt von pfalzmarc:
    Infos zu ISDN4LINUX findest Du hier:
    http://www.fh-karlsruhe.de/fbi/html/Lehrbetrieb/Vorlesungen/Syste mprogrammierpraktikum/public/doc/Aufg02.html

    Hi Marc!

    Vielen Dank für die Links.

    Soweit ich verstanden habe, muss man mit FIFO's arbeiten. Gesagt, getan, nun, jetzt kann mein Logger die ganze Zeit loggen, aber dafür bricht cat die ganze Zeit ab, also man kann /dev/isdnctrl nicht mehr "catten", der gibt eine Zeile aus und bricht dann sang- und klanglos ab!

    Der Code sieht wie folgt aus:

    string getLine(const int fileDescriptor)
        {
        char charIn;
        string value;
        int i=0, maxLength=1024;
    
        while (i < maxLength)
              {
              read(fileDescriptor, &charIn, 1);
              if (charIn!='\n'){value+=charIn;}
              else {i=1024;}
              ++i;
              }
    
         return value;
         }
    
    void main()
      {
      int isdnctrl;
      string buffer;
    
      isdnctrl=open("/dev/isdnctrl",O_RDONLY);
    
      while (-1)
          {
          buffer=getLine(isdnctrl);
          }
    
      close(isdnctrl);
      }
    

    Was mache ich falsch? Hast du oder jemand anders Rat?

    Vielen Dank!

    [edit]Bitte Code-Tags benutzen :o [/edit]

    [ Dieser Beitrag wurde am 30.11.2002 um 22:05 Uhr von kingruedi editiert. ]



  • Hi,

    ich weiss nicht, ob Dein Problem überhaupt lösbar ist, aber lade Dir mal die isdn4k-utils runter und schau dir an, wie das in den Sourcen zu isdnlog gelöst wurde.

    ftp://ftp.isdn4linux.de/pub/isdn4linux/utils/


Anmelden zum Antworten