Gå til innhold

Hjelp til skoleoppgave


Anbefalte innlegg

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
Videoannonse
Annonse

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
  • 2 uker senere...

#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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...