编辑发现我的问题。我没有意识到fseek的origin参数的唯一允许值是SEEK_SET SEEK_CUR和SEEK_END,所以我把我的调用改为fseek(diskPointer,startOfData,SEEK_SET);
我有一个文件打开以便以二进制模式读写,所以我在文件上使用fseek,fread和fwrite。在我整个代码调用fwrite之前,我使用fseek将文件指针设置到正确的位置,但似乎fseek失败并返回非零值。 fseek失败的原因是什么?
这是我的功能,应该写'值'到文件。正在写入值,但是在文件的开头而不是我希望fseek让我去的位置。 ' startOfData'是一个常数,表示我试图写入的部门。
int writeToData(int position, char *value){
if(!fseek(diskPointer, 0, startOfData)){
if (fwrite(value, sizeof(value), 1, diskPointer) != 1) {
return 0;
}
return 1;
}
return 0;
}
这是main(上面的writeToData函数由下面的createroot函数调用):
#define startOfData 405504
int main(int argc, char *argv[]){
char *filepath;
int clearDisk;
if (argc != 3) {
printf("Usage: ./a.out [filepath of virtual disk] [0 to clear disk before use, any other number otherwise]\n");
}
else {
filepath = argv[1];
clearDisk = atoi(argv[2]);
}
//The virtual disk is opened for reading and writing
diskPointer = fopen(filepath, "r+b");
if (diskPointer != NULL)
{
if (clearDisk == 0) {
initializeDisk();
createRoot();
}
}
else
{
printf("Error preparing virtual disk; terminating program.\n");
return(1);
}
我的初始化磁盘功能:
//5MB disk
void initializeDisk(){
int i;
char *buffer = "0";
for (i = 0; i < 5000000; i++) {
fwrite(buffer, 1, 1, diskPointer);
}
rewind(diskPointer);
}