00001 #ifndef __SFS_AIO_H__
00002 #define __SFS_AIO_H__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <signal.h>
00016 #include <sys/types.h>
00017 #ifdef _POSIX_ASYNCHRONOUS_IO
00018 #ifdef __macos__
00019 #include <AvailabilityMacros.h>
00020 #include <sys/aio.h>
00021 #else
00022 #include <aio.h>
00023 #endif
00024 #else
00025 struct aiocb {
00026 int aio_fildes;
00027 void *aio_buf;
00028 size_t aio_nbytes;
00029 off_t aio_offset;
00030 int aio_reqprio;
00031 struct sigevent aio_sigevent;
00032 };
00033 #endif
00034
00035
00036
00037
00038 class XrdSfsAio
00039 {
00040 public:
00041
00042 struct aiocb sfsAio;
00043
00044 ssize_t Result;
00045
00046 const char *TIdent;
00047
00048
00049
00050 virtual void doneRead() = 0;
00051
00052
00053
00054 virtual void doneWrite() = 0;
00055
00056
00057
00058 virtual void Recycle() = 0;
00059
00060 XrdSfsAio() {
00061 #if defined(__macos__) && (!defined(MAC_OS_X_VERSION_10_4) || \
00062 MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_4)
00063 sfsAio.aio_sigevent.sigev_value.sigval_ptr = (void *)this;
00064 #else
00065 sfsAio.aio_sigevent.sigev_value.sival_ptr = (void *)this;
00066 #endif
00067 sfsAio.aio_sigevent.sigev_notify = SIGEV_SIGNAL;
00068 sfsAio.aio_reqprio = 0;
00069 TIdent = (char *)"";
00070 }
00071 virtual ~XrdSfsAio() {}
00072 };
00073 #endif