Witam
Chce napisać program który Tworzy katalogi problem polega na tym że, z poziomu kodu nie wolno wykonywać skryptów, ani poleceń powłoki. Potrzebuje fukcji analogicznej do open() w przypadku plików, która pozwala na dodawanie praw dostępu.
Jestem amatorem licze na wskazówki.
Dość skomplikowanie to wygląda, jest może jakaś instrukcja w polskiej wersji. Do tej operacji konieczne jest robienie fork() nie ma jakiejś prostrzej metody ?
Nie, nie jest potrzebne. Gdybyś się skupił i naprawdę przeczytał ten kod to wiedziałbyś, że fork znajduje się tylko w funkcji testującej.
Wszystko, czego Ci potrzeba to odpowiednio wywołane:
<ort>man 2 mkdir</ort>
man 2 mkdir
Kto dodał ikonkę błąd ortograficzny obok ikonki kodu?
Po przeanalizowaniu kodu przyznaje rację, jednak niepokoi mnie fukncja mkdir() czy nie kwalifikuje się ona do poleceń powłoki ?
Chce się upewnić czy to na pewno jedyna metoda wykonania tego zadania, choć umacniam się w przekonaniu że tak po tym jak przeorałem pół internetu.
Polecenie powłoki oraz ta funkcja mają wspólne nazwy.
ituj napisał(a):
Po przeanalizowaniu kodu przyznaje rację, jednak niepokoi mnie fukncja mkdir() czy nie kwalifikuje się ona do poleceń powłoki ?
Chce się upewnić czy to na pewno jedyna metoda wykonania tego zadania, choć umacniam się w przekonaniu że tak po tym jak przeorałem pół internetu.
Nie, to normalna funkcja określona w standardzie POSIX (system call). Program mkdir
("polecenie powłoki") właśnie z niej korzysta. Ty też możesz właśnie tak, jak zostało pokazane w tych kodach wyżej.
Dzięki zuchy, ocieram łzy i biore sie do roboty
ituj napisał(a):
Dość skomplikowanie to wygląda, jest może jakaś instrukcja w polskiej wersji. Do tej operacji konieczne jest robienie fork() nie ma jakiejś prostrzej metody ?
Prostsza metoda jest w tym samym linku:
#include <boost/filesystem.hpp>
boost::filesystem::create_directories("/tmp/a/b/c");
othello napisał(a):
Prostsza metoda jest w tym samym linku:
#include <boost/filesystem.hpp>
boost::filesystem::create_directories("/tmp/a/b/c");
To na pewno nie przejdzie, poziom trudnosci jak przy użyciu skryptu.
A ja nadal się z tym męcze choć mam pomysł... zadanie polega na tym , że musze napisac program który uruchamia się np. : " mkdirs 0664 /folder/folder2/1 /folder/folder2/2 "
i ma na celu stworzyć dwa katalogi (1, 2)o prawach dostepu 0664 we wspólnych podkatalogach (folder1 i folder2) i teraz mój patent :
Chce każdy wyraz zapisać w innej tablicy używam do tego tablicy dwu wymiarowej, gdybym miał to tak podzielone :
tabl[1][10] ="mkdirs";
tab[2][10] ="0664";
tab[3]..............
tab...........="/folder/folder2/2";
to wydaje mi się, że umiał bym już to dalej załatwić, w tym celu robie coś takiego :
...
char dane [N][M]
...
while((i != (N-1)) && (j != (M-1)) &&(wyjscie == 0))
{
printf("\n proba1 \n");
scanf("%c", &x);
if(x == '\r') // jak enter to wyjscie
{
printf("\n proba1 \n");
wyjscie = 1;
}
if(x != ' ')
{
dane[i][j] = x;
printf("\n proba2 \n");
}
else
{
i++;
j= -1;
printf("\n proba3 \n");
}
j++;
printf("\n proba4 \n");
}
...
Tutaj moja koncepcja się nie sprawdza ponieważ wyświetla się tylko "proba1" bez względu ile znaków wpisze nie reaguje na "spacje" a po tym jak wciskam Enter wyrzuca mi:
"Naruszenie ochrony pamięci"
Nie bardzo rozumiem w czym rzecz słabo orietuje się w programowaniu pod linuksa, może tablica 2 wymiarowa wymaga zbyt dużo pamięci,
licze na wskazówki w czym może być problem lub jakieś inne spojrzenie na problem bo na razie jestem w kropce.
Przecież od tego jest argv
, tam to już jest podzielone wg spacji. Mam na myśli to:
int main(int argc, char **argv)
Pamiętaj że syscall mkdir
nie robi automatycznie wszystkich katalogów po drodze, musisz sam zadbać o stworzenie całej hierarchii.
Jeśli zrobie wprowadzanie danych przez argumenty jak sugerujesz to wprowadzeniu np. takiego ciągu znaków "0444 /tmp/tt /tmp/ee" , każdy ciąg znaków bez "spacji" będzie interpretowany jako oddzielny argument argv[1] , argv[2]... ?
Gdybym to zamieniły problem z ochroną pamięci zostałby rozwiązany ? Mam zamiar to przerobić jednak ciekawi mnie dlaczego mój aktualny problem powoduje naruszenie ochrony, czy używam czegoś nie dozwolonego w kodzie a może powinienem zmienić dostęp do jakichś katalogów. Jak już wsponiałem jestem początkującym graczem i każda odpowiedz jest dla mnie cenna