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