Webmaster  |  Imprint 
C++ Server Pages
Main  |  License  |  Documentation  |  Download 

/home/tommi/cxxtools/include/cxxtools/fork.h

00001 /*
00002  * Copyright (C) 2007 Tommi Maekitalo
00003  * 
00004  * This library is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU Lesser General Public
00006  * License as published by the Free Software Foundation; either
00007  * version 2.1 of the License, or (at your option) any later version.
00008  * 
00009  * As a special exception, you may use this file as part of a free
00010  * software library without restriction. Specifically, if other files
00011  * instantiate templates or use macros or inline functions from this
00012  * file, or you compile this file and link it with other files to
00013  * produce an executable, this file does not by itself cause the
00014  * resulting executable to be covered by the GNU General Public
00015  * License. This exception does not however invalidate any other
00016  * reasons why the executable file might be covered by the GNU Library
00017  * General Public License.
00018  * 
00019  * This library is distributed in the hope that it will be useful,
00020  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00021  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00022  * Lesser General Public License for more details.
00023  * 
00024  * You should have received a copy of the GNU Lesser General Public
00025  * License along with this library; if not, write to the Free Software
00026  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
00027  */
00028 
00029 #ifndef CXXTOOLS_FORK_H
00030 #define CXXTOOLS_FORK_H
00031 
00032 #include <sys/types.h>
00033 #include <sys/wait.h>
00034 #include <unistd.h>
00035 #include <cxxtools/syserror.h>
00036 
00037 namespace cxxtools
00038 {
00062   class Fork
00063   {
00064       Fork(const Fork&);
00065       Fork& operator= (const Fork&);
00066 
00067       pid_t pid;
00068 
00069     public:
00070       Fork()
00071         : pid(::fork())
00072       {
00073         if (pid < 0)
00074           throw SysError("fork");
00075       }
00076       ~Fork()
00077       {
00078         if (pid)
00079           wait();
00080       }
00081 
00082       pid_t getPid() const  { return pid; }
00083       bool parent() const   { return pid > 0; }
00084       bool child() const    { return !parent(); }
00085       void setNowait()      { pid = 0; }
00086       int wait(int options = 0)
00087       {
00088         int status;
00089         ::waitpid(pid, &status, options);
00090         pid = 0;
00091         return status;
00092       }
00093   };
00094 }
00095 
00096 #endif // CXXTOOLS_FORK_H
Copyright © 2008 The Tntnet Development Team
Tntnet 1.6