【问题标题】:Printing the physical address space of shared memory打印共享内存的物理地址空间
【发布时间】:2011-03-08 17:17:49
【问题描述】:

在 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:
    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$ 

【问题讨论】:

  • 你能澄清你的问题吗?你的意思是共享内存的“物理地址”吗?
  • 信息不足。需要更多详细信息,例如您的意思(示例可能会有所帮助)、平台等。

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


【解决方案1】:

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

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

可能必须先在 fstab 中挂载它。

【讨论】:

  • 在 C 程序中,我有 2 个程序,一个用于将字符串存储在共享内存中,另一个程序是通过访问共享内存来打印相同的字符串。程序 1:--> printf("\ n 发件人地址"); printf("\n地址是 %p",addr1); printf("\n输入信息:"); scanf("%s",addr1); printf("\n存储在 %p 中的消息是 %s",addr1,addr1);程序-->2 }
猜你喜欢
  • 1970-01-01
  • 2012-06-11
  • 2017-12-08
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多