Facebook
From Putrid Frog, 3 Years ago, written in C#.
This paste is a reply to Re: Re: Re: Re: Re: Re: Re: Re: ss from Melodic Octupus - view diff
Embed
Download Paste or View Raw
Hits: 75
  1. #include <stdio.h> //...standardowe wejście/wyjście
  2. #include <stdlib.h> //...komunikat błędu perror()
  3. #include <unistd.h> //...identyfikacja procesu geppid()
  4. #include <sys/sem.h>//...stąd deklaracje dot. semaforów
  5. #include <sys/stat.h> //...maski uprawnień, choć można inaczej
  6. //skoro czytamy z linii komend, to nagłówek main() ...
  7. int main( int argc,char** argv )
  8. {
  9. int nsems; //...zmienna dla ilość semaforów w tworzonym zbiorze
  10. int semflag; //...zmienna dla maski tworzenia semaforów
  11. key_t key; //...zmienna dla klucza identyfikującego zbiór
  12. if( argc>1 ) //...sprawdźmy na początek, czy wywołanie było poprawne
  13. {
  14. sscanf( argv[1],"%d",&nsems ); //...odczytujemy ilość semaforów
  15. if( nsems>0 ) //...sprawdźmy, tak na wszelki wypadek
  16. {
  17. key = ftok( "/tmp",'a'+'t'+'h'+'r'+'i'+'r' );
  18. //...taki sobie komunikat diagnostyczny
  19. printf( "[pid=%u] tworzy zbiór %d semaforów
  20. [key=%x]\n",(unsigned)getpid(),nsems,(unsigned)key );
  21. //...przygotujemy maskę tworzenia semaforów
  22. semflag = IPC_CREAT | S_IRUSR | S_IWUSR;
  23. //...i to już wszystkie czynności przygotowawcze do semget()
  24. if( semget( key,nsems,semflag )==-1 ) //...jeżeli,to kłopot
  25. { perror( "\tsemget()..." ); exit( 3 ); }
  26. /*- a dalej to już tylko diagnostyka ewentualnych błędów -*/
  27. }
  28.  else{printf("\tbłędna ilość semaforów (n=%d)\n",nsems );exit(2);}
  29. }
  30. else
  31. { printf( "\t%s [%s]\n%s",argv[0],"n",
  32. "\tn -rozmiar tworzonej tablicy semaforów\n" ); exit( 1 ); }
  33. return 0;
  34. }