fork download
  1. #include <stdio.h>
  2.  
  3. typedef enum{USER,GROUP,OTHER}Grupa;
  4. typedef enum{R,W,X}Prawo;
  5.  
  6. void przyznaj_prawo(int *prawa,Grupa grupa,Prawo prawo){
  7. int maska=1<<(grupa*3+prawo);
  8. *prawa|=maska;
  9. }
  10.  
  11. void zabierz_prawo(int *prawa,Grupa grupa,Prawo prawo){
  12. int maska=~(1<<(grupa*3+prawo));
  13. *prawa&=maska;
  14. }
  15.  
  16. void wyswietl_prawa(int prawa){
  17. const char znaki[]={'r','w','x'};
  18. for(int grupa=USER;grupa<=OTHER;grupa++){
  19. for(int prawo=R;prawo<=X;prawo++){
  20. int maska=1<<(grupa*3+prawo);
  21. if(prawa&maska) putchar(znaki[prawo]);
  22. else putchar('-');
  23. }
  24. }
  25. putchar('\n');
  26. }
  27.  
  28. int main(){
  29. int prawa=0;
  30. przyznaj_prawo(&prawa,OTHER,R);
  31. przyznaj_prawo(&prawa,USER,X);
  32. wyswietl_prawa(prawa);
  33. przyznaj_prawo(&prawa,USER,R);
  34. przyznaj_prawo(&prawa,USER,W);
  35. przyznaj_prawo(&prawa,GROUP,R);
  36. przyznaj_prawo(&prawa,GROUP,X);
  37. wyswietl_prawa(prawa);
  38. zabierz_prawo(&prawa,USER,W);
  39. zabierz_prawo(&prawa,GROUP,X);
  40. wyswietl_prawa(prawa);
  41. return 0;
  42. }
  43.  
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
--x---r--
rwxr-xr--
r-xr--r--