我试图了解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()。
如果你能纠正我搞砸的任何地方,或者给出命令的解释,那将非常感激!
谢谢!
编辑:解决方案已发布在评论中。
答案 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);