0

编辑发现我的问题。我没有意识到 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);
}
4

0 回答 0