Печать физического адресного пространства разделяемой памяти - PullRequest
0 голосов
/ 08 марта 2011

В программе на Си я получил 2 программы: одну для сохранения строки в общей памяти, а другую - для печати этой же строки через доступ к общей памяти.

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 голосов
/ 08 марта 2011

Вывод 2 МБ общей памяти в Linux.

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

Возможно, сначала нужно смонтировать ее в fstab.

...