使用execl命令

时间:2014-05-02 22:04:18

标签: c linux signals

我试图了解execl命令的各个部分。我是c语言编程的新手,对linux不太熟悉。有人告诉我使用这个命令执行几个语句,而且我认为大多数情况下我理解它。

execl(location here, followed by arguments, terminated by a null pointer)

我的任务是使用此命令执行以下操作:

  • 进程状态树ps --forest

    execl("/bin/ps", "ps", "--forest", (char*) NULL);此作品

  • 日期和时间,日期

    execl("/bin/date", "date", 0, (char*) NULL);这有效。

  • '财富'命令

    execl("/usr/bin/fortune", "fortune", (char*) NULL);这不起作用。

    execl("/bin/fortune", "fortune", (char*) NULL);这不起作用。

fortune命令的主要问题是我错过了一个参数,或者我的位置错误。我假设它是位置,因为我可以用" fortune"来执行它。在命令行中。我已经搜索了正确的位置,但无法找到它。

编辑:感谢ojblass,位置已经过验证' / usr / bin / fortune',这意味着我的参数必须是错误的。

  • 长目录列表代码

    execl("/usr/bin/find", "find", "/", "-name", "date", "-maxdepth", "3", "2>", "/dev/null", (char *)NULL);这不起作用。

修改:更改为: execl("/usr/bin/find", "find", "/", "-name", "date", "-maxdepth", "3", "2>/dev/null", (char *)NULL);

这应该从根目录中找到最大深度为3的具有给定名称的文件,然后将所有错误消息发送到/ dev / null。我对这个命令很失落。

  • 安装信号处理程序的代码,作为用于捕获信号的代码。

对于这个,我不知道如何接近,但我知道我需要接受他们给出的论点,然后将其传递给我创建的处理程序。如下所示:

`execl("/bin/I don't know this part maybe 'signal'?",cmd[1], (char*) NULL);`

然后将其传递给signal(cmd[1], sighandler);

写完帖子之后,我说我主要挣扎的部分是理解命令而不是使用execl()。

如果你能纠正我搞砸的任何地方,或者给出命令的解释,那将非常感激!

谢谢!

编辑:解决方案已发布在评论中。

2 个答案:

答案 0 :(得分:3)

尝试使用execlp,它在PATH环境变量指定的目录中搜索可执行文件:

execlp("fortune","fortune",(char*)NULL);

execlp的第一个参数是可执行文件的名称。其余的是传递给char * argv []的参数,由NULL指针终止(其中第一个是程序的名称)。

答案 1 :(得分:1)

回顾一下:

  • 流程状态树

    execl(" / bin / ps"," ps"," - forest",(char *)NULL);

  • 日期和时间

    execl(" / bin / date"," date",0,(char *)NULL);

  • "财富"命令

    execl(" / usr / bin / fortune"," fortune",(char *)NULL);

事实证明,我正在解析F' F' F' F'在我的shell中不正确。这确实有效。

  • 长目录列表代码

    if(strlen(cmd)> 2)     {      CMD [strlen的(CMD)-1] =' \ 0&#39 ;;      execl(" / bin / ls"," ls"," -l",(char *)& cmd [2],(char *)NULL) ;     } 其他      execl(" / bin / ls"," ls"," -l",(char *)NULL);

  • 基于int

    安装信号处理程序的代码

    signum = atoi((char *)& cmd [1]);

    信号(正负号,sighandler);