Tworzenie katalogów Linux

0

Witam,
Piszę program na linuxa, który tworzy foldery. Ścieżki do folderów są zapisane w strukturze i są typu conts *char. Po wywołaniu programu bez parametrów program tworzy foldery korzystajac z adresów bezwzglednych zapisanych w strukturze. np. "/Home/Test/Folder/Folder1" itd. powiedzmy 30 folderów(Wszystkie adresy zaczynają się od "/home").

Moje problemy są następujące:

  1. Co w przypadku, gdy katalog domowy znajduje się w "/export/home", a nie tak jak w większości dystrybucji "/home" (Jaka będzie instrukcje warunkowa, która to rozróżnia?) Czy jest możliwe, aby do łańcucha const *char dopisać na początku "/export"? (Konwersja typów?)

  2. Drugie pytanie wiąże się trochę z pierwszym. Załóżmy, że uzytkownik wywołuje program z parametrem, jako parametr podaje względną lub bezwzględną ścieżkę. A program tworzy w niej katalogi na podstawie utworzonej struktury danych, o ktorej wspominalem na poczatku. Jak podejść do tego problemu? Mój ogólny pomysł był taki, aby program wtedy zamienił "/home" na adres podanej ścieżki(w przypadku podania sciezki bezwzglednej), jednak nadal nie wiem jest mozliwe operowanie na takich łańcuchach. Co do sciezki wzglednej poki co wgl nie mam pomyslu ;p A może całkiem zmienić koncepcje programu i w strukturze danych powpisywać względne ścieżki katalogów, a dopiero później próbować coś dalej z tym działać.
    Ktoś ma jakieś pomysły?

1
  1. A do czego rozwija sie w tym twoim szczególnym przypadku ~ ?
  2. A po co chcesz coś zamieniać? Nie mozesz robic po prostu strcat(base, te_twoje_sciezki)? I wtedy base będzie albo home albo ~ albo to co user poda.
0

W sumie dzięki Tobie doszedłem do wniosku, że mogę lekko przerobić program.
Nowa koncepcja to:

  1. Wyrzucam ze struktury, ktora przechowuje sciezki katalogow "/home/"
  2. Po wywolaniu programu programu bez parametru, po prostu to cale drzewo katalogow zostanie utworzone w bierzacym katalogu
  3. Jesli user poda jako parametr sciezke, dzieki funkcji ktora mi podrzuciles. User bedzie mogl spokojnie utworzyc cala strukture gdzie tylko chce.
    Wydaje mi się, że to będzie najbardziej optymalne rozwiązanie. Póki co wielkie dzięki :)
0

Wszystko już ładnie śmiga, tylko jest jeden problem. Funkcja: http://linux.die.net/man/3/mkdir wymaga, aby jako argument był podany const char, jednak po sklejeniu ścieżki z tym co podał użytkownik otrzymuje char. Troche googlowalem, ale z tego co widze konwersja char to const char nie jest wcale taka prosta. Da sie to jakoś ominąć?

2

Coś kręcisz bo castowanie char* na const char* przecież jest załatwiane automatycznie. To w drugą stronę jest problem. Pokaż kod który ci nie działa i log błędu.

2

możesz spokojnie podać char* tam gdzie funkcja oczekuje const char*.
problem jest w drugą stronę.

2

Jak nie jest prosta?

#include <stdio.h>

void foo(const char* ptr)
{
    printf("%s", ptr);
}

int main()
{
    char buf[] = "Oho";
    char* ptr = buf;
    foo(ptr); // konwersja char* na char const*!
}
0

Faktycznie macie racje. Wybaczcie za kłopot. Po prostu patrzyłem w dokumentacje jak głupi, a nawet nie przetestowałem działania programu. Dzięki wam przynajmniej coś mi się rozjaśniło w tym temacie :)

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