#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
key_t key=ftok("/home/ubuntu/",'b');
if(key < 0)
{
perror("ftok");
return -1;
}
printf("key = %#x\n",key);
//创建共享内存
int shmid = shmget(key,48,IPC_CREAT|0777);
if(shmid < 0)
{
perror("shmget");
return -1;
}
printf("shmid = %d\n",shmid);
//映射到当前进程
void *shmaddr = shmat(shmid,NULL,0);
if((void*)-1 == shmaddr)
{
perror("shmat");
return -1;
}
printf("shmaddr = %p\n",shmaddr);
char* pa = (char*)shmaddr;
*pa = 0;
//写入字符串
char* ptr =pa+1;
strcpy(ptr, "123456");
while(1)
{
if(0 == *pa)
{
printf("%s\n", ptr);
*pa = 1;
}
}
return 0;
}
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
key_t key=ftok("/home/ubuntu/",'b');
if(key < 0)
{
perror("ftok");
return -1;
}
printf("key = %#x\n",key);
//创建共享内存
int shmid = shmget(key,48,IPC_CREAT|0777);
if(shmid < 0)
{
perror("shmget");
return -1;
}
printf("shmid = %d\n",shmid);
//映射到当前进程
void *shmaddr = shmat(shmid,NULL,0);
if((void*)-1 == shmaddr)
{
perror("shmat");
return -1;
}
printf("shmaddr = %p\n",shmaddr);
char *pa=(char*)shmaddr;
char *p,*p1,temp;
while(1)
{
p = pa+1;
p1 = p+strlen(p)-1;
if(1 == *pa)
{
while(p<p1)
{
temp = *p;
*p = *p1;
*p1 = temp;
p++;
p1--;
}
*pa = 0;
}
}
return 0;
}