打印共享内存的物理地址空间

时间:2011-03-08 17:17:50

标签: shared-memory memory-address memory-mapping

在C程序中,我有两个程序用于将字符串存储在共享内存中,另一个程序用于通过访问共享内存来打印相同的字符串。

program 1->

printf("\n SENDER ADDRESS");
printf("\nTHE ADDRESS IS %p",addr1);

printf("\nENTER THE MESSAGE:");

scanf("%s",addr1);

printf("\nMESSAGE STORED IN %p IS %s",addr1,addr1);

program->2  
I am having the same text body in program 2 . **BUT IT IS PRINTING THE LOGICAL ADDRESS. HENCE IN THE OUTPUT IAM GETTING 2 DIFFERENT LOGICAL ADRESS. BUT INSTEAD OF THAT IF I WANT TO HAVE SAME PHYSICAL ADDRESS(TO SATISFY THE COLLEGE PROFFESSOR)HOW CAN I DO.** 
PLEASE HELP....

PROGRAM 1:
#include<sys/types.h>
#include<string.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<stdio.h>
main()
{
key_t key;
int shmid;
char* addr1;
key = ftok("/home/tamil/myc/pws.c",'T');
shmid = shmget(key,128*1024,IPC_CREAT|SHM_R|SHM_W);

addr1 = shmat(shmid,0,0);




printf("\nIPC SHARED MEMORY");
printf("\n SENDER ADDRESS");
printf("\nTHE ADDRESS IS %p",addr1);
printf("\nENTER THE MESSAGE:");
scanf("%s",addr1);
printf("\nMESSAGE STORED IN %p IS %s",addr1,addr1);

}

PROGRAM 2:
#include<sys/types.h>
#include<string.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<stdio.h>

main()
{
 int shmid;
 char* addr1;
 key_t key;


key = ftok("/home/tamil/myc/pws.c",'T');
shmid = shmget(key,128*1024,SHM_R|SHM_W);

addr1 = shmat(shmid,0,0);


printf("\nIPC SHARED MEMORY");
printf("\n SENDER ADDRESS");
printf("\nTHE ADDRESSS IS %p",addr1);
printf("\nMESSAGE STORED IN %p IS %s",addr1,addr1);

}

  output:
    tamil@ubuntu:~/myc$ cc shmget.c
    tamil@ubuntu:~/myc$ ./a.out

    IPC SHARED MEMORY
     SENDER ADDRESS
    **THE ADDRESS IS **0xb786c000****
    ENTER THE MESSAGE:helloworld

    MESSAGE STORED IN **0xb786c000** IS helloworldtamil@ubuntu:~/myc$ cc shmget2.c
    tamil@ubuntu:~/myc$ ./a.out

    IPC SHARED MEMORY
     SENDER ADDRESS
    **THE ADDRESSS IS **0xb7706000****
    MESSAGE STORED IN **0xb7706000** IS helloworldtamil@ubuntu:~/myc$ 

1 个答案:

答案 0 :(得分:0)

在Linux上转储2 MB的共享内存。

dd if=/dev/shm/stuff_here of=myshm.dmp bs=1024 count=2048

可能必须先在fstab中安装它。