我一直在使用 FAT-12 文件系统处理这个操作系统项目。最近我去做了,这样每个命令都在同一个磁盘上运行。为此,我只是在共享内存中添加了一个字符串。但是,从共享内存中提取信息并将其传递到 fopen 后,我收到错误消息“无法打开软盘驱动器或映像”。为了解决这个问题,我已经确保我具有读写权限,并且软盘映像没有因处理 mkdir 和 rmdir 等命令而损坏。我什至尝试撤消使进程共享软盘映像的更改,但问题没有解决。如果您对为什么会发生这种情况有任何想法,我们将不胜感激。
这是我用 fopen 读取软盘映像的地方,而我的调试语句是:
int main(int argc, char* argv[])
{
// unimportant code
// get shared memory
FileInfo_retrieve();
fprintf(stderr, "Current Disk(ls): %s\n", FileInfo_getPointer()->currentDisk);
//FILE_SYSTEM_ID declared as a global variable
FILE_SYSTEM_ID = fopen(FileInfo_getPointer()->currentDisk, "r+");
FileInfo_detach();
if(FILE_SYSTEM_ID == NULL)
{
printf("Could not open the floppy drive or image.\n");
exit(1);
}
// more unimportant code
}
这是存储在共享内存中的结构的定义:
// from the shared memory header
#define MAX_FILE_PATH_SIZE 2048
typedef struct FileInfo_STRUCT
{
char filename[9];
char extension[4];
char cwd[MAX_FILE_PATH_SIZE];
char currentDisk[32];
int FLC;
int TotalEntries;
int TotalAvailableEntries;
} FileInfo;
这是我在运行时声明进入共享内存的所有内容的地方:
// declared in header
bool FileInfo_Init(const char* dirName, const char* currDir, int FLC)
{
if(FileInfo_create())
{
strcpy(FileInfo_getPointer()->fileName, dirName);
strcpy(FileInfo_getPointer()->cwd, currDir);
strcpy(FileInfo_getPointer()->currentDisk, "../floppysInUse/floppy1");
FileInfo_getPointer()->FLC = FLC;
// searches fat table at runtime and finds how much of the disk is available
StartUp();
FileInfo_getPointer()->TotalEntries = total;
FileInfo_getPointer()->TotalAvailableEntries = available;
FileInfo_detach();
return true;
}
return false;
}
这是运行命令后的输出。调试语句和我从打开文件中得到的错误:
Current Disk(ls): ../floppyInUse/floppy1
Could not open the floppy drive or image.