1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

c++ und fstream auf solaris 5.8 mit gcc 3.3.2

  • eaglo
  • 27. Februar 2007 um 10:30
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • eaglo
    Punkte
    80
    Beiträge
    15
    • 27. Februar 2007 um 10:30
    • #1

    hi!

    ich hab hier ein mehr als komisches problem - es sieht so aus, als ob ich mit einem fstream nur 255 mal ein open durchführen könnte, dannach führt ein open immer zu einem setzen des fail bits ...

    kann das sein, dass es diese einschränkung gibt?

    das ganze passiert in einem daemon der alle 2min ein dir auf ein file abprüft und dessen inhalt dann lädt ...

    lg

  • hal
    Punkte
    11.122
    Beiträge
    2.208
    • 27. Februar 2007 um 10:44
    • #2

    Das klingt eher nach einem file descriptor leak. Kontrolliere mal, ob du die Datei dann auch wieder brav schließt.

  • eaglo
    Punkte
    80
    Beiträge
    15
    • 27. Februar 2007 um 11:02
    • #3

    file descriptor leak is es eher nicht ... ich schließ zum schluß ganz brav alle file descriptoren mit .close(); und vor jedem öffnungsvorgang mach ich ein .clear(); bzw. überprüf mit .is_open(); ob er noch offen is usw. ...

    aber es muss irgendwas mit der anzahl der durchgänge zu tun haben, denn auch wenn ich einfach nur 255mal die schleife laufen lasse kann er dannach keine files mehr öffnen (also hängts mal nicht mit der anzahl der öffnungsvorgänge zusammen)

    noch ideen?

  • hal
    Punkte
    11.122
    Beiträge
    2.208
    • 27. Februar 2007 um 11:27
    • #4

    Und wenn du bei jedem Durchlauf einen neuen fstream erzeugst?

    Wie schaut denn dein Code aus?

  • eaglo
    Punkte
    80
    Beiträge
    15
    • 27. Februar 2007 um 11:35
    • #5

    hi!
    hab den code jetzt auf das (siehe unten) reduziert ... er läuft ca. 40s lang und beendet sich dann ... ich werd ihn mal nicht in den hintergrund schicken und die error ausgabe nicht umleiten (obwohl ichs eigentlich im logfile sehen müsste, da umgeleitet ... kA)

    Code
    // temp_dir -> vordefinierter pfad
    string temp_dir;
    string actual_entry;
    DIR *execdir; 
    struct dirent *entry;
    
    
    // eigentlicher code
    
    
     /////////////////////////////////// 
     //////////*********************/// 
     /////////**** The Big Loop ***/// 
     ////////*********************/// 
     /////////////////////////////// 
     while(1) { 
        cout << getTimestamp() << "checking for files @ " << temp_dir << endl; 
     
        execdir = opendir(temp_dir.c_str()); 
     
        /* Scan for files */ 
         do { 
            entry = readdir(execdir); 
            if(entry) { 
                /* get the name as string */ 
                actual_entry = entry->d_name; 
     
                if(testScriptName(actual_entry)) {     
                    cout <<"------******* FILE FOUND *******------"<<endl;             
                } 
            } 
        } while(entry);
    Alles anzeigen
  • eaglo
    Punkte
    80
    Beiträge
    15
    • 27. Februar 2007 um 11:40
    • #6

    ok ... also ich bekomm einfach nen segmentation fault ...

  • hal
    Punkte
    11.122
    Beiträge
    2.208
    • 27. Februar 2007 um 11:42
    • #7

    In welcher Zeile?

  • eaglo
    Punkte
    80
    Beiträge
    15
    • 27. Februar 2007 um 11:44
    • #8

    ./ctchd: line 62: 23202 Segmentation Fault ./$ctchdbin

    in zeile 62 is allerdings nix relevantes - is auch außerhalb der schleife - naja wird wohl fürs binary gelten, ...

  • eaglo
    Punkte
    80
    Beiträge
    15
    • 27. Februar 2007 um 11:46
    • #9

    ich schätz mal es liegt an dem fehlenden closedir ...

    hab voll nicht auf das geachtet ...

    mal testen

  • eaglo
    Punkte
    80
    Beiträge
    15
    • 27. Februar 2007 um 11:48
    • #10

    ja na klar ... jetz läuft er erstmal ... werds programm wieder zusammenbaun und schaun obs nur das war ... tztz ... da denkt man eh extra an die ganze fileptr und dann is es der directory pointer ^^

  • eaglo
    Punkte
    80
    Beiträge
    15
    • 27. Februar 2007 um 12:05
    • #11

    big thx an hal :)

  • mdk
    Punkte
    7.120
    Beiträge
    1.390
    • 27. Februar 2007 um 12:08
    • #12

    es gibt einen edit-knopf. :rolleyes:

  • hal
    Punkte
    11.122
    Beiträge
    2.208
    • 27. Februar 2007 um 16:29
    • #13

    In UNIX ist ein Verzeichnis auch nur eine Datei, in der als Inhalt der Verweis auf die Dateien darin stehen (deswegen muss man auch Schreibrechte fürs Verzeichnis haben, um dort Dateien löschen zu können, und nicht für die Datei selber).

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum