我试图了解 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);`
Run Code Online (Sandbox Code Playgroud)
然后传入 signal(cmd[1], sighandler);
写完这篇文章后,我会说我主要努力的部分是理解命令而不是 execl() 的使用。
如果您可以纠正我搞砸的任何地方,或者对命令进行解释,那将不胜感激!
谢谢!
编辑:解决方案已发布在评论中。
小智 3
尝试改用 execlp,它会在 PATH 环境变量指定的目录中搜索可执行文件:
execlp("fortune","fortune",(char*)NULL);
Run Code Online (Sandbox Code Playgroud)
execlp 的第一个参数是可执行文件的名称。其余的是传递给 char *argv[] 的参数,以 NULL 指针终止(第一个是程序的名称)。