¿Cómo redirecciono? "sistema" llamar a la salida?

programación


El fragmento adjunto funciona y se “imprime” en la “consola” de QtCreator.
Necesito redirigir su salida según sea necesario… por ahora al “resultado”…

COBOL
int RESULT = system(" echo q  | sudo -S hcitool info 98:D3:31:F8:39:33 ") ;
                          if(RESULT == 0)
                          {
                              text = " SUCCESS ";
                              text += "Elapsed time ";
                              text += QString::number(QET->elapsed());
                              text += "  mS ";
                              ui->textEdit->append(text);
                              qDebug() << text;
                              ui->textEdit->append(result);
                              qDebug() << result;
                          }

Lo que he probado:

C++
int RESULT = system(" echo q  | sudo -S hcitool info 98:D3:31:F8:39:33  > result") ;

Redirigir de esta manera detuvo la salida de la consola y no hay valor en “resultado”.

Agregar “| > resultado ” no ayudó/

Solución 1

No utilices el sistema(). Utilice popen() : popen(3) – página del manual de Linux[^]

Alternativamente, QProcess debería hacer lo que quieras.
o impulsar::proceso() : Capítulo 28. Impulso.Proceso – 1.84.0[^]

Solución 2

Para agregar a lo que dijo k5054, la razón por la que agregar “> resultado” no funcionó es que llamar system inicia un proceso que es externo a su aplicación, por lo que no tiene acceso a su memoria. El hecho de que el nombre “resultado” sea el mismo que una variable en su aplicación no significa que el nuevo proceso pueda modificar su aplicación de alguna manera.
Lo que hace al agregarlo es decirle al nuevo proceso que redirija el flujo de salida estándar a un archivo llamado “resultado” en el directorio de trabajo actual, razón por la cual “detuvo la salida desde la consola” pero no pudo ver los resultados. Podrías haber leído el archivo para acceder a él, pero entonces tendrías que saber cuándo finalizó el proceso, ya que el archivo no será legible hasta entonces.

コメント

タイトルとURLをコピーしました