Witam, próbuję zrozumieć pamięć współdzieloną i semafory, robię zadanie z Sieci i mam pewne problemy, dodam że dopiero zaczynam uczenie się tego tak więc proszę o wyrozumiałość :))
Mam zadanie:
Napisz programy klienta i serwera w oparciu o POSIX IPC realizujące następujący
scenariusz:
Serwer tworzy pamięć współdzieloną i semafor. W obszarze tej pamięci zapisuje
swój PID.Klient odczytuje z obszaru pamięci współdzielonej zapisany PID, wyświetla go
i zapisuje w jego miejsce swój PID.Dostęp klientów do obszaru pamięci współdzielonej należy zrealizować z użyciem
utworzonego semafora.Usunięcie semafora oraz pamięci wspólnej realizowane w funkcji obsługi sygnału SIGTERM w programie serwera.
Mój serwer a raczej jego początek:
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <sys/fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>int main(int argc, char *argv[]) {
sem_t *sem; int wartosc; char *sem_name="/sem_seba";
char *shm_name="/shm_seba";
int fd, i;
char *wsk;
size_t shm_length=1024;// Stworzenie semafora i pamieci
fd = shm_open(shm_name, O_RDWR | O_CREAT , 0644);
sem = sem_open(sem_name, O_RDWR | O_CREAT, 0644, 0);
ftruncate(fd, shm_length);
wsk = mmap(NULL, shm_length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);// Tu powinno byc zapisanie PID?
// W jaki sposob to sie realizuje?sem_close(sem);
sem_unlink(sem_name);
shm_unlink(shm_name);
exit(0);
}
No a klient powinien podczas działania podnosić na początku semafor, a następnie odczytać ten pid zapisany i napisać swój? Serwer w tym czasie jakoś powinien czekać na to? sem_wait czy coś?