【问题标题】:Weird directory created after executing mkdir after fork in Minix (USER=root)在 Minix (USER=root) 中 fork 后执行 mkdir 后创建的奇怪目录
【发布时间】:2015-08-09 15:09:55
【问题描述】:

我正忙着在 Minix 3.1 上用 C 语言编写一个简单的终端。 touch a.txtdate 等简单命令运行良好。但是当我创建一个诸如mkdir test 之类的目录时,它会创建一个名为USER=root 的目录,而当我尝试创建另一个目录时,它会显示USER=root: already exists。我以 root 身份登录。我在 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,它只是将状态返回给loopShell

【问题讨论】:

  • 环境列表与参数列表混淆了。
  • 不要使用截图来展示你的代码。请改用剪切和粘贴。
  • 我很想从 Minix 复制和粘贴。你知道它是怎么回事
  • 不,我不知道怎么回事。如有必要,将文件复制到可以剪切和粘贴的位置。
  • @RossRidge 对此我很抱歉。只是 Minix 不允许任何形式的挂载,所以我根本无法共享文件,也无法在 minix 本身之外复制和粘贴。

标签: c terminal minix


【解决方案1】:

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

static char *tokens[SPLIT_SIZE];

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

【讨论】:

  • 谢谢。我会试试这个。再次抱歉不得不截取我的代码。我刚开始使用 Minix,还没有启用任何驱动程序或任何东西。非常感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-13
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
相关资源
最近更新 更多