【无标题】

1.IO进程线程之共享内存:

shmrcv.c:

#include 
#define PAGESIZE 4096
int main(int argc, const char *argv[])
{
	key_t key=-1;
	if((key=ftok("/",'k'))==-1)
	{
		perror("ftok error");
		return -1;
	}
	printf("key=%d\n",key);

	//创建共享内存,将物理内存映射到内核空间
	int shmid=-1;
	if((shmid=shmget(key,PAGESIZE,IPC_CREAT|0664))==-1)
	{
		perror("shmget error");
		return -1;
	}
	printf("shmid=%d\n",shmid);

	//映射共享内存到用户空间
	char *addr=NULL;
	addr=shmat(shmid,NULL,0);
	if(addr==(void*)-1)
	{
		perror("shmat error");
		return -1;
	}
	printf("addr=%p\n",addr);
	//使用共享内存
	while(1)
	{
		sleep(1);
		printf("收到的内容为:%s\n",addr);

		if(strcmp(addr,"quit")==0)
		{
			break;
		}
	}

	//分离映射关系
	if(shmdt(addr)==-1)
	{
		perror("shmctl error");
		return -1;
	}

	//删除共享内存
	if(shmctl(shmid,IPC_RMID,NULL)==-1)
	{
		perror("shmctl error");
		return -1;
	}
	
	return 0;
}

shmsnd.c:

#include 
#define PAGESIZE 4096
int main(int argc, const char *argv[])
{
	key_t key=-1;
	if((key=ftok("/",'k'))==-1)
	{
		perror("ftok error");
		return -1;
	}
	printf("key=%d\n",key);

	//创建共享内存,将物理内存映射到内核空间
	int shmid=-1;
	if((shmid=shmget(key,PAGESIZE,IPC_CREAT|0664))==-1)
	{
		perror("shmget error");
		return -1;
	}
	printf("shmid=%d\n",shmid);

	//映射共享内存到用户空间
	char *addr=NULL;
	addr=shmat(shmid,NULL,0);
	if(addr==(void*)-1)
	{
		perror("shmat error");
		return -1;
	}
	printf("addr=%p\n",addr);
	//使用共享内存
	while(1)
	{
		printf("请输入>>>");
		fgets(addr,PAGESIZE,stdin);
		addr[strlen(addr)-1]=0;
		printf("数据发送成功\n");
		if(strcmp(addr,"quit")==0)
		{
			break;
		}
	}

	//分离映射关系
	if(shmdt(addr)==-1)
	{
		perror("shmctl error");
		return -1;
	}

	//删除共享内存
	if(shmctl(shmid,IPC_RMID,NULL)==-1)
	{
		perror("shmctl error");
		return -1;
	}
	
	return 0;
}

运行结果:

【无标题】_第1张图片

你可能感兴趣的:(java,前端,服务器)