Program tworzący katalogi. Linux

0

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.

0

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 ?

0

Nie, nie jest potrzebne. Gdybyś się skupił i naprawdę przeczytał ten kod to wiedziałbyś, że fork znajduje się tylko w funkcji testującej.

0

Wszystko, czego Ci potrzeba to odpowiednio wywołane:
<ort>man 2 mkdir</ort>

0

man 2 mkdir

0

Kto dodał ikonkę błąd ortograficzny obok ikonki kodu?

0

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.

0

Polecenie powłoki oraz ta funkcja mają wspólne nazwy.

0
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.

0

Dzięki zuchy, ocieram łzy i biore sie do roboty

0
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");
0
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.

0

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.

0

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

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