【发布时间】:2014-03-09 01:06:29
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int virtualAddress, pageNo, frameNo, baseAddress, offset, address, checkValue;
unsigned char basket;
printf("Enter Page Number=\n");
scanf(" %d", &virtualAddress);
pageNo=virtualAddress/256;
offset=virtualAddress%256;
frameNo=pageNo;
FILE *fp;
fp=fopen("BACKING_STORE.bin", "rb");
frameNo++;
baseAddress=frameNo*256;
address= baseAddress+offset;
printf("\tByte=%d\n", address);
int returnValue=fseek(fp, address,SEEK_SET);
printf("\treturn value=%d\n", returnValue);
printf("\tCurrent Position=%ld\n", ftell(fp));
checkValue=fread(&basket,sizeof(char), 1,fp);
printf("\tCheckValue=%d\n", checkValue);
printf("\nValue %d=%c ", offset, basket);
printf("\n");
return 0;
}
我正在尝试将虚拟地址映射到物理地址。我有一个大小为 65,536 字节的文件“BACKING_STORE.bin”文件,所以我试图从用户那里获取虚拟地址,找到页码和偏移量,并假设我采用了 'pageNo=frameNo' 我正在尝试从中找到基地址,然后在向其添加偏移量后,我得到要从“BACKING_STORE.bin”读取的字节位置。 但就我而言,即使我的文件指针在文件中的正确位置,fread 也无法正常工作。我的 fread 函数调用返回 0 表示 fread 执行不成功。
【问题讨论】:
-
您还没有正式检查文件是否打开正常,但是如果不是,您可能会崩溃,所以您可以侥幸逃脱。您尚未打印您使用的值:
virtualAddress、pageNo、offset、baseAddress和address的值都可能是相关的。您还没有向我们展示您看到的实际输出:returnValue和ftell(fp)报告的值是多少?我认为您应该测试fseek(fp, 0, SEEK_END),然后测试ftell(),以确保您不会尝试从文件末尾之外读取。显示运行中的所有值会对我们有所帮助。
标签: c