| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/unix/pipe.h
 
- // Purpose:     wxPipe class
 
- // Author:      Vadim Zeitlin
 
- // Modified by:
 
- // Created:     24.06.2003 (extracted from src/unix/utilsunx.cpp)
 
- // Copyright:   (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org>
 
- // Licence:     wxWindows licence
 
- ///////////////////////////////////////////////////////////////////////////////
 
- #ifndef _WX_UNIX_PIPE_H_
 
- #define _WX_UNIX_PIPE_H_
 
- #include <unistd.h>
 
- #include <fcntl.h>
 
- #include "wx/log.h"
 
- #include "wx/intl.h"
 
- // ----------------------------------------------------------------------------
 
- // wxPipe: this class encapsulates pipe() system call
 
- // ----------------------------------------------------------------------------
 
- class wxPipe
 
- {
 
- public:
 
-     // the symbolic names for the pipe ends
 
-     enum Direction
 
-     {
 
-         Read,
 
-         Write
 
-     };
 
-     enum
 
-     {
 
-         INVALID_FD = -1
 
-     };
 
-     // default ctor doesn't do anything
 
-     wxPipe() { m_fds[Read] = m_fds[Write] = INVALID_FD; }
 
-     // create the pipe, return TRUE if ok, FALSE on error
 
-     bool Create()
 
-     {
 
-         if ( pipe(m_fds) == -1 )
 
-         {
 
-             wxLogSysError(wxGetTranslation("Pipe creation failed"));
 
-             return false;
 
-         }
 
-         return true;
 
-     }
 
-     // switch the given end of the pipe to non-blocking IO
 
-     bool MakeNonBlocking(Direction which)
 
-     {
 
-         const int flags = fcntl(m_fds[which], F_GETFL, 0);
 
-         if ( flags == -1 )
 
-             return false;
 
-         return fcntl(m_fds[which], F_SETFL, flags | O_NONBLOCK) == 0;
 
-     }
 
-     // return TRUE if we were created successfully
 
-     bool IsOk() const { return m_fds[Read] != INVALID_FD; }
 
-     // return the descriptor for one of the pipe ends
 
-     int operator[](Direction which) const { return m_fds[which]; }
 
-     // detach a descriptor, meaning that the pipe dtor won't close it, and
 
-     // return it
 
-     int Detach(Direction which)
 
-     {
 
-         int fd = m_fds[which];
 
-         m_fds[which] = INVALID_FD;
 
-         return fd;
 
-     }
 
-     // close the pipe descriptors
 
-     void Close()
 
-     {
 
-         for ( size_t n = 0; n < WXSIZEOF(m_fds); n++ )
 
-         {
 
-             if ( m_fds[n] != INVALID_FD )
 
-             {
 
-                 close(m_fds[n]);
 
-                 m_fds[n] = INVALID_FD;
 
-             }
 
-         }
 
-     }
 
-     // dtor closes the pipe descriptors
 
-     ~wxPipe() { Close(); }
 
- private:
 
-     int m_fds[2];
 
- };
 
- #endif // _WX_UNIX_PIPE_H_
 
 
  |