【问题标题】:making a shell with C用C做一个shell
【发布时间】:2015-06-23 12:13:25
【问题描述】:

我正在尝试使用 C 作为作业创建一个 shell,但我的 execvp() 不起作用。它不执行 ls。我在虚拟机 lubuntu 32 工作 这是我的输出任何我的错误信息!

if(pid==0){        
       printf("child");                                                                                                            
  char **tokens=tokenizer(hey)//hey is from fgets. tokenizer is fine
printer(tokens);

  //execute ls                                                                                                                                                               
  execvp( ls_args[0], ls_args);

  //only get here if exec failed                                                                                                                                             
  perror("execv failed");

  return 2; //return error status   }

【问题讨论】:

  • 您为什么要向我们隐藏错误消息?这是某种诡计还是恶作剧?很明显是你拥有的信息,那么这部分信息可能有什么好处呢?
  • 它没有显示任何错误消息,它只是打印“子”,我的程序继续工作,直到父进程结束。如果我执行 execlp("ls","ls","-l",NULL);它的工作!
  • ls 在您使用的任何shell 的路径中吗?也许应该改成/bin/ls
  • @user3135218:在这种情况下, execvp 没有失败,因为它永远不会返回。这是ls 的问题。工作目录是空的吗?
  • @kevin 我的源文件在工作目录它不是空的:(

标签: c shell execvp


【解决方案1】:

您的第三个参数 (a[2]) 末尾有一个换行符。 ls 因此抱怨它在您的主目录下找不到以单个换行符命名的目录。修复您的命令解析,使其不包含换行符。

【讨论】:

  • 它对 ls 做同样的事情
  • 请学会更多描述。确切地告诉你你做了什么以及发生了什么。
  • 我改了看看
猜你喜欢
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 2016-12-20
  • 2014-10-11
  • 2012-01-11
  • 2020-10-11
相关资源
最近更新 更多