#include #include #include #include #include int print_func(FILE* fd, const char* str) { std::cout<<"PRINT: "<(x)->ret=ret; close(reinterpret_cast(x)->fd); pthread_exit(&(reinterpret_cast(x)->ret)); } void* gmtworkthread(void* x) { struct gmtworkthreadpars* p=reinterpret_cast(x); on_exit(gmtonexithandler,x); GMT_Append_Option(p->api,GMT_Make_Option(p->api,'>',const_cast(("/dev/fd/"+std::to_string(p->fd)).c_str())),p->opts); p->ret=GMT_Call_Module(p->api,p->module,GMT_MODULE_OPT,p->opts); exit(p->ret); return 0; } int callgmtmodule(void *api, const char *module, struct GMT_OPTION *opts, std::string& res) { int pipefd[2]; ssize_t br; char buffer[4096]; pthread_t wthr; struct gmtworkthreadpars p; int *pret; pipe(pipefd); p.api=api; p.module=module; p.opts=opts; p.fd=pipefd[1]; pthread_create(&wthr,0,&gmtworkthread,&p); res.erase(); //read(pipefd[0],buffer,1); //close(pipefd[1]); do { br=read(pipefd[0],buffer,4096); std::cout<(&pret)); return *pret; } int main() { char* text="GMT"; //void* out; void* gmtapi; std::string args="-R130/160/40/60 -JM12c -Xa2c -Ya2c -B5/5/swNE --GMT_HISTORY=f --FONT_ANNOT_PRIMARY=14p,Times-Bold,red"; struct GMT_OPTION* opts; int io,ret; char fname[16]; std::string out; gmtapi=GMT_Create_Session(text,2,3,print_func); io=GMT_Register_IO(gmtapi,GMT_IS_TEXTSET,GMT_IS_DUPLICATE,GMT_IS_NONE,GMT_OUT,0,0); GMT_Encode_ID(gmtapi,fname,io); opts=GMT_Create_Options(gmtapi,0,(void*)args.c_str()); //ret=GMT_Init_IO(gmtapi,GMT_IS_TEXTSET,GMT_IS_NONE,GMT_OUT,5,0,opts); std::cout<