Seite 1 von 1

Verzeichnisinhalt ausgeben

Verfasst: Sa Mai 31, 2014 8:19 pm
von miskin
Hi
hab wieder ein Problem mit meiner Shell.
Die Methode soll bei Eingabe von ls den Inhalt des Verzeichnises indem ich mich befinde ausgeben.
Bis hier bin ich gekommen und die Methode macht was es soll.
Aber ich möchte das ganze gern mit Dynamischer Speicherverwaltung (malloc) realisieren.

Code: Alles auswählen

int lsMethode(int xyz, char *lst,char cha[]){
   char *ptr4vek[1000];   // DAS MÖCHTE ICH MIT MALLOC
   char *ptr4,*ptr5; 

// FRAGE:Gibt es hier eine andere Möglichkeit Verzeichnisinhalt anzuzeigen ?    
   DIR *dir;           
   struct dirent *dirzeiger;
   
   char ok[]="OK";
   char ko[]="KO";
   int h=0,i=0;
   char *a;
  
    dir = opendir(lst);      // Siehe FRAGE  oben
   ptr4=malloc(strlen(lst));
    while ((dirzeiger=readdir(dir)) != NULL )
	{ 
	a=&dirzeiger->d_name;          // Siehe FRAGE oben
    ptr4 = strtok(a,"");
		while(ptr4 != NULL)  {
			ptr4vek[h++]=ptr4;		//Token in ein Array speichern
			ptr4 = strtok(NULL, "\t \n"); 
		}
    } 
 //hier wird nur ausgegeben was nicht mit Punkt anfaengt 
 ptr4=malloc(sizeof(ptr4vek));
 if(xyz==1)  {
	for(i=0;i<h;i++){	
		ptr5=strncmp(ptr4vek[i],".",1)? ok : ko;   
		if( ptr5==ok ) 	 
		printf("%s\n",ptr4vek[i]);
     }closedir(dir);return 1;
 }
 // wenn ls | grep cha  hier wird nur das was im Verzeichnis mit dem String in cha übereinstimmt ausgegeben
  if(xyz==0)  {
	for(i=0;i<h;i++){	
		ptr5=strncmp(ptr4vek[i],".",1)? ok : ko;   
		if( ptr5==ok ) {  
			 if(strstr(ptr4vek[i],cha)!= NULL) printf("%s\n",ptr4vek[i]);
     }
 } closedir(dir);
      return 1;
}
free(ptr4);
free(ptr5);
closedir(dir);
 return 1;
 }

Re: Verzeichnisinhalt ausgeben

Verfasst: So Jun 01, 2014 8:27 pm
von miskin
Hi
Keiner einen Anhaltspunkt?

Re: Verzeichnisinhalt ausgeben

Verfasst: So Jun 01, 2014 10:27 pm
von cloidnerux
Deine Frage ist etwas merkwürdig, aber trivial:

Code: Alles auswählen

char *ptr4vek[1000];   // DAS MÖCHTE ICH MIT MALLOC
wird zu

Code: Alles auswählen

char *ptr4vek = (char*)malloc(sizeof(char)*1000);
und dann sobald ptr4vek nicht mehr gebraucht wird:

Code: Alles auswählen

free(ptr4vek);
Wenn du noch nicht so vertraut bist mit Zeigern, malloc und free empfehle ich dir, dich in die Thematik einzulesen:
http://www.proggen.org/doku.php?id=c:tutorial:pointer
http://www.proggen.org/doku.php?id=c:tutorial:memory

Re: Verzeichnisinhalt ausgeben

Verfasst: Mo Jun 02, 2014 5:12 pm
von miskin
Danke !
Ja mit den Pointern und der Dynam. Spreicherverwaltung hab ich echt meine Probleme.
Ich werde mich dann im Tutorial reinlesen und melde mich dann wieder.
LG

Re: Verzeichnisinhalt ausgeben

Verfasst: Mi Jun 11, 2014 12:37 pm
von oenone
cloidnerux hat geschrieben:Deine Frage ist etwas merkwürdig, aber trivial:

Code: Alles auswählen

char *ptr4vek[1000];   // DAS MÖCHTE ICH MIT MALLOC
wird zu

Code: Alles auswählen

char *ptr4vek = (char*)malloc(sizeof(char)*1000);
und dann sobald ptr4vek nicht mehr gebraucht wird:

Code: Alles auswählen

free(ptr4vek);
Wenn du noch nicht so vertraut bist mit Zeigern, malloc und free empfehle ich dir, dich in die Thematik einzulesen:
http://www.proggen.org/doku.php?id=c:tutorial:pointer
http://www.proggen.org/doku.php?id=c:tutorial:memory
Das ist aber doch ein ganz anderer Variablentyp... Er wollte char*x[1000] dynamisch, du gibst ihm char x[1000] dynamisch :P

Müsste es nicht so sein?

Code: Alles auswählen

char **ptr4vek = (char**)malloc(sizeof(char*)*1000);
Ansonsten kann er sich nicht mehr mit prt4vek = ptr4 die char-Pointer merken.