mmap返回0后从虚拟内存中读取数据

时间:2015-01-21 06:38:51

标签: c linux mmap

我正在从分配的共享内存中读取数据。 我通过访问mmap()给出的虚拟地址成功获取数据。 不幸的是,检索到的一些数据返回0,其余数据正确

#define MEMORY_A (0x3F050000)
#define MAP_SIZE 1024UL
#define MAP_MASK (MAP_SIZE - 1)


int main()
{

 int32_t *mapped_baseA, *mapped_dev_baseA;
 off_t target_A=MEMORY_A; 
 int   memfdA;
 int32_t fdA;


    /* A */

    memfdA = open("/dev/mem", O_RDWR | O_SYNC);
if (memfdA == -1) 
{
         printf("Can't open /dev/mem.\n");
         exit(0);
}

mapped_baseA = (int32_t *) mmap(0, SIZEBUFFER*sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED, memfdA, target_A & ~ MAP_MASK_VECTOR);

mapped_dev_baseA = (mapped_baseA + (target_A & MAP_MASK));


for(i=0 ,nMemAdd=0; i < SIZEBUFFER;i++)
{
     fdA=(int32_t*)mapped_dev_baseA[i];
     printf("\n\nA: %ld ",fdA);
}

 fclose(fp);
  close (memfdA);

 munmap(mapped_baseA,MAP_SIZE);

 return 0;

}

结果

A: -3769313     ncounter: 933
A: -3746454     ncounter: 934
A: -3723030     ncounter: 935
A: 0            ncounter: 936
A: 0            ncounter: 937
A: 0            ncounter: 938
A: 0            ncounter: 939
A: 0            ncounter: 940
A: 0            ncounter: 941
A: 0            ncounter: 942
A: 0            ncounter: 943
A: -3487436     ncounter: 944
A: -3458578     ncounter: 945
A: -3429199     ncounter: 946
A: -3399303     ncounter: 947
A: -3368896     ncounter: 948
A: -3337981     ncounter: 949
A: -3306564     ncounter: 950
A: -3274649     ncounter: 951

我得到的数据的可能原因是0?

0 个答案:

没有答案