Konwersja kodu praw dostępu w linuxie z numerycznego na literowy i odwrotnie język C#

0

Witam!
Jak w temacie muszę napisać program konwertujący zapis praw dostępu w linuxie z tekstowego na liczbowy i odwrotnie.
W linuxie nadajemy prawa do pliku lub katalogu dla 3 grup użytkowników, i zapisujemy je w 3 blokach po 3 znaki razem 9 znaków.
W systemie liczbowym bedą to tylko 3 liczby.
Mamy następujaće prawa:
r-read prawo odczytu
w-write prawo zapisu
x- execute prawo do wykonania
zapis praw wygląda następująco:
rwx rwx rwx ; -wx -wx -wx ; r-x --x rw- kilka przykładów
Pierwsze trzy znaki są to prawa usera.
Drugi blok znaków są to prawa grupy userów
I ostatni blok są to prawa dla wszystkich użytkowników
Wszystki prawom odpowiadają liczby które teraz wypisze
0: --- // żadnych praw nie nadajemy
1: --x // prawo wykonania
2: -w- // prawo zapisu
3: -wx // prawo zapisu i wykonania
4: r-- // prawo odczytu
5 r-x // prawo odczytu i wykonania
6 rw- // prawo odczytu i zapisu
7 rwx // prawo zapisu,odczytu i wykonania
Kod liczbowy składa się z trzech cyfr z czego każda cyfra odpowiada jednemu blokowi znaków w zapisie literowym.
Teraz kilka przykładów:

  1. wprowadzamy kod prawa np. rwx rwx rwx
    Program zwraca liczbe : 777

  2. Wprowadzamy np r-- -w- --x
    Program zwraca 421

  3. wprowadzamy liczbę np 123
    Program zwraca --x -w- -wx

Myślę że dobrze wyjaśnilem o co chodzi i co program ma robić.
Proszę o pomoc a w sumie to o napisanie kodu takiego programu ponieważ sam nie mam o tym zielonego pojęcia.
Dopiero zaczynam przygodę z programowaniem na studiach, a wcześniej nie miałem styczności z tą dziedziną informatyki.
Mówimy oczywiście o języku C#
Bardzo proszę o pomoc i wyrozumiałość i z góry dziękuję
Pozdrawiam

0

C# i Linux. Ciekawe.

Co do algo to masz 2 opcje:

  1. Stworzenie tablicy (lub hash tablicy) w której będziesz miał wszystkie możliwe kombinacje i z niej wyświetlał jaka jest wartość.
  2. Patrzysz na pierwszą literę, jeśli to 'r' to dodajesz do sumy 4, jeśli '-' dodajesz 0, jeśli coś innego wywalasz błąd, sprawdzasz 2 literę, jeśli to 'w' dodajesz 2, jeśli '-'... widzisz zależność?
0

char T[]="xwr";
char X[12]={0};
int x,i;

cin>>oct>>x;
i=0;
for(int p=0;p<3;++p,x>>=3,X[i++]=' ') for(int q=0;q<3;++q,++i) X[i]=x&(1<<q)?T[q]:'-';
X[11]=0;
cout<<X<<endl;

cin>>setw(11)>>X;
x=0;
i=0;
for(int p=0;p<3;++p,x<<=3,++i) for(int q=0;q<3;++q,++i) if(X[i]==T[q]) x|=1<<q; else if(X[i]!='-') cout<<"ERROR"<<endl;
cout<<oct<<x<<endl;

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