Verzeichnisinhalt ausgeben

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
miskin
Beiträge: 14
Registriert: Mo Mai 12, 2014 10:42 am

Verzeichnisinhalt ausgeben

Beitrag von miskin » Sa Mai 31, 2014 8:19 pm

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;
 }

miskin
Beiträge: 14
Registriert: Mo Mai 12, 2014 10:42 am

Re: Verzeichnisinhalt ausgeben

Beitrag von miskin » So Jun 01, 2014 8:27 pm

Hi
Keiner einen Anhaltspunkt?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Verzeichnisinhalt ausgeben

Beitrag von cloidnerux » So Jun 01, 2014 10:27 pm

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
Redundanz macht wiederholen unnötig.
quod erat expectandum

miskin
Beiträge: 14
Registriert: Mo Mai 12, 2014 10:42 am

Re: Verzeichnisinhalt ausgeben

Beitrag von miskin » Mo Jun 02, 2014 5:12 pm

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

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Verzeichnisinhalt ausgeben

Beitrag von oenone » Mi Jun 11, 2014 12:37 pm

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.

Antworten