【发布时间】: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 *)NULL是char *类型的表达式,NULL是实现定义类型的表达式,没有人知道它在可变参数函数中是如何工作的。
标签: c linux operating-system system-calls