| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/unix/execute.h
- // Purpose: private details of wxExecute() implementation
- // Author: Vadim Zeitlin
- // Copyright: (c) 1998 Robert Roebling, Julian Smart, Vadim Zeitlin
- // (c) 2013 Vadim Zeitlin
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_UNIX_EXECUTE_H
- #define _WX_UNIX_EXECUTE_H
- #include "wx/app.h"
- #include "wx/hashmap.h"
- #include "wx/process.h"
- #if wxUSE_STREAMS
- #include "wx/unix/pipe.h"
- #include "wx/private/streamtempinput.h"
- #endif
- class wxEventLoopBase;
- // Information associated with a running child process.
- class wxExecuteData
- {
- public:
- wxExecuteData()
- {
- flags =
- pid = 0;
- exitcode = -1;
- process = NULL;
- syncEventLoop = NULL;
- #if wxUSE_STREAMS
- fdOut =
- fdErr = wxPipe::INVALID_FD;
- #endif // wxUSE_STREAMS
- }
- // This must be called in the parent process as soon as fork() returns to
- // update us with the effective child PID. It also ensures that we handle
- // SIGCHLD to be able to detect when this PID exits, so wxTheApp must be
- // available.
- void OnStart(int pid);
- // Called when the child process exits.
- void OnExit(int exitcode);
- // Return true if we should (or already did) redirect the child IO.
- bool IsRedirected() const { return process && process->IsRedirected(); }
- // wxExecute() flags
- int flags;
- // the pid of the child process
- int pid;
- // The exit code of the process, set once the child terminates.
- int exitcode;
- // the associated process object or NULL
- wxProcess *process;
- // Local event loop used to wait for the child process termination in
- // synchronous execution case. We can't create it ourselves as its exact
- // type depends on the application kind (console/GUI), so we rely on
- // wxAppTraits setting up this pointer to point to the appropriate object.
- wxEventLoopBase *syncEventLoop;
- #if wxUSE_STREAMS
- // the input buffer bufOut is connected to stdout, this is why it is
- // called bufOut and not bufIn
- wxStreamTempInputBuffer bufOut,
- bufErr;
- // the corresponding FDs, -1 if not redirected
- int fdOut,
- fdErr;
- #endif // wxUSE_STREAMS
- private:
- // SIGCHLD signal handler that checks whether any of the currently running
- // children have exited.
- static void OnSomeChildExited(int sig);
- // All currently running child processes indexed by their PID.
- //
- // Notice that the container doesn't own its elements.
- WX_DECLARE_HASH_MAP(int, wxExecuteData*, wxIntegerHash, wxIntegerEqual,
- ChildProcessesData);
- static ChildProcessesData ms_childProcesses;
- wxDECLARE_NO_COPY_CLASS(wxExecuteData);
- };
- #endif // _WX_UNIX_EXECUTE_H
|