find Funktionalität.



  • Hallo, ich bin neu hier und natürlich brauche ich vor allem eines. Hilfe.
    Im Rahmen meines Ingenieursstudiums habe ich Java gelernt. Das wurde neu eingeführt und hat C bzw C++ im Grundstudium ersetzt. Dummerweise ist das nicht bis ins Haupstudium vorgedrungen und die Professoren halten hier ihre Vorlesungen weiterhin mit dem C/C++ Hintergrund. Für die Angewandten Informatiker kein Problem. Da wurde C/C++ zusätzlich angeboten. Bei den Ingenieuren allerdings nicht. Und jetzt steh' ich da und soll Linuxbefehle in ihren Grundfunktionalitäten selbst programmieren. ls hab ich noch hinbekommen aber bei der heutigen Aufgabe, dem find Befehl (zu mailen bis 23:59 Uhr), hörts einfach auf. Zeigerarithmetik z.B existiert bei Java nicht und dementsprechend ich damit nichts anfangen. Dank Bachelor/Master wird sich daran auch im gesammten Reststudium nicht viel ändern
    Ich habe mal hier beschrieben was mir bisher eingefallen ist.

    #include <stdlib.h>
    #include <sys/stat.h>
    #include <dirent.h>
    #include <stdio.h>
    #include <unistd.h>
    
    void myfind(char *s)
    
    {
    
    	chdir(s);
    	DIR * dp = opendir (".");
    	struct dirent *de;
    	struct stat st;
    	while((de=readdir(dp)))
    		{
    			lstat((*de).d_name, &st);
    			if (st.st_mode & S_IFDIR) myfind((*de).d_name); 	
    			else printf("%9d %s\n",st.st_size, (*de).d_name);	
    		}
    	int closedir(DIR * dp);
    
    }
    
    int main(int argc, char * argv[])
    {
    	if (argc ==2) myfind(argv[1]);
    	else printf("Parameter \n");
    	return 0;
    }
    

    Ich weiß nicht weiter. Ich bekomme immer nur eine einzige Datei ausgegeben. Und zwar bis zum Segmentation fault.
    Ich hoffe jemand kann mir noch schnell helfen.

    Die Aufgabe lautet wie folgt.
    Programmieren Sie die Grundfunktionen des Befehls find nach. Ausgehend von einem Directory-Pfad, der als Kommandozeilen-Argument übergeben wird, sollen rekursiv alle erreichbaren Namen im Dateisystembaum auf die Standardausgabe ausgegeben werden. Benutzen Sie die Systemaufrufe opendir(), readdir() und closedir(), sowie zur Typ-Bestimmung lstat() (der im Unterschied zu stat() keine Symlinks dereferenziert und dadurch Endlos-Rekursionen bei der Symlink-Auflösung vermeidet).


Anmelden zum Antworten