#ifndef INCLUDED_BOBCAT_FORK_
#define INCLUDED_BOBCAT_FORK_

#include <sys/types.h>

#include <bobcat/errno>

namespace FBB
{    

class Fork
{
    pid_t d_pid;

    public:
        virtual ~Fork();
        void fork();

    protected:
        pid_t pid() const;

        virtual void childRedirections();   // do child redirections
        virtual void childProcess() = 0;    // must be implemented

        virtual void parentRedirections();  // do parent redirections
        virtual void parentProcess() = 0;   // must be implemented

        void prepareDaemon() const;         // prepares for a daemon

        int waitForChild();                 // returns the status
};

inline pid_t Fork::pid() const
{
    return d_pid;
}

} // FBB

#endif



