For what it's worth, in an ongoing project in use: #include <QtWidgets>
#include <iostream> #include <sstream> #include <apl/libapl.h> #include "aplexec.h" LIBAPL_error AplExec::aplExec (apl_op_e apl_op, QString &cmd, QString &outString, QString &errString) { LIBAPL_error execerr = LAE_NO_ERROR; switch(apl_op) { case APL_OP_EXEC: { std::stringstream outbuffer; std::streambuf *coutbuf = std::cout.rdbuf(); std::cout.rdbuf(outbuffer.rdbuf()); std::stringstream errbuffer; std::streambuf *cerrbuf = std::cerr.rdbuf(); std::cerr.rdbuf(errbuffer.rdbuf()); execerr = apl_exec (cmd.toStdString ().c_str ()); std::cout.rdbuf(coutbuf); std::cerr.rdbuf(cerrbuf); outString = QString (outbuffer.str ().c_str ()); errString = QString (errbuffer.str ().c_str ()); } break; case APL_OP_COMMAND: { std::stringstream errbuffer; std::streambuf *cerrbuf = std::cerr.rdbuf(); std::cerr.rdbuf(errbuffer.rdbuf()); const char *res = apl_command (cmd.toStdString ().c_str ()); if (res) { outString = QString (res); free ((void *)res); } std::cerr.rdbuf(cerrbuf); errString = QString (errbuffer.str ().c_str ()); } break; } return execerr; } I.e., I'm capturing stdout and stderr in strings. On 1/27/23 10:18, Dr. Jürgen Sauermann wrote:
Hi enztec,not sure if this helps, but if I remember correctly (I may not) then the main GNU APL output goes to *stderr* (fd 2) and not to *stdout* (fd 1). The reason is somewhat historic because *stdout* is buffered by default while *stderr* is not (which caused some issues with *stdout* when usedinteractively that did not occur with *stderr*). Best Regads, Jürgen On 1/15/23 12:19 AM, enz...@gmx.com wrote:HiI'm still trying to resolve the failure of fpc using libapl to get it's stdouttrying to get libapl stdout to be gotten in my libapl/fpc program i read the https://gist.github.com/houmei/cfd9e570b8de4d8fd55ada228d5ff004#file-readme-2-configurethinking fpc might be using a different stdout then the libapl does from this line 'but because the executable that is linked with libapl.so) has its own I/O channels.'and re-compiled libapl with --with-android and then compiling my program i get get : /usr/local/lib/apl/libapl.so: undefined reference to `CIN' /usr/local/lib/apl/libapl.so: undefined reference to `UERR' /usr/local/lib/apl/libapl.so: undefined reference to `COUT' /usr/local/lib/apl/libapl.so: undefined reference to `CERR' is this suppose to happen ? i get same error when compiling my libaplo.c program how to set these in the c program?
OpenPGP_0xDA6C01938888083E.asc
Description: OpenPGP public key
OpenPGP_signature
Description: OpenPGP digital signature