[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: libapl stdout
From: |
Chris Moller |
Subject: |
Re: libapl stdout |
Date: |
Fri, 27 Jan 2023 11:23:08 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 |
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 used
interactively that did not occur with *stderr*).
Best Regads,
Jürgen
On 1/15/23 12:19 AM, enztec@gmx.com wrote:
Hi
I'm still trying to resolve the failure of fpc using libapl to
get it's stdout
trying to get libapl stdout to be gotten in my libapl/fpc
program i read the
https://gist.github.com/houmei/cfd9e570b8de4d8fd55ada228d5ff004#file-readme-2-configure
thinking 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
- libapl stdout, enztec, 2023/01/14
- Re: libapl stdout, Elias Mårtenson, 2023/01/14
- Re: libapl stdout, Dr . Jürgen Sauermann, 2023/01/27
- Re: libapl stdout,
Chris Moller <=
- Re: libapl stdout, enztec, 2023/01/27
- Re: libapl stdout, Chris Moller, 2023/01/27
- Re: libapl stdout, enztec, 2023/01/27
- Re: libapl stdout, Chris Moller, 2023/01/27
- Re: libapl stdout, enztec, 2023/01/27
- Re: libapl stdout, Chris Moller, 2023/01/27
Re: libapl stdout, enztec, 2023/01/27