d_reclen aus der struct dirent



  • Hallo

    Ich habe folgendes Problem. Ich lese aus der d_reclen einen Wert heraus. d_namlen soll ja die aktuelle Länge des Eintrags in d_name ohne das Stringendezeichen angeben. Führe ich folgenden Code aus, erhalte ich nicht nachvollziehbare Angaben.

    I_Hilfe = dirzeiger ->d_reclen;
    
    			    if (S_ISDIR(attribut.st_mode))
    
    			    {
    
    					printf ("\n Pfad: %s Anzahl %d" ,S_Pfad, I_Hilfe);
    

    Im home Ordner liegen drei weitere Verzeichnisse: kontofakrr, istest und lost+found.

    Bei der Ausführung Code gibt printf folgendes aus.
    Pfad: /home/kontofakrr Anzahl 32
    Pfad: /home/lost+found Anzahl 32
    Pfad: /home/.. Anzahl 24
    Pfad: /home/istest Anzahl 32
    Pfad: /home/. Anzahl 24

    Die Angabe d_reclen geben nicht die wahren längen der Stringketten an. Wo liegt denn da der Denkfehler.



  • d_reclen gibt nicht die Länge des Namens an, sondern (siehe man: readdir(3)) "length of this record". Also die Länge des gesamten dirent-Eintrags. Die Länge des Namens bekommst du mit strlen bzw. dem Macro _D_EXACT_NAMLEN.

    PS. S_Pfad und I_Hilfe sind aber sehr merkwürdige Variablennamen


Anmelden zum Antworten