/*************************************************************************** * Copyright (C) 2001 by Rick L. Vinyard, Jr. * * rvinyard@cs.nmsu.edu * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation version 2.1. * * * * 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 Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #include <conexus.h> #include <iostream> #include <sys/wait.h> #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> // This is the canonical pipe example program found in man (2) pipe // rewritten to illustrate pipes in the Conexus library int main(int argc, char *argv[]) { Conexus::init(); Conexus::Pipe::pointer pipe = Conexus::Pipe::create(); Conexus::Data d; pid_t cpid; assert(argc == 2); pipe->open(); cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { /* Child reads from pipe */ pipe->close_write(); /* Close unused write end */ try { while ( d = pipe->read(1) ) std::cout << d[0]; } catch ( Conexus::exception::read::disconnected ) { } std::cout << std::endl; _exit(EXIT_SUCCESS); } else { /* Parent writes argv[1] to pipe */ pipe->close_read(); /* Close unused read end */ pipe->write(argv[1], strlen(argv[1])); pipe->close(); /* Reader will see EOF */ wait(NULL); /* Wait for child */ exit(EXIT_SUCCESS); } }
/*************************************************************************** * Copyright (C) 2001 by Rick L. Vinyard, Jr. * * rvinyard@cs.nmsu.edu * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation version 2.1. * * * * 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 Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #include <conexus.h> #include <iostream> #include <sys/wait.h> #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> // This is the canonical pipe example program found in man (2) pipe // rewritten to illustrate pipes in the Conexus library void print_data(const Conexus::Data d); int main(int argc, char *argv[]) { Conexus::init(); Conexus::Pipe::pointer pipe = Conexus::Pipe::create(); pid_t cpid; assert(argc == 2); pipe->open(); cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { /* Child reads from pipe */ pipe->close_write(); /* Close unused write end */ pipe->signal_data().connect( sigc::ptr_fun( &print_data ) ); pipe->start(); while ( pipe->is_running() ) usleep(10000); _exit(EXIT_SUCCESS); } else { /* Parent writes argv[1] to pipe */ pipe->close_read(); /* Close unused read end */ /* Write the input string twice with a 3 second delay */ pipe->write(argv[1], strlen(argv[1])); pipe->write("\n", 2); sleep(3); pipe->write(argv[1], strlen(argv[1])); pipe->write("\n", 2); pipe->close(); /* Reader will see EOF */ wait(NULL); /* Wait for child */ exit(EXIT_SUCCESS); } } void print_data( const Conexus::Data d ) { for ( unsigned i = 0; i < d.size(); i++ ) std::cout << d[i]; std::cout << std::flush; }
/*************************************************************************** * Copyright (C) 2001 by Rick L. Vinyard, Jr. * * rvinyard@cs.nmsu.edu * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation version 2.1. * * * * 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 Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #include <conexus.h> #include <iostream> #include <sys/wait.h> #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> // This is the canonical pipe example program found in man (2) pipe // rewritten to illustrate pipes in the Conexus library int main(int argc, char *argv[]) { Conexus::init(); Conexus::Pipe::pointer pipe = Conexus::Pipe::create(); Conexus::Data d; pid_t cpid; assert(argc == 2); pipe->open(); cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { /* Child reads from pipe */ pipe->close_write(); /* Close unused write end */ try { while ( d = pipe->read(1) ) std::cout << d[0]; } catch ( Conexus::exception::read::disconnected ) { } std::cout << std::endl; _exit(EXIT_SUCCESS); } else { /* Parent writes argv[1] to pipe */ pipe->close_read(); /* Close unused read end */ pipe->write(argv[1], strlen(argv[1])); pipe->close(); /* Reader will see EOF */ wait(NULL); /* Wait for child */ exit(EXIT_SUCCESS); } }
/*************************************************************************** * Copyright (C) 2001 by Rick L. Vinyard, Jr. * * rvinyard@cs.nmsu.edu * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation version 2.1. * * * * 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 Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #include <conexus.h> #include <iostream> #include <sys/wait.h> #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> // This is the canonical pipe example program found in man (2) pipe // rewritten to illustrate pipes in the Conexus library void print_data(const Conexus::Data d); int main(int argc, char *argv[]) { Conexus::init(); Conexus::Pipe::pointer pipe = Conexus::Pipe::create(); pid_t cpid; assert(argc == 2); pipe->open(); cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { /* Child reads from pipe */ pipe->close_write(); /* Close unused write end */ pipe->signal_data().connect( sigc::ptr_fun( &print_data ) ); pipe->start(); while ( pipe->is_running() ) usleep(10000); _exit(EXIT_SUCCESS); } else { /* Parent writes argv[1] to pipe */ pipe->close_read(); /* Close unused read end */ /* Write the input string twice with a 3 second delay */ pipe->write(argv[1], strlen(argv[1])); pipe->write("\n", 2); sleep(3); pipe->write(argv[1], strlen(argv[1])); pipe->write("\n", 2); pipe->close(); /* Reader will see EOF */ wait(NULL); /* Wait for child */ exit(EXIT_SUCCESS); } } void print_data( const Conexus::Data d ) { for ( unsigned i = 0; i < d.size(); i++ ) std::cout << d[i]; std::cout << std::flush; }
/*************************************************************************** * Copyright (C) 2001 by Rick L. Vinyard, Jr. * * rvinyard@cs.nmsu.edu * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation version 2.1. * * * * 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 Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #include <conexus.h> #include <iostream> #include <sys/wait.h> #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> // This is the canonical pipe example program found in man (2) pipe // rewritten to illustrate pipes in the Conexus library int main(int argc, char *argv[]) { Conexus::init(); Conexus::Pipe::pointer pipe = Conexus::Pipe::create(); Conexus::Data d; pid_t cpid; assert(argc == 2); pipe->open(); cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { /* Child reads from pipe */ pipe->close_write(); /* Close unused write end */ try { while ( d = pipe->read(1) ) std::cout << d[0]; } catch ( Conexus::exception::read::disconnected ) { } std::cout << std::endl; _exit(EXIT_SUCCESS); } else { /* Parent writes argv[1] to pipe */ pipe->close_read(); /* Close unused read end */ pipe->write(argv[1], strlen(argv[1])); pipe->close(); /* Reader will see EOF */ wait(NULL); /* Wait for child */ exit(EXIT_SUCCESS); } }
/*************************************************************************** * Copyright (C) 2001 by Rick L. Vinyard, Jr. * * rvinyard@cs.nmsu.edu * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation version 2.1. * * * * 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 Lesser General Public * * License along with this library; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #include <conexus.h> #include <iostream> #include <sys/wait.h> #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> // This is the canonical pipe example program found in man (2) pipe // rewritten to illustrate pipes in the Conexus library void print_data(const Conexus::Data d); int main(int argc, char *argv[]) { Conexus::init(); Conexus::Pipe::pointer pipe = Conexus::Pipe::create(); pid_t cpid; assert(argc == 2); pipe->open(); cpid = fork(); if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (cpid == 0) { /* Child reads from pipe */ pipe->close_write(); /* Close unused write end */ pipe->signal_data().connect( sigc::ptr_fun( &print_data ) ); pipe->start(); while ( pipe->is_running() ) usleep(10000); _exit(EXIT_SUCCESS); } else { /* Parent writes argv[1] to pipe */ pipe->close_read(); /* Close unused read end */ /* Write the input string twice with a 3 second delay */ pipe->write(argv[1], strlen(argv[1])); pipe->write("\n", 2); sleep(3); pipe->write(argv[1], strlen(argv[1])); pipe->write("\n", 2); pipe->close(); /* Reader will see EOF */ wait(NULL); /* Wait for child */ exit(EXIT_SUCCESS); } } void print_data( const Conexus::Data d ) { for ( unsigned i = 0; i < d.size(); i++ ) std::cout << d[i]; std::cout << std::flush; }