#include <stdio.h>
|
#include <string.h>
|
#include <errno.h>
|
#include <unistd.h>
|
#include <stdlib.h>
|
|
#include <sys/types.h>
|
#include <sys/ipc.h>
|
#include <sys/shm.h>
|
|
#define FTOK_PATH "/dev/zero"
|
#define FTOK_PROJID 0x22
|
|
typedef struct st_student
|
{
|
char name[64];
|
int age;
|
} t_student;
|
|
int main(int argc, char **argv)
|
{
|
key_t key;
|
int shmid;
|
int i;
|
t_student *student;
|
|
if( (key=ftok(FTOK_PATH, FTOK_PROJID)) < 0 )
|
{
|
printf("ftok() get IPC token failure: %s\n", strerror(errno));
|
return -1;
|
}
|
|
shmid = shmget(key, sizeof(t_student), IPC_CREAT|0666);
|
if( shmid < 0)
|
{
|
printf("shmget() create shared memroy failure: %s\n", strerror(errno));
|
return -2;
|
}
|
|
student = shmat(shmid, NULL, 0);
|
if( (void *)-1 == student )
|
{
|
printf("shmat() alloc shared memroy failure: %s\n", strerror(errno));
|
return -2;
|
}
|
|
for(i=0; i<4; i++)
|
{
|
printf("Student '%s' age [%d]\n", student->name, student->age);
|
sleep(1);
|
}
|
|
shmctl(shmid, IPC_RMID, NULL);
|
|
return 0;
|
}
|