私は、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.