在 Minix 中 fork 后执行 mkdir 后创建的奇怪目录 (USER=root)
Weird directory created after executing mkdir after fork in Minix (USER=root)
我正忙着在 Minix 3.1 上用 C 编写一个简单的终端。 touch a.txt
或 date
等简单命令运行良好。但是当我创建一个目录如 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];
您程序中的另一个错误是试图在未分配给 malloc
、calloc
或 realloc
的对象上使用 free
。
我正忙着在 Minix 3.1 上用 C 编写一个简单的终端。 touch a.txt
或 date
等简单命令运行良好。但是当我创建一个目录如 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];
您程序中的另一个错误是试图在未分配给 malloc
、calloc
或 realloc
的对象上使用 free
。