在c程序中打印相同的物理地址

时间:2011-03-13 17:32:53

标签: c shared-memory memory-address

是否有办法在这些程序中打印相同的物理地址(使用共享内存概念时)而不是打印不同的逻辑地址?

我打印相同物理地址的原因:...

/ *这是可选的,因为我提供了许多不属于核心的信息* /

在我的实验室中,我有两个程序:一个通过共享内存概念将字符串存储在物理内存中,另一个通过访问共享内存来打印相同的字符串。

计划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);
}

计划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);
}

输出:

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 helloworld
tamil@ubuntu:~/myc$ cc shmget2.c
tamil@ubuntu:~/myc$ ./a.out

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

这些程序正在打印2个不同的逻辑地址。但是(为了满足大学教授)是否有办法打印相同的物理地址?请帮忙..

1 个答案:

答案 0 :(得分:2)

  • 你的程序很可能已经完全按照教授的要求去做。
  • 您完全不了解物理地址与虚拟地址的概念。在任何使用虚拟内存的操作系统上,常规应用程序(与操作系统本身相反)根本无法知道任何物理地址。