过去五个小时我一直忙于解决这个问题,所以我希望有人能帮助我。在我的 C++ 程序(我在 lubuntu 上的 QTcreator 中开发)中,我想在我的程序的子进程中运行 airodump-ng。airodump-ng 的输出应定向到父进程的 STDOUT。这适用于许多其他程序,但奇怪的是不适用于 airodump-ng。控制台中根本没有输出。这或者我的 Linux 崩溃,我被注销,当我重新登录时,我的所有程序都关闭了。有人知道为什么吗?
#include <QCoreApplication>
#include <unistd.h>
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <sys/wait.h>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//execl("/usr/sbin/airodump-ng", "airodump-ng", (char*)0 );
//dup2(1, 2); //pipe stderr to stdout
pid_t pidAirodump;
pid_t pidAircrack;
int pip[2];
if (pipe(pip) < 0) {
perror("allocating pipe for child input redirect");
return -1;
}
pidAirodump = fork();
if(pidAirodump > 0)//parent
{
pidAircrack = fork();
if(pidAircrack == 0)//pidAircrack
{
close(pip[0]);
dup2(pip[1], 2);
cout << "test" << endl;
//execl("/usr/sbin/arp", "arp", (char*)0 );
execl("/usr/sbin/airodump-ng", "airodump-ng ", "mon0", (char*)0 );
exit(0);
}
}
else//pidAirodump
{
exit(0);
}
wait(NULL);
return a.exec();
}