Michael Uleysky
9 years ago
2 changed files with 98 additions and 0 deletions
@ -0,0 +1,32 @@ |
|||||||
|
SHELL=/bin/bash
|
||||||
|
OPTFLAGS=-O2 -flto -g
|
||||||
|
EXPORTFLAGS=-fvisibility=hidden -fpic -Wl,--export-dynamic
|
||||||
|
CPPFLAGS=-std=gnu++11 -I../include -I/home/michael/tmp/gmt5/include/gmt
|
||||||
|
LIBSFLAGS=-L/home/michael/tmp/gmt5/lib64 -Wl,-rpath /home/michael/tmp/gmt5/lib64 -lgmt -ldl -lpthread $(MODLIBS)
|
||||||
|
WARNFLAGS=-Wall
|
||||||
|
|
||||||
|
CFLAGS=$(OPTFLAGS) $(EXPORTFLAGS) $(WARNFLAGS) $(CPPFLAGS)
|
||||||
|
LDFLAGS=$(OPTFLAGS) $(EXPORTFLAGS) $(WARNFLAGS) $(LIBSFLAGS)
|
||||||
|
|
||||||
|
CC=g++
|
||||||
|
|
||||||
|
SOURCE = $(wildcard *.cpp)
|
||||||
|
DEPENDS = $(subst .cpp,.d,$(SOURCE))
|
||||||
|
OBJECTS = $(subst .cpp,.o,$(SOURCE))
|
||||||
|
|
||||||
|
gmttest: $(OBJECTS) $(MODOBJECTS) |
||||||
|
$(CC) -o $@ $(OBJECTS) $(MODOBJECTS) $(LDFLAGS)
|
||||||
|
|
||||||
|
include $(DEPENDS) |
||||||
|
|
||||||
|
%.o: %.cpp |
||||||
|
$(CC) -c $(CFLAGS) -o $@ $<
|
||||||
|
|
||||||
|
%.d: %.cpp |
||||||
|
$(CC) $(CPPFLAGS) -MM -MT $(subst .cpp,.o,$<) $< | sed 's%\(^.*\):%\1 $@ :%g' >$@
|
||||||
|
|
||||||
|
clean: |
||||||
|
rm -f *.o *.d
|
||||||
|
|
||||||
|
distclean: clean |
||||||
|
rm -f gmttest
|
@ -0,0 +1,66 @@ |
|||||||
|
#include <gmt.h> |
||||||
|
#include <iostream> |
||||||
|
#include <string> |
||||||
|
#include <unistd.h> |
||||||
|
#include <sys/wait.h> |
||||||
|
|
||||||
|
int print_func(FILE* fd, const char* str) |
||||||
|
{ |
||||||
|
std::cout<<"PRINT: "<<str<<std::endl; |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
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]; |
||||||
|
int pipefd[2]; |
||||||
|
std::string out; |
||||||
|
char buffer[4096]; |
||||||
|
pid_t pid; |
||||||
|
|
||||||
|
gmtapi=GMT_Create_Session(text,2,0,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<<io<<" "<<GMT_NOTSET<<" "<<fname<<" "<<ret<<std::endl; |
||||||
|
|
||||||
|
pipe(pipefd); |
||||||
|
pid=fork(); |
||||||
|
if(0==pid) |
||||||
|
{ |
||||||
|
dup2(pipefd[1],1); |
||||||
|
GMT_Call_Module(gmtapi,"psbasemap",GMT_MODULE_OPT,opts); |
||||||
|
exit(0); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
ssize_t br; |
||||||
|
std::string s="CALL\n"; |
||||||
|
// write(1,s.c_str(),s.length());
|
||||||
|
close(pipefd[1]); |
||||||
|
do |
||||||
|
{ |
||||||
|
br=read(pipefd[0],buffer,4096); |
||||||
|
std::cout<<out.max_size()<<" "<<out.capacity()<<" "<<out.size()<<std::endl; |
||||||
|
out.append(buffer,br); |
||||||
|
} while(0!=br); |
||||||
|
wait(0); |
||||||
|
close(pipefd[0]); |
||||||
|
} |
||||||
|
|
||||||
|
out.shrink_to_fit(); |
||||||
|
std::cout<<out.max_size()<<" "<<out.capacity()<<" "<<out.size()<<std::endl; |
||||||
|
|
||||||
|
GMT_Destroy_Options(gmtapi,&opts); |
||||||
|
GMT_Destroy_Session(gmtapi); |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
Loading…
Reference in new issue