- 论坛徽章:
- 0
|
两个程序:
//shm.c:创建共享内存并修改
#include<sys/ipc.h>
#include<sys/shm.h>
#include<stdio.h>
typedef struct shm_St{
int i;
char *s;
char c;
}shmST;
main()
{
shmST *st1;
int key = 0x11011;
int mId;
if((mId = shmget(key,1024,IPC_CREAT|0666|IPC_EXCL)) == -1)
{
printf("fail to create share memory...\n");
return;
}
char * addr;
addr = (char *)shmat(mId,0,0);
st1 = (shmST *)addr;
st1->i = 1000;
st1->s = "now in share memory...";
st1->c = 'P';
printf("%d\n%s\n%c\n",st1->i,st1->s,st1->c);
return;
}
///////////
//shm1.c:连接共享内存读取数据
#include<sys/shm.h>
#include<sys/ipc.h>
typedef struct shm_st{
int i;
char *s;
char c;
}shmST;
main()
{
shmST *s1;
int key = 0x11011;
int mId = shmget(key,1024,0666);
char *addr = (char *)shmat(mId,0,0);
s1 = (shmST *)addr;
printf("%d\n%s\n%c\n",s1->i,s1->s,s1->c);
return;
}
为什么shm1.c输出结果是:
1000
P
中间的字符串跑哪去了呢,调试结果地址是一样的,结果中间字符串值为“\0002”?shm.c的输出是对的。。。 |
|