Aggiornamenti + alcune sockopt di IP
[gapil.git] / listati / MemShared.c
1 /* Function CreateShm: Create a shared memory segment mapping it */
2 void * CreateShm(char * shm_name, off_t shm_size, mode_t perm, int fill) 
3 {
4     void * shm_ptr;
5     int fd;
6     int flag;
7     /* first open the object, creating it if not existent */
8     flag = O_CREAT|O_EXCL|O_RDWR;
9     fd = shm_open(shm_name, flag, perm); /* get object file descriptor */
10     if (fd < 0) { 
11         return NULL;
12     }
13     /* set the object size */
14     if (ftruncate(fd, shm_size)) {
15         return NULL;
16     }
17     /* map it in the process address space */
18     shm_ptr = mmap(NULL, shm_size, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
19     if (shm_ptr == MAP_FAILED) {
20         return NULL;
21     }
22     memset((void *) shm_ptr, fill, shm_size); /* fill segment */
23     return shm_ptr;
24 }
25 /* Function FindShm: Find a POSIX shared memory segment  */
26 void * FindShm(char * shm_name, off_t shm_size) 
27 {
28     void * shm_ptr;
29     int fd;           /* ID of the IPC shared memory segment */
30     /* find shared memory ID */
31     if ((fd = shm_open(shm_name, O_RDWR|O_EXCL, 0)) < 0) {
32         return NULL;
33     }
34     /* take the pointer to it */
35     shm_ptr = mmap(NULL, shm_size, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
36     if (shm_ptr == MAP_FAILED) {
37         return NULL;
38     }
39     return shm_ptr;
40 }
41 /* Function RemoveShm: Remove a POSIX shared memory segment */
42 int RemoveShm(char * shm_name)
43 {
44     return shm_unlink(shm_name);
45 }