Spydleif Skrevet 9. januar 2007 Rapporter Del Skrevet 9. januar 2007 Sitter med en oppgave der jeg må lage et program i C som lister ut innholdet i en mappe på tilsvarende måte som unix kommandoen ls -lR. I tillegg må den bruke følgende system calls: opendir, chdir, readdir og stat og det må være en form for feilsjekking. Personlig har jeg ikke så veldig god peiling på C, så jeg hadde satt veldig stor pris på hjelp til denne oppgaven. Takk for alle svar. Lenke til kommentar
DarkSlayer Skrevet 9. januar 2007 Rapporter Del Skrevet 9. januar 2007 1. Finn ut hvordan de ulike kommandoene fungerer. Hva gjør de? Sett opp en liste over punkter ditt program skal kunne gjøre. 2. Lær deg C. Beklager, men jeg syns posten din er veldig "jeg er lat, kan dere gjøre dette for meg?". Dette er jo ikke oppgave man får på grunnkurs programmering akkuratt, så c syntaks burde være på plass allerede(ligner jo på c++, java, c#). Lenke til kommentar
Dead_Rabbit Skrevet 9. januar 2007 Rapporter Del Skrevet 9. januar 2007 Hvor langt er det du har kommet da? Kan du paste koden din? Lenke til kommentar
Spydleif Skrevet 23. januar 2007 Forfatter Rapporter Del Skrevet 23. januar 2007 #include <sys/types.h> #include <unistd.h> #include <dirent.h> #include <stdio.h> #include <sys/stat.h> #include <string.h> int recls(char *); int lsdetails(struct stat*); //note alternative prototype int printperms(mode_t mode); int main(int argc, char **argv){ recls(argv[1]); } int recls(char *path) { DIR *dir; struct dirent *dirslot; struct stat statbuff; chdir(path); dir=opendir("."); while (1) { dirslot=readdir(dir); if (dirslot==NULL) break;//note change printf(" %s ", dirslot->d_name); stat(dirslot->d_name, &statbuff); lsdetails(&statbuff); } rewinddir(dir); while (1) { dirslot=readdir(dir); if (dirslot==NULL) return;//note if (strcmp(dirslot->d_name, ".")==0) continue; if (strcmp(dirslot->d_name, "..")==0) continue; stat(dirslot->d_name, &statbuff); if (S_ISDIR(statbuff.st_mode)) { printf(" %s\n", dirslot->d_name); chdir(dirslot->d_name); recls("."); chdir(".."); } } } int lsdetails(struct stat *astatbuff) { printf("uid %d ", astatbuff->st_uid); printperms(astatbuff->st_mode); return 0; } int printperms(mode_t mode) { char perms[10]; int i; for (i=0;i<9;i++) perms='-'; perms[10]=0; if (mode & S_IRUSR) perms[1]='r'; printf(" %s\n",perms); } Slik som det er nå får jeg listet ut det som befinner seg i mappen, men det ser ikke akkurat pent ut, og jeg får ikke opp navnet på brukeren, kun UID. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå