Facebook
From Melodic Octupus, 4 Years ago, written in C#.
This paste is a reply to Re: Re: Re: Re: Re: Re: Re: ss from Sloppy Finch - go back
Embed
#include 
#include 
#include 
#include 
#include 
#include 
#include 
int main( void int argc,char** argv )
{
 int status;
nsems,semflag,semid;
 
key_t semkey; //... zmienne opisujące
int nsems,semflag,semid; // tworzoną tablicę semaforów
struct sembuf sems; //... struktura dla semop()
nsems = 1; //... tworzymy tablicę semaforów, z jednym semaforem
 semkey = ftok( "/tmp",'k'+'m' );
 semflag = IPC_CREAT | S_IRUSR | S_IWUSR;
 semid = semget( semkey,nsems,semflag );
sems.sem_num = 0; //... indeks do semafora, pierwszy=0 !
sems.sem_op = 7; //... może współdzielić 7 procesów
sems.sem_flg = 0x0; //... czyli z blokadą
semop( semid,&sems,nsems ); //... inicjujemy semafor
//... teraz pozostaje już tylko utworzyć proces potomny
switch( fork() 
key;
if( argc>1 
)
{
case -1: //... obsługa błędu fork()
printf( "!.!.!... błąd fork()...!.!.!\n" ); exit( 1 ); break;
case 0: //... kod dla procesu potomnego
printf( "[%u] semval=%d\n",(unsigned)getpid(),
semctl( semid,0,GETVAL ) ); exit( 0 ); break;
default: //...kod dla procesu nadrzędnego
wait( &status 
 sscanf( argv[1],"%d",&nsems )
if( nsems>0 )
{
key = ftok( "/tmp",'a'+'t'+'h'+'r'+'i'+'r' 
);
printf( "[%u] semval=%d\n",(unsigned)getpid(),
"[pid=%u] tworzy zbiór %d semaforów [key=%x]\n",
(unsigned)getpid(),nsems,(unsigned)key );
semflag = IPC_CREAT | S_IRUSR | S_IWUSR;
semid = semget( key,nsems,semflag );
if( semid==-1 ){ perror( "\tsemget()..." ); exit( 3 ); }
else
{
if( 
semctl( semid,0,GETVAL ) );
semctl( semid,0x0,IPC_RMID); //... usuwamy semafory
semid,0x0,IPC_RMID) == -1)
{ perror("\tsemctl()"); exit(1); }
}
 }
else
  { printf( "\t%s [%s]\n%s",argv[0],"n",
"\tn -rozmiar tworzonej tablicy semaforów\n" ); exit( 1 ); }
return 0;
}}}

Replies to Re: Re: Re: Re: Re: Re: Re: Re: ss rss

Title Name Language When
Re: Re: Re: Re: Re: Re: Re: Re: Re: ss Putrid Frog csharp 4 Years ago.