.


:




:

































 

 

 

 





䳿 || , , . : (|| , ) .

 

SERVER CLIENT

Hello,World

|| || :

1. ;

2. , .

|| , . |',| . ,| '|'| || (, ). - || , . || 0 1, .

|| ||, :

- , Server Client;

- Server ', , ';

- Client ', , , || ', , , || ', || .

|| :

int semget (key_ tKey, int nsems, int semflag); - ID.

:

- Key - ||, , || ;

- nsems - ;

- semflag - ( shmget()).

ϳ , , || , :

- ;

- .

:

semop (int semid, struct sembuf *semop, size_t nops);

:

- semid - ;

- nops - , | , , | 䳿 , || ;

- struct sembuf *semop - , semop, .

|| :

-

г 0 -

|| - , , || 0

:

- || || ;

- || ;

- , || .

|| || :

1. ;

2. || , .

||:

||, ( "0" "1"), , "0" - , "1" - .

:

Static struct sembuf sop_ lock[]={0,0,0},{0,1,0}

, :

Semop (semid,&sop_lock[0],2).

:

Static struct sembuf sop_ unlock[]={0-1,0};

:

Semop (semid,&sop_unlock[0],1);

||:

"0" - ; "1" - ( ).

:

Static struct sembuf sop_ lock[1]={0-1,0}

Semop (semid,&sop_lock[0],1);

Static struct sembuf sop_unlock[1]={0,1,0};

Semop (semid,&sop_unlock[0],1);

 

Server.c

int main()

{

printf("Server start\n");

Message *msgptr;

key_t key;

int shmid, semid;

key=ftok("server",1);

shmid=shmget(key,sizeof(Message),PERM | IPC_CREAT);

msgptr = (Message*)shmat(shmid,0,0);

semid = semget(key,2,PERM | IPC_CREAT);

semop(semid,&proc_wait[0],1);

semop(semid,&mem_lock[0],2);

printf("Client send message: %s",msgptr->buff);

semop(semid,&mem_unlock[0],1);

shmdt(msgptr);

printf("Server exit\n");

exit(0);

}

Client.c

int main()

{

printf("Client start\n");

Message *msgptr;

key_t key;

int shmid,semid;

key=ftok("server",1);

shmid=shmget(key,sizeof(Message),0);

msgptr=(Message*)shmat(shmid,0,0);

semid=semget(key,2,PERM);

semop(semid,&mem_lock[0],2);

semop(semid,&proc_start[0],1);

sprintf(msgptr->buff,"Hello world!\n");

printf("Client send message 'Hello world'\n");

semop(semid,&mem_unlock[0],1);

semop(semid,&mem_lock[0],2);

shmdt(msgptr);

shmctl(shmid,IPC_RMID,0);

semctl(semid,0,IPC_RMID);

printf("Client exit\n");

exit(0);

}

Shmem.h

#define MAXBUFF 80

#define PERM 0666

typedef struct mem_msg

{

int segment;

char buff[MAXBUFF];

}Message;

struct sembuf proc_wait[1]={1,-1,0};

struct sembuf proc_start[1]={1,1,0};

struct sembuf mem_lock[2]={0,0,0,0,1,0};

struct sembuf mem_unlock[1]={0,-1,0};

 





:


: 2016-07-29; !; : 469 |


:

:

: , .
==> ...

1550 - | 1522 -


© 2015-2024 lektsii.org - -

: 0.016 .