Powłoka w C polecenie ls -l

0

Witam potrzebuje pomocy. Musze napisać powłokę systemu w języku C i mam problem z napisaniem funkcji do polecenia ls -l. Mam kod do ls:

 if (!strcmp(args[0], "ls" ))
{
if(args[1]==NULL)
{
ls(argc, argv);
}
if(args[1]!=NULL){
    char miejsce[256]; 
    getcwd(miejsce, 256); 
    chdir(args[1]); 
    ls(argc, argv); 
    chdir(miejsce);
}
continue; 
}

Proszę o pomoc jak przerobić ten kod pod polecenie ls -l

0

A co robi funkcja "ls"? Bo przecież to nie jest żadna standardowa funkcja...

0

a sory zapomniałem dodać kodu od funkcji ls funkcja ls odpowiada za wyświetlanie plików dokładnie odpowiada loceceniu ls w linuxie. Kod funkcji ls

 

int ls(int argc, char *argv[])
{
    DIR *dir = opendir(".");
    if(dir){
     struct dirent *ent;
         if(argc==1){
          while((ent = readdir(dir)) != NULL){
            printf("<%s> ",ent->d_name);
            }
        }
        else if(argc==2 && strcmp(argv[1], "l")){
           while((ent = readdir(dir)) != NULL){

            printf("%d\t\t%s\t\t%d\t\n",(int)ent->d_ino, ent->d_name, ent->d_type);
            }
        }
        else{
            printf("error");
        }
        printf("\n");
    }
    else{
      fprintf(stderr, "Error\n");
    }

}

0

Radzę poprosić autora kodu o wyjaśnienia lub przeczytać pierwszy lepszy kurs C/C++ od razu będziesz wiedział jak dodać -l

0

Gdybym napotkał w poradniku do c i c++ kwestię tego polecenia to bym tu nie pisał, Napisałem bo nigdzie nie znalazłem rozwiązania tego problemu więc, nadal proszę o pomoc.

1

o_O no jak szukasz poradnika "jak napisać ls -l" to na pewno nie znajdziesz. Gdybyś jednak postanowił nauczyć się programować, zamiast szukać tutoriala z twoją pracą domową, to zobaczyłbyś że modyfikacja tego kodu wcale nie jest aż tak skomplikowana.
Proponuje żebyś zaczął od zrozumienia tego kodu który podałeś. Jak go zrozumiesz to jego modyfikacja będzie trywialna.

0

gdyby była trywialna to bym to ogarnął, przejrzałem kilka poradników do c i c++ ale nic nie znalazłem na ten temat ale widze ze to forum jest dla picu a nie żeby komuś pomóc szkoda

0

Przeczytaj https://github.com/put-poznan/mls - może ogarniesz co się tam dzieje.

1

Popatrzyłem na ten kod i naszło mnie pytanie: czy ten kod czasem JUŻ nie implementuje tego o co pytasz? o_O Bo z tego co widze to implementuje i nic nie trzeba w nim zmieniać... Ukradłeś kod i nawet nie wiesz że jest kompletny? o_O

0

niestety kod nie ,,implementuje" polecenia ls -l jestem laikiem jeżeli chodzi o c ale nie aż takim

0
Puma2192 napisał(a):

... jestem laikiem jeżeli chodzi o c ale nie aż takim

Jesteś nie tylko laikiem ale i przesadnym optymistą.

0

Ekhmmm... @Shalom ma rację:

else if(argc==2 && strcmp(argv[1], "l")){
  while((ent = readdir(dir)) != NULL){
    printf("%d\t\t%s\t\t%d\t\n",(int)ent->d_ino, ent->d_name, ent->d_type);
  }
}

Z tą różnicą, że akceptuje opcję l zamiast -l.

0

niestety ale ta funkcja nie działa widziałem też ten kod prawda może i nie znam kodu ale miej więcej umiem go uruchomić. Trudno będę musiał rozwiązać ten problem sam

0
Puma2192 napisał(a):

Trudno będę musiał rozwiązać ten problem sam
A nie takie było założenie prowadzącego?

1 użytkowników online, w tym zalogowanych: 0, gości: 1