用 C 编写的 UEFI 二进制文件在 UEFI 中运行时不会选择文本文件
Posted
技术标签:
【中文标题】用 C 编写的 UEFI 二进制文件在 UEFI 中运行时不会选择文本文件【英文标题】:UEFI binary written in C not picking text file while running in UEFI 【发布时间】:2021-12-21 20:18:27 【问题描述】:我有以下代码。 efi 二进制文件和 new.txt 放置在同一位置。但看起来 fopen 没有捕获位于同一目录中的文本文件。可能是什么原因?
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <string.h>
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 < 7; i++)
printf("%d \n", i);
return 0;
我得到的输出: 不正确 0 1 2 3 4 5 6
我期待的输出: 正确的方法 0 1 2 3 4 5 6
【问题讨论】:
不清楚这段代码与 UEFI 的关系。您能否显示确切的预期结果与实际结果? 当前输出:不正确 0 1 2 3 4 5 6,我期望的是:正确的方法 0 1 2 3 4 5 6 我只是检查 fopen 是否正在选择文本文件,但在 UEFI shell 中运行时它没有选择。 我相信fopen
。工作目录可能不是你想象的那样。如果在 posix 系统上,则调用 getcwd
以确认当前工作目录。
这些不是 UEFI 接口 - 您使用什么框架来构建代码?
【参考方案1】:
我假设您将 edk2 与 edk2-libc 一起使用。
确保将“DevShell”添加到应用程序 .inf 文件的“[LibraryClasses]”部分。
如果您尝试在没有 UEFI shell 的情况下运行程序,fopen 将失败。
【讨论】:
以上是关于用 C 编写的 UEFI 二进制文件在 UEFI 中运行时不会选择文本文件的主要内容,如果未能解决你的问题,请参考以下文章
UEFI 实战 HelloWorld 之一 helloworld及.inf文件