无法使用字符串中的命令使用 execlp() 执行二进制文件
cannot execute binary file using execlp() with command in a string
我试图在包含字符串的C++程序中执行命令并将其输出到另一个字符串,但我认为我在execl()上做错了什么,这是我的代码:
void execAndSend(std::string command){
int fds[2];
char buffer[1000];
int res = pipe(fds);
if (res < 0) {
std::cerr << "pipe() error" << std::endl;
exit(3);
}
pid_t pid = fork();
if (pid == 0) {
close(fds[0]);
dup2(fds[1], 1);
execl("/bin/bash", "-c", command.c_str(), NULL);
}
else if (pid > 0) {
close(fds[1]);
read(fds[0], buffer, sizeof(buffer));
std::cout << "Command: '"<< buffer << std::endl;
wait(NULL);
}
else {
std::cerr << "error in fork()" << std::endl;
exit(4);
}
exit(0);
}
当我运行它时,我得到如下内容:/bin/ls:/bin/ls: 无法执行二进制文件
我希望能够使用所有命令选项、管道、重定向等。我该怎么做?
您缺少要execl
的参数。第一个参数是要运行的程序,其余参数是要进入argv
的参数,但您省略了包含程序名称的 argv[0]
的值。所以它应该是:
execl("/bin/bash", "bash", "-c", command.c_str(), NULL);
您的调用argv[0] = "-c"
,因此bash
没有将-c
视为选项,并将command
视为要运行的脚本的名称。
相关文章:
- 在执行其他功能的同时播放动画(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++在未执行的代码处标记强制转换错误
- 无法使用字符串中的命令使用 execlp() 执行二进制文件