2011-03-08 87 views
-1

在C程序中,我得到了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: 
    [email protected]:~/myc$ cc shmget.c 
    [email protected]:~/myc$ ./a.out 

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

    MESSAGE STORED IN **0xb786c000** IS [email protected]:~/myc$ cc shmget2.c 
    [email protected]:~/myc$ ./a.out 

    IPC SHARED MEMORY 
    SENDER ADDRESS 
    **THE ADDRESSS IS **0xb7706000**** 
    MESSAGE STORED IN **0xb7706000** IS [email protected]:~/myc$ 
+2

你能澄清你的問題嗎?你的意思是共享內存的「物理地址」? – payne 2011-03-08 17:18:47

+3

沒有足夠的信息。需要更多的細節,例如你的意思(例子可能有幫助),平臺等。 – 2011-03-08 17:19:49

回答

0

傾倒2 MB共享MEM的Linux上。

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

可能必須先在fstab中掛載它。

+0

在C程序中,我得到了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); 程序 - > 2 } – 2011-03-09 01:09:36