【问题标题】:run linux command using execlp with more than one argument as string in c使用带有多个参数的execlp运行linux命令作为c中的字符串
【发布时间】:2023-04-11 02:21:04
【问题描述】:

我正在尝试在 C 中使用带有多个参数的系统调用来运行 ls,例如 -l -a。参数及其数量根据用户输入而变化。输入连接“-l”+“-a”==“-l -a”。我使用的代码是:

execlp("ls","ls",arguments,NULL) //arguments = "-l -a"

用户输入来自终端:

-l
-a

【问题讨论】:

  • 参数需要一一传递。否则它被解释为一个 single 参数。因此,如果arguments 字符串是某种输入,那么您需要将其拆分。而且不可能(真的)使用execlp,而是使用execvp,在其中传递一个字符串的array(由空指针终止)。
  • @Someprogrammerdude 我认为您可以将其发布为答案,因为使用 execvp 正是正确的解决方案。
  • 顺便说一句,NULL 是错误的,它必须(char *)NULL。 (甚至 Linux 手册页都清楚地说明了这一点)。
  • @AnttiHaapala (char *)NULL 和 NULLL 有什么区别
  • @KarinaK (char *)NULLchar * 类型的表达式,NULL 是实现定义类型的表达式,没有人知道它在可变参数函数中是如何工作的。

标签: c linux operating-system system-calls


【解决方案1】:

如果你想执行多个参数,那么你应该使用execvp()而不是execlp

#include<stdio.h>
#include <unistd.h>
int main(int argc,char *argv[])
{

        execvp(argv[1],argv+1);// argv+1 means whatever arguements after argv[1] it will take & executes it 
        return 0;
}

例如你的输入是这样的

xyz@xyz-PC:~$ ./a.out ps -el

希望对你有帮助。

【讨论】:

  • execvp(argv[2],argv+1);这里 argv[2] 是 ls as argv 和 argv+1 是 -l 但我没有得到任何输出到终端。我从 argv[2] 开始,因为 argv[1] 用于程序的另一端
  • @KarinaK 那么你为 argv[1] 提供了什么?
  • 用于程序前一部分中的计数器。例如输入是 ./a.out used_argument ls -l
  • 好的,那么你可以按照你的建议使用,但首先你需要做增量 argv。你想同时执行“used_arguement”和“ls -l”吗?
  • @KarinaK 你有吗?什么是“used_argument”,是“ls”的另一个参数吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 2019-02-20
  • 2021-08-19
  • 2012-09-16
  • 1970-01-01
相关资源
最近更新 更多