在 Minix 中 fork 后执行 mkdir 后创建的奇怪目录 (USER=root)

Weird directory created after executing mkdir after fork in Minix (USER=root)

我正忙着在 Minix 3.1 上用 C 编写一个简单的终端。 touch a.txtdate 等简单命令运行良好。但是当我创建一个目录如 mkdir test 时,它会创建一个名为 USER=root 的目录,而当我尝试创建另一个目录时,它会显示 USER=root: already exists。我以根用户身份登录。我在 C 中使用 execvp() 来执行终端命令。

ls 给我这个:

(null): HOME=/root: No such file or directory
(null): PAGER=more: No such file or directory
(null): LOGNAME=root: No such file or directory
(null): TERM=minix: No such file or directory
(null): PATH=/root/bin:/usr/local/bin:/vin:/usr/bin: No such file or directory
(null): SHELL=/bin/sh: No such file or directory
(null): TZ=GMT0: No such file or directory
(null): EDITOR=vi: No such file or directory
USER=root:

有谁知道这实际上意味着什么以及我该如何解决这个问题。我已经尝试了我在代码中能想到的所有方法来尝试解决这个问题,但没有任何效果。

感谢您的帮助

我正在从另一个函数调用 executeCommand,它只是 returns loopShell

的状态

您错误地创建了 execvp 的参数列表。您正在返回一个分配在堆栈上的数组(一个具有自动存储持续时间的数组)。一旦创建它的函数 returns 数组未分配并且指向它的指针不再有效。一个简单的快速修复方法是使数组 static 保持分配在函数 returns 之后。例如:

static char *tokens[SPLIT_SIZE];

您程序中的另一个错误是试图在未分配给 malloccallocrealloc 的对象上使用 free