1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • 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
  • eaglo
    3
    eaglo
    Mitglied
    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

    -~-~ "Wenn du nicht irrst, kommst du nicht zu Verstand!" ~-~-

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    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.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • eaglo
    3
    eaglo
    Mitglied
    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?

    -~-~ "Wenn du nicht irrst, kommst du nicht zu Verstand!" ~-~-

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    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?

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • eaglo
    3
    eaglo
    Mitglied
    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

    -~-~ "Wenn du nicht irrst, kommst du nicht zu Verstand!" ~-~-

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

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

    -~-~ "Wenn du nicht irrst, kommst du nicht zu Verstand!" ~-~-

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

    In welcher Zeile?

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • eaglo
    3
    eaglo
    Mitglied
    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, ...

    -~-~ "Wenn du nicht irrst, kommst du nicht zu Verstand!" ~-~-

  • eaglo
    3
    eaglo
    Mitglied
    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

    -~-~ "Wenn du nicht irrst, kommst du nicht zu Verstand!" ~-~-

  • eaglo
    3
    eaglo
    Mitglied
    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 :grinning_face_with_smiling_eyes:

    -~-~ "Wenn du nicht irrst, kommst du nicht zu Verstand!" ~-~-

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

    big thx an hal :)

    -~-~ "Wenn du nicht irrst, kommst du nicht zu Verstand!" ~-~-

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

    es gibt einen edit-knopf. :face_with_rolling_eyes:

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    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).

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung