#include <sys/types.h>
#include<stdio.h>
#include<string.h>
#include <errno.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <time.h>
int main(int agrc, char *argv[])
{
key_t key = 888999;
int shmid = shmget(key, 1024, IPC_CREAT | IPC_EXCL);
if(shmid == -1)
{
printf("shmget err: %d %s\n", errno, strerror(errno));
return -1;
}
void *p = shmat(shmid, NULL, SHM_R | SHM_W);
if (p == NULL)
{
printf("shmat failed\n");
return -1;
}
shmctl(shmid, IPC_RMID, 0);
printf("first shmid: %d p: %p\n", shmid, p);
const int LEN = 11;
memset(p, 'a', LEN-1);
//if(shmid == -1)
//{
// printf("shmget err: %d %s\n", errno, strerror(errno));
// return -1;
p = shmat(shmid, NULL, SHM_R | SHM_W);
if (p == NULL)
{
printf("shmat xx failed\n");
return -1;
}
char buf[LEN] = {0};
memcpy(buf, p, LEN-1);
printf("%s\n", buf);
printf("second shmid: %d p: %p\n", shmid, p);
getchar();
}
#include<stdio.h>
#include<string.h>
#include <errno.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <time.h>
int main(int agrc, char *argv[])
{
key_t key = 888999;
int shmid = shmget(key, 1024, IPC_CREAT | IPC_EXCL);
if(shmid == -1)
{
printf("shmget err: %d %s\n", errno, strerror(errno));
return -1;
}
void *p = shmat(shmid, NULL, SHM_R | SHM_W);
if (p == NULL)
{
printf("shmat failed\n");
return -1;
}
shmctl(shmid, IPC_RMID, 0);
printf("first shmid: %d p: %p\n", shmid, p);
const int LEN = 11;
memset(p, 'a', LEN-1);
///
//如果解开这一段注释,程序运行是成功的但是创建的共享内存已不是上一段代码创建的共享内存了.而是新的内存.
//shmid = shmget(key, 1024, IPC_CREAT | IPC_EXCL);//if(shmid == -1)
//{
// printf("shmget err: %d %s\n", errno, strerror(errno));
// return -1;
//}
///
p = shmat(shmid, NULL, SHM_R | SHM_W);
if (p == NULL)
{
printf("shmat xx failed\n");
return -1;
}
char buf[LEN] = {0};
memcpy(buf, p, LEN-1);
printf("%s\n", buf);
printf("second shmid: %d p: %p\n", shmid, p);
getchar();
}