- Timestamp:
- 2010-05-27T23:56:02+12:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/runtime-src/src/recpt/os_process.cpp
r22187 r22188 46 46 47 47 48 49 50 #if 051 52 #include "os_process_windows.h"53 #include "os_process_unix.h"54 #include <iostream>55 using namespace std;56 57 58 59 void test_uni_write_pipe()60 {61 #ifdef __WIN32__62 char* prog_name = "type";63 char* argv[] = { "type", NULL } ;64 65 #else66 char* prog_name = "tr";67 char* argv[] = { "tr", "[A-Z]", "[a-z]", NULL };68 #endif69 70 cout << "<hr>" << endl;71 cout << "<p>Unidirectional Write Test" << endl;72 cout << "<p> Converts uppercase letters to lowercase" << endl;73 cout << "<p> These are then sent to whereever the stdout of the child process goes" << endl;74 cout << "<p>" << endl;75 76 #ifdef __WIN32__77 osprocesswindows* process = new osprocesswindows(uniWrite,prog_name,argv);78 #else79 osprocessunix* process = new osprocessunix(uniWrite,prog_name,argv);80 #endif81 82 char* buffer = "TESTING uniWirite IN CAP\nTesting uniWrite in Mixed Case\n";83 int buffer_len = strlen(buffer);84 85 if (!process->write(buffer,buffer_len)) {86 cerr << "Error: failed to write to child process\n";87 }88 89 process->close();90 91 process->wait();92 93 delete process;94 }95 96 97 void test_uni_read_pipe()98 {99 char* prog_name = "java";100 char* argv[] = { "java", NULL };101 102 cout << "<hr>" << endl;103 cout << "<p>Unidirectional Read Test" << endl;104 cout << "<p> The output of 'java' is read in by this process and then sent to stdout" << endl;105 cout << "<p>" << endl;106 107 108 #ifdef __WIN32__109 osprocess* process = new osprocesswindows(uniRead,prog_name,argv);110 #else111 osprocess* process = new osprocessunix(uniRead,prog_name,argv);112 #endif113 114 const int BufferSize = 1024;115 char buffer[BufferSize];116 117 int bytes_read = 0;118 do {119 bytes_read = process->read(buffer,BufferSize);120 if (bytes_read>0) {121 fwrite(buffer,1,bytes_read,stdout);122 }123 } while (bytes_read==BufferSize);124 125 126 // deleting object will also have the effect of closing any open handles127 delete process;128 129 }130 131 132 133 void test_bi_read_write_pipe()134 {135 #ifdef __WIN32__136 char* prog_name = "type";137 char* argv[] = NULL ;138 139 #else140 char* prog_name = "tr";141 char* argv[] = { "tr", "[A-Z]", "[a-z]", NULL };142 #endif143 144 // Converts uppercase letters to lowercase145 // Answer is read back and then printed to STDOUT by this process146 147 cout << "<hr>" << endl;148 cout << "<p>Bidirectional Read/Write Test" << endl;149 cout << "<p> Converts uppercase letters to lowercase" << endl;150 cout << "<p> Data is sent to child process down pipe by this process" << endl;151 cout << "<p> Answer is read back from child process and printed to stdout" << endl;152 cout << "<p>" << endl;153 154 #ifdef __WIN32__155 osprocesswindows* process = new osprocesswindows(biReadWrite,prog_name,argv);156 #else157 osprocessunix* process = new osprocessunix(biReadWrite,prog_name,argv);158 #endif159 160 char* write_buffer = "TESTING biReadWrite IN CAP\nTesting biReadWrite in Mixed Case\n";161 int write_buffer_len = strlen(write_buffer);162 163 if (!process->write(write_buffer,write_buffer_len)) {164 cerr << "Error: failed to write to child process\n";165 }166 167 const int BufferSize = 1024;168 char read_buffer[BufferSize];169 process->close_write_pipe();170 171 int bytes_read = 0;172 do {173 bytes_read = process->read(read_buffer,BufferSize);174 if (bytes_read>0) {175 fwrite(read_buffer,1,bytes_read,stdout);176 }177 } while (bytes_read==BufferSize);178 179 180 process->close();181 182 delete process;183 184 }185 186 187 int main()188 {189 printf("Content-type: text/html\n\n");190 191 printf( "<html>\n");192 printf( " <head>\n");193 printf( " <title>Testing</title>\n");194 printf( " </head>\n");195 printf( " <body>\n");196 197 test_uni_read_pipe();198 test_uni_write_pipe();199 test_bi_read_write_pipe();200 201 printf( " </body>\n");202 printf( "</html>\n");203 204 return 0;205 }206 207 #endif208
Note:
See TracChangeset
for help on using the changeset viewer.