执行多个"programs"
execlp multiple "programs"
我想运行类似的程序
cat file.tar | base64 | myprogram -c "| base64 -d | tar -zvt "
我使用execlp
来运行进程。
当我尝试运行类似cat
的程序时,它是有效的,但如果我尝试运行base64 -d | tar -zvt
,它就不起作用。
我查看了bash命令,发现我可以运行bash并告诉他运行其他程序。所以它有点像:
execlp ("bash", "-c", "base64 -d | tar -zvt", NULL);
如果我在终端上运行它,它工作得很好,但使用execlp
它不工作。如果我使用execlp("cat", "cat", NULL)
,它会起作用。
有人知道如何在execlp上使用-c
参数来执行多个"程序"?我不能使用系统,因为我使用管道和叉子。
现在我注意到,如果我尝试使用execlp("bash"、"bash"、"-c"、"base64"、NULL)。。。什么也没发生。如果我使用execlp("cat",NULL),那没关系。。我正在给stdin写信。。。我不知道bash-c base64是否有问题。因为如果我在终端echo"asd"|bash-c"cat"上运行运行良好
第一个"参数"是argv[0]
,因此您应该使用以下内容进行调用:
execlp("bash", "bash", "-c", "base64 -d | tar -zvt", NULL);
编辑以上函数的作用的一个小解释:exec
函数族执行程序。在上面的调用中,有问题的程序是"bash"(第一个参数)。Bash和所有其他程序一样,有一个main
函数,它是程序的起点。和所有其他main
函数一样,Bash中的一个函数接收两个参数,通常称为argc
和argv
。argv
是以零结尾的字符串的数组,argc
是argv
数组中的条目数。argc
将始终至少为1,这意味着在argv[0]
处始终存在一个条目。第一个条目是程序的"名称",通常是程序文件的路径。命令行上的所有其他程序参数都被放入argv[1]
到argv[argc - 1]
中。
execlp
所做的是使用第一个参数来查找要执行的程序,所有其他参数将按照给定的顺序放入程序argv
数组中。这意味着上面对execlp
的调用将调用程序"bash",并将bash的argv
数组设置为:
argv[0] = "bash"
argv[1] = "-c"
argv[2] = "base64 -d | tar -zvt"
此外,Bash的argc
将被设置为3。
如果第二个"bash"
被改变为"foo"
,那么Bash的argv[0]
也将被设置为"foo"
。
我希望这能稍微澄清一下。
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- C++,系统无法执行指定的程序
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 如何确认我的constexpr表达式实际上已经在编译时执行
- C++17中的并行执行策略
- QML按钮点击功能执行顺序
- 程序在执行程序的其余部分之前退出
- 为什么catch中的代码没有被执行
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 将执行、作业和WinAPI相乘
- 对字符数组中的元素执行逐位操作
- 为什么g++在未执行的代码处标记强制转换错误
- 执行多个"programs"