WvStreams
|
00001 /* 00002 * A fun WvStream example. 00003 * 00004 * Some text about this example... 00005 */ 00006 00007 #include <wvistreamlist.h> 00008 #include <wvpipe.h> 00009 #include <wvlog.h> 00010 #include <wvmodem.h> 00011 00012 void concallback(WvStream &con, void *userdata) 00013 { 00014 WvStream &modem = *(WvStream *)userdata; 00015 00016 char *str = con.getline(); 00017 if (str) 00018 modem.print("%s\r", str); // modems like CR, not newline 00019 } 00020 00021 int main() 00022 { 00023 const char *argv1[] = { "sh", "-c", 00024 "while :; do echo foo; sleep 3; done", NULL }; 00025 const char *argv2[] = { "sh", "-c", 00026 "while :; do echo snorkle; sleep 2; done", NULL }; 00027 00028 WvLog log("logger", WvLog::Info); 00029 WvLog modemlog("modem", WvLog::Info); 00030 WvPipe pipe1(argv1[0], argv1, false, true, false); 00031 WvPipe pipe2(argv2[0], argv2, false, true, false); 00032 WvModem modem("/dev/ttyS2", O_RDWR); 00033 00034 pipe1.autoforward(log); 00035 pipe2.autoforward(log); 00036 wvcon->setcallback(concallback, &modem); 00037 modem.autoforward(modemlog); 00038 00039 WvIStreamList l; 00040 l.append(&pipe1, false); 00041 l.append(&pipe2, false); 00042 l.append(&modem, false); 00043 l.append(wvcon, false); 00044 00045 if (!modem.isok()) 00046 modemlog(WvLog::Error, "%s\n", modem.errstr()); 00047 00048 while (wvcon->isok()) 00049 { 00050 if (l.select(1000)) 00051 l.callback(); 00052 else 00053 log("[TICK]\n"); 00054 } 00055 }