[C] So eine Art "ls"

Buba235

Erfahrenes Mitglied
Hallo Leute!


Ich möchte gerne so eine Art des Systemaufrufs "ls" nachprogrammieren, nur hab ich im Moment ein kleines Problem. Ich weiß nicht mehr weiter! Mein Code sieht zur Zeit so aus:

Code:
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>


extern int errno;


int main(int argc, char *argv[]) {
	/* Variablen */
	DIR *dir;
	struct dirent *dirzeiger;
	struct stat buf;
	
	
	/* Argumente pruefen */
	if (argc != 2) {
		fprintf(stderr, "Benutzung: %s Directory\n", argv[0]);
		return EXIT_FAILURE;
	}

	/* Verzeichnis oeffnen */
	if ((dir = opendir(argv[1])) == NULL) {
		fprintf(stderr, "Fehler bei opendir ...\n");
		return EXIT_FAILURE;
	}
	
	if (stat(argv[1], &buf) == -1) {
		fprintf(stderr, "Fehler bei stat ...\n");
		return EXIT_FAILURE;
	}

	/* Das komplette Verzeichnis auslesen */
	while ((dirzeiger = readdir(dir)) != NULL) {
--------------->	printf("%d %s\n", buf.st_size, (*dirzeiger).d_name);
	}

	/* Lesezeiger wieder schliessen */
	if (closedir(dir) == -1) {
		printf("Fehler beim Schliessen von %s\n", argv[1]);
	}
	

	return EXIT_SUCCESS;
}


Bei dem Pfeil liegt der Fehler. Ich möchte nämlich zu jeder Datei in dem Verzeichnis, das ich beim Programmstart angebe, die Größe der einzelnen Dateien. So wie das "ls" eben auch macht. Nur ich bekomme immer nur die Größe des aktuellen Verzeichnisses. Ich hab schon mehr probiert, als das was dort steht, nur klappt leider nichts so wie ich das haben will. Könnte mir bitte jemand auf die Sprünge helfen?


Gruß
Buba
 
Hallo,

du lässt stat ja auch nur auf deinen Übergabeparameter los, sprich das angegebene Verzeichnis los. Du solltest es aber auf jeden Eintrag des Verzeichnisses anwenden:

C:
  while ((dirzeiger = readdir(dir)) != NULL) {
    if (stat((*dirzeiger).d_name, &buf) == -1) {
      perror("Fehler in stat()");
      return EXIT_FAILURE;
    }
    printf("%d %s\n", buf.st_size, (*dirzeiger).d_name);
  }
 
NEEEEEEEEEEEIIIIIIN


Wie blöd kann man eigentlich sein? Klar muss ich das so machen. Ich hatte es auch schon so. Zumindest in der Art, aber es gab einen SegFault. Danke für die Antwort.


Gruß
Buba
 
Zurück