#include <stdio.h> //...standardowe wejście/wyjście
#include <stdlib.h> //...komunikat błędu perror()
#include <unistd.h> //...identyfikacja procesu geppid()
#include <sys/sem.h>//...stąd deklaracje dot. semaforów
#include <sys/stat.h> //...maski uprawnień, choć można inaczej
//skoro czytamy z linii komend, to nagłówek main() ...
int main( int argc,char** argv )
{
int nsems; //...zmienna dla ilość semaforów w tworzonym zbiorze
int semflag; //...zmienna dla maski tworzenia semaforów
key_t key; //...zmienna dla klucza identyfikującego zbiór
if( argc>1 ) //...sprawdźmy na początek, czy wywołanie było poprawne
{
sscanf( argv[1],"%d",&nsems ); //...odczytujemy ilość semaforów
if( nsems>0 ) //...sprawdźmy, tak na wszelki wypadek
{
key = ftok( "/tmp",'a'+'t'+'h'+'r'+'i'+'r' );
//...taki sobie komunikat diagnostyczny
printf( "[pid=%u] tworzy zbiór %d semaforów
[key=%x]\n",(unsigned)getpid(),nsems,(unsigned)key );
//...przygotujemy maskę tworzenia semaforów
semflag = IPC_CREAT | S_IRUSR | S_IWUSR;
//...i to już wszystkie czynności przygotowawcze do semget()
if( semget( key,nsems,semflag )==-1 ) //...jeżeli,to kłopot
{ perror( "\tsemget()..." ); exit( 3 ); }
/*- a dalej to już tylko diagnostyka ewentualnych błędów -*/
}
else{printf("\tbłędna ilość semaforów (n=%d)\n",nsems );exit(2);}
}
else
{ printf( "\t%s [%s]\n%s",argv[0],"n",
"\tn -rozmiar tworzonej tablicy semaforów\n" ); exit( 1 ); }
return 0;
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}