Weil mir das zu dumm war, immer mit QProcess was zu basteln, nur im den Output von einem Befehl zu bekommen, hab ich mal eine Funktion gebaut, die das alles ohne QProcess macht. Es geht noch nicht 100%ig, es werden nach dem Pfad von KDE (Beispiel) immer noch andere Zeichen angezegt. Außerdem ist der Output auf 4 kb beschränkt
Code:
#include <qapplication.h>
#include <qlineedit.h>
#include <qstring.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#define MAXL 4096
#define ERROR -1
QString getProcOutput(QString path, QString arg0, QString arg1)
{
int fd[2];
pid_t pid;
FILE* pipe_reader;
char buffer[MAXL];
if(pipe(fd) == ERROR)
return QString();
if((pid=fork()) == ERROR)
return QString();
switch(pid)
{
case -1:
return QString();
break;
case 0:
close(fd[0]);
if(fd[1] != STDOUT_FILENO)
{
if(dup2(fd[1], STDOUT_FILENO) != STDOUT_FILENO)
return QString();
close(fd[1]);
}
if(execl(path.latin1(), arg0.latin1(), arg1.latin1(), NULL) == ERROR)
return QString();
break;
default:
sleep(1);
close(fd[1]);
if((pipe_reader = fdopen(fd[0], "r")) == NULL)
return QString();
fread(&buffer, MAXL, 1, pipe_reader);
fclose(pipe_reader);
printf("path = %s", buffer);
if(waitpid(pid,NULL,0) == ERROR)
return QString();
break;
}
return QString(buffer);
}
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QLineEdit edit(0);
app.setMainWidget(&edit);
edit.show();
edit.setText(getProcOutput("/usr/bin/kde-config", "kde-config", "--prefix"));
return app.exec();
}
Lesezeichen