/********************************************************************** * * os_process.cpp -- * Copyright (C) 2010 The New Zealand Digital Library Project * * A component of the Greenstone digital library software * from the New Zealand Digital Library Project at the * University of Waikato, New Zealand. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *********************************************************************/ #include "os_process.h" osprocess::osprocess(char* cmdline, OSProcessPipeMode mode) : mode_(mode) {} osprocess::~osprocess() { } bool osprocess::close() { // close any file handles that are still open bool write_close_rv = close_write_pipe(withoutWarning); bool read_close_rv = close_read_pipe(withoutWarning); return (write_close_rv && read_close_rv); } #if 1 #include "os_process_windows.h" #include "os_process_unix.h" #include using namespace std; void test_uni_write_pipe() { #ifdef __WIN32__ char* prog_name = "c:\\Windows\\system32\\java.exe"; char* cmd_line = "java"; //char* input_line = "echo hi there\n"; //char* prog_name = "c:\\cygwin\\bin\\cat.exe"; //char* cmd_line = "cat"; #else char* cmd_line = "/usr/bin/java"; //char* cmd_line = "java"; #endif #ifdef __WIN32__ osprocesswindows* process = new osprocesswindows(cmd_line,uniRead); #else osprocessunix* process = new osprocessunix(cmd_line,uniRead); #endif const int BufferSize = 1024; char buffer[BufferSize]; int bytes_read = 0; do { bytes_read = process->read(buffer,BufferSize); if (bytes_read>0) { fwrite(buffer,1,bytes_read,stdout); } } while (bytes_read==BufferSize); delete process; } int main() { printf("Content-type: text/html\n\n"); printf( "\n"); printf( " \n"); printf( " Testing\n"); printf( " \n"); printf( " \n"); test_uni_write_pipe(); printf( " \n"); printf( "\n"); return 0; } #endif