2

我一直在使用 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.
4

1 回答 1

0

OP 说他找到了解决方案,尽管他没有说是什么。(这里是评论)

于 2013-06-19T20:53:30.973 回答