Linux共享内存

#include 
#include 
#include 
#include 
 #include 
#define ERR_EXIT(m)\
	do \
	{\
		perror(m);\
		exit(EXIT_FAILURE);\
	}while(0)

typedef struct _Teacher
{
	char name[64];
	int age;
}Teacher;
//如果共享内存被别的程序占用,删除共享内存,不会立马删除
//出现了一个现象,KEY变成 了一个0。。。


int main(int argc,char*argv[])
{
	int shmid = 0;
	shmid = shmget(0x2234,sizeof(Teacher),0666|IPC_CREAT);
	if(shmid == -1)
	{
		if(errno == ENOENT)
		{
			printf("我们自己检查共享内存不存在\n");
		}
		perror("shmget");
	}
	
	void *p = NULL;
	p = shmat(shmid,NULL,0);
	Teacher t1 = {"aaaa",34};
	memcpy(p,&t1,sizeof(t1));
	//memcpy(p+sizeof(t1),&t1,1024);
	
	printf("键入1表示删除 0暂停 其他退出\n");
	int num;
	scanf("%d",&num);
	if(num == 1)
	{
		//脱离unmap
		shmdt(p);
		shmctl(shmid,IPC_RMID,NULL);
	}
	else if(num == 0)
	{
		pause();
	}
	else
	{
		//脱离unmap
		shmdt(p);
	}
	return 0;
}

你可能感兴趣的:(Linux系统编程)