- Timestamp:
- 2010-05-27T11:32:46+12:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/runtime-src/src/recpt/os_process.cpp
r22177 r22183 26 26 #include "os_process.h" 27 27 28 osprocess::osprocess(char* cmdline, OSProcessPipeMode mode) 28 osprocess::osprocess(OSProcessPipeMode mode, 29 char* prog_name, char* argv[], char* envp[]) 29 30 : mode_(mode) 30 31 {} … … 54 55 using namespace std; 55 56 57 58 56 59 void test_uni_write_pipe() 57 60 { 58 61 #ifdef __WIN32__ 59 char* prog_name = "c:\\Windows\\system32\\java.exe"; 60 char* cmd_line = "java"; 61 62 //char* input_line = "echo hi there\n"; 63 //char* prog_name = "c:\\cygwin\\bin\\cat.exe"; 64 //char* cmd_line = "cat"; 65 #else 66 char* cmd_line = "/usr/bin/java"; 67 //char* cmd_line = "java"; 68 #endif 69 70 #ifdef __WIN32__ 71 osprocesswindows* process = new osprocesswindows(cmd_line,uniRead); 72 #else 73 osprocessunix* process = new osprocessunix(cmd_line,uniRead); 62 char* prog_name = "type"; 63 char* argv[] = { "type", NULL } ; 64 65 #else 66 char* prog_name = "tr"; 67 char* argv[] = { "tr", "[A-Z]", "[a-z]", NULL }; 68 #endif 69 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 #else 79 osprocessunix* process = new osprocessunix(uniWrite,prog_name,argv); 80 #endif 81 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 #else 111 osprocess* process = new osprocessunix(uniRead,prog_name,argv); 74 112 #endif 75 113 … … 86 124 87 125 126 // deleting object will also have the effect of closing any open handles 88 127 delete process; 89 128 90 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 #else 140 char* prog_name = "tr"; 141 char* argv[] = { "tr", "[A-Z]", "[a-z]", NULL }; 142 #endif 143 144 // Converts uppercase letters to lowercase 145 // Answer is read back and then printed to STDOUT by this process 146 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 #else 157 osprocessunix* process = new osprocessunix(biReadWrite,prog_name,argv); 158 #endif 159 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 91 186 92 187 int main() … … 100 195 printf( " <body>\n"); 101 196 197 test_uni_read_pipe(); 102 198 test_uni_write_pipe(); 199 test_bi_read_write_pipe(); 103 200 104 201 printf( " </body>\n");
Note:
See TracChangeset
for help on using the changeset viewer.