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 - go back
Embed
#include h>
h> //...standardowe wejście/wyjście
#include h>
h> //...komunikat błędu perror()
#include h>
h> //...identyfikacja procesu geppid()
#include h>
h>//...stąd deklaracje dot. semaforów
#include h>
h> //...maski uprawnień, choć można inaczej
//skoro czytamy z linii komend, to nagłówek main() ...
int main( int argc,char** argv )
{
 int nsems,semflag,semid;
 
nsems; //...zmienna dla ilość semaforów w tworzonym zbiorze
int semflag; //...zmienna dla maski tworzenia semaforów
key_t key;
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 
semaforów
[key=%x]\n",(unsigned)getpid(),nsems,(unsigned)key 
);
//...przygotujemy maskę tworzenia semaforów
semflag = IPC_CREAT | S_IRUSR | S_IWUSR;
semid = //...i to już wszystkie czynności przygotowawcze do semget()
if( 
semget( key,nsems,semflag );
if( semid==-1 ){ 
)==-1 ) //...jeżeli,to kłopot
perror( "\tsemget()..." ); exit( 3 ); }
else
{
if( semctl( semid,0x0,IPC_RMID) == -1)
{ perror("\tsemctl()"); exit(1); }
/*- 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;
}}}