From e21b04fd3f33629bbd2ac9f3db4236902cab4b2b Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 15 Oct 2006 17:16:22 +0000 Subject: Trivial documentation fixups. git-svn-id: http://svn.drobilla.net/lad/raul@175 a436a847-0d15-0410-975c-d299462d15a1 --- raul/Atom.h | 2 ++ raul/AtomLiblo.h | 2 ++ raul/AtomRaptor.h | 2 ++ raul/Condition.h | 2 ++ raul/Makefile.am | 1 + raul/Mutex.h | 2 ++ raul/Path.h | 2 ++ raul/Process.h | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ raul/Queue.h | 2 ++ raul/Semaphore.h | 2 ++ raul/Slave.h | 8 +++--- raul/Thread.h | 2 +- 12 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 raul/Process.h diff --git a/raul/Atom.h b/raul/Atom.h index 4d85f7f..372cd78 100644 --- a/raul/Atom.h +++ b/raul/Atom.h @@ -26,6 +26,8 @@ using std::string; /** An OSC atom (fundamental data types OSC messages are composed of). + * + * \ingroup raul */ class Atom { public: diff --git a/raul/AtomLiblo.h b/raul/AtomLiblo.h index 772a26e..6812dcf 100644 --- a/raul/AtomLiblo.h +++ b/raul/AtomLiblo.h @@ -24,6 +24,8 @@ /** Support for serializing an Atom to/from liblo messages. * * (Here to prevent a unnecessary liblo dependency for Atom). + * + * \ingroup raul */ class AtomLiblo { public: diff --git a/raul/AtomRaptor.h b/raul/AtomRaptor.h index b06286d..ec971e7 100644 --- a/raul/AtomRaptor.h +++ b/raul/AtomRaptor.h @@ -27,6 +27,8 @@ /** Support for serializing an Atom to/from RDF (via redland aka librdf). * * (Here to prevent a unnecessary redland dependency for Atom). + * + * \ingroup raul */ class AtomRaptor { public: diff --git a/raul/Condition.h b/raul/Condition.h index 29eaec8..0f20c29 100644 --- a/raul/Condition.h +++ b/raul/Condition.h @@ -23,6 +23,8 @@ /** Trivial (but pretty) wrapper around POSIX Conditions (zero overhead). * * A semaphore that isn't a counter, is slow, and not realtime safe. Yay. + * + * \ingroup raul */ class Condition { public: diff --git a/raul/Makefile.am b/raul/Makefile.am index 7d5ac48..fa79ae3 100644 --- a/raul/Makefile.am +++ b/raul/Makefile.am @@ -8,6 +8,7 @@ raulinclude_HEADERS = \ Semaphore.h \ Mutex.h \ Condition.h \ + Process.h \ Thread.h \ Slave.h \ Atom.h diff --git a/raul/Mutex.h b/raul/Mutex.h index 8cff728..57dedba 100644 --- a/raul/Mutex.h +++ b/raul/Mutex.h @@ -21,6 +21,8 @@ /** Trivial (but pretty) wrapper around POSIX Mutexes (zero overhead). + * + * \ingroup raul */ class Mutex { public: diff --git a/raul/Path.h b/raul/Path.h index 9412e3c..d4db163 100644 --- a/raul/Path.h +++ b/raul/Path.h @@ -34,6 +34,8 @@ using std::string; * * Valid characters are the 95 printable ASCII characters (32-126), excluding: * space # * , ? [ ] { } + * + * \ingroup raul */ class Path : public std::basic_string { public: diff --git a/raul/Process.h b/raul/Process.h new file mode 100644 index 0000000..698e1b9 --- /dev/null +++ b/raul/Process.h @@ -0,0 +1,85 @@ +/* This file is part of Raul. Copyright (C) 2006 Dave Robillard. + * + * Raul 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. + * + * Raul 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 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., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef RAUL_PROCESS_H +#define RAUL_PROCESS_H + +#include +#include +#include + +/** A child process. + * + * \ingroup raul + */ +class Process +{ +public: + + /** Launch a sub process. + * + * @param command can be a typical shell command with parameters, the PATH is searched etc. + */ + bool launch(std::string command) + { + const string executable = (command.find(" ") != string::npos) + ? command.substr(0, command.find(" ")) + : command; + + std::cerr << "Launching child process '" << executable << "' with command line '" + << command << "'" << endl; + + // Use the same double fork() trick as JACK to prevent zombie children + const int err = fork(); + + if (err == 0) { + // (child) + + // close all nonstandard file descriptors + const int max_fds = getdtablesize(); + int fd; + for (fd = 3; fd < max_fds; ++fd) + close(fd); + + switch (fork()) { + + case 0: + // (grandchild) + setsid(); + execlp(executable.c_str(), command.c_str(), NULL); + _exit(-1); + + case -1: + // (second) fork failed, there is no grandchild + _exit (-1); + + /* exit the child process here */ + default: + _exit (0); + } + + return (err > 0); + } + +private: + // .... no :) (undefined) + Process(); + Process(const Process&); + Process& operator=(const Process&); +}; + + +#endif // RAUL_PROCESS_H diff --git a/raul/Queue.h b/raul/Queue.h index f400497..071ed4e 100644 --- a/raul/Queue.h +++ b/raul/Queue.h @@ -28,6 +28,8 @@ * the push and pop operations themselves are not thread-safe. * * FIXME: Verify atomicity of everything here. + * + * \ingroup raul */ template class Queue diff --git a/raul/Semaphore.h b/raul/Semaphore.h index 9a696f9..213e1d0 100644 --- a/raul/Semaphore.h +++ b/raul/Semaphore.h @@ -28,6 +28,8 @@ * really needs to update it's man pages. * * This class remains as a trivial (yet pretty) wrapper/abstraction. + * + * \ingroup raul */ class Semaphore { public: diff --git a/raul/Slave.h b/raul/Slave.h index c16818b..fb0c67c 100644 --- a/raul/Slave.h +++ b/raul/Slave.h @@ -1,11 +1,11 @@ -/* This file is part of Ingen. Copyright (C) 2006 Dave Robillard. +/* This file is part of Raul. Copyright (C) 2006 Dave Robillard. * - * Ingen is free software; you can redistribute it and/or modify it under the + * Raul 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. * - * Ingen is distributed in the hope that it will be useful, but WITHOUT ANY + * Raul 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 details. * @@ -27,7 +27,7 @@ * Use this to perform some task in a separate thread you want to 'drive' * from a realtime (or otherwise) thread. * - * \ingroup engine + * \ingroup raul */ class Slave : public Thread { diff --git a/raul/Thread.h b/raul/Thread.h index 37dcacd..04a7be4 100644 --- a/raul/Thread.h +++ b/raul/Thread.h @@ -27,7 +27,7 @@ * Extend this and override the _run method to easily create a thread * to perform some task. * - * \ingroup engine + * \ingroup raul */ class Thread { -- cgit v1.2.1