Двоичный файл UEFI, написанный на C, не выбирает текстовый файл во время работы в UEFI

#c #text #binaryfiles #uefi

Вопрос:

У меня есть приведенный ниже код. Двоичный файл efi и new.txt размещается в том же месте. Но похоже, что fopen не улавливает текстовый файл, расположенный в том же каталоге. В чем может быть причина?

 #include lt;stdio.hgt; #include lt;string.hgt; #include lt;sys/stat.hgt; #include lt;string.hgt;   int main(int argc, char** argv) {  FILE* filePointer;  const char* filename = "new.txt";  int wordExist = 0;  const int bufferLength = 255;  char search[100];  char line[bufferLength];  filePointer = fopen(filename, "r");  if (filePointer != NULL) {  printf("correct method n ");  }  else {  printf("not correct n");  }  for (int i = 0; i lt; 7; i  ) {  printf("%d n", i);  }  return 0; }  

Вывод, который я получаю : неверно 0 1 2 3 4 5 6

Результат, который я ожидаю: Правильный метод 0 1 2 3 4 5 6

Комментарии:

1. Неясно, как этот код связан с UEFI. Не могли бы вы, пожалуйста, показать точный ожидаемый результат по сравнению с фактическим результатом?

2. вывод в настоящее время: неверно 0 1 2 3 4 5 6 , что я ожидаю : правильный метод 0 1 2 3 4 5 6

3. Я просто проверяю, выбирает ли fopen текстовый файл или нет, но он не выбирает при запуске в оболочке UEFI.

4. Я бы доверился fopen . Рабочий каталог может быть не таким, как вы думаете. Если в системе posix, то позвоните getcwd , чтобы подтвердить текущий рабочий каталог.

5. Это не интерфейсы UEFI — какую платформу вы используете для создания кода?

Ответ №1:

Я предполагаю, что вы используете edk2 с edk2-libc.

Обязательно добавьте «DevShell» в раздел «[Библиотечные классы]» в файле applications .inf.

Если вы пытаетесь запустить программу без оболочки UEFI, функция fopen завершится ошибкой.