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 に答える