summaryrefslogtreecommitdiff
path: root/ACE/examples/Reactor/Proactor/Aio_Platform_Test_C.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/Reactor/Proactor/Aio_Platform_Test_C.cpp')
-rw-r--r--ACE/examples/Reactor/Proactor/Aio_Platform_Test_C.cpp137
1 files changed, 137 insertions, 0 deletions
diff --git a/ACE/examples/Reactor/Proactor/Aio_Platform_Test_C.cpp b/ACE/examples/Reactor/Proactor/Aio_Platform_Test_C.cpp
new file mode 100644
index 00000000000..be720fdef40
--- /dev/null
+++ b/ACE/examples/Reactor/Proactor/Aio_Platform_Test_C.cpp
@@ -0,0 +1,137 @@
+// $Id$
+// ============================================================================
+//
+// = FILENAME
+// aio_platform_test_c.cpp
+//
+// = DESCRITPTION
+// Testing the platform for POSIX Asynchronous I/O. This is the C
+// version of the $ACE_ROOT/tests/Aio_Platform_Test.cpp. Useful
+// to send bug reports.
+//
+// = AUTHOR
+// Programming for the Real World. Bill O. GallMeister.
+// Modified by Alexander Babu Arulanthu <alex@cs.wustl.edu>
+//
+// =====================================================================
+
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <signal.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+
+#include <limits.h>
+
+#include <aio.h>
+
+int do_sysconf (void);
+int have_asynchio (void);
+
+static int file_handle = -1;
+char mb1 [BUFSIZ + 1];
+char mb2 [BUFSIZ + 1];
+aiocb aiocb1, aiocb2;
+sigset_t completion_signal;
+
+// For testing the <aio> stuff.
+int test_aio_calls (void);
+int issue_aio_calls (void);
+int query_aio_completions (void);
+int setup_signal_delivery (void);
+int do_sysconf (void);
+int have_asynchio (void);
+
+int
+do_sysconf (void)
+{
+ // Call sysconf to find out runtime values.
+ errno = 0;
+#if defined (_SC_LISTIO_AIO_MAX)
+ printf ("Runtime value of LISTIO_AIO_MAX is %d, errno = %d\n",
+ sysconf(_SC_LISTIO_AIO_MAX),
+ errno);
+#else
+ printf ("Runtime value of AIO_LISTIO_MAX is %d, errno = %d\n",
+ sysconf(_SC_AIO_LISTIO_MAX),
+ errno);
+#endif
+
+ errno = 0;
+ printf ("Runtime value of AIO_MAX is %d, errno = %d\n",
+ sysconf (_SC_AIO_MAX),
+ errno);
+
+ errno = 0;
+ printf ("Runtime value of _POSIX_ASYNCHRONOUS_IO is %d, errno = %d\n",
+ sysconf (_SC_ASYNCHRONOUS_IO),
+ errno);
+
+ errno = 0;
+ printf ("Runtime value of _POSIX_REALTIME_SIGNALS is %d, errno = %d\n",
+ sysconf (_SC_REALTIME_SIGNALS),
+ errno);
+
+ errno = 0;
+ printf ("Runtime value of RTSIG_MAX %d, Errno = %d\n",
+ sysconf (_SC_RTSIG_MAX),
+ errno);
+
+ errno = 0;
+ printf ("Runtime value of SIGQUEUE_MAX %d, Errno = %d\n",
+ sysconf (_SC_SIGQUEUE_MAX),
+ errno);
+ return 0;
+}
+
+int
+have_asynchio (void)
+{
+#if defined (_POSIX_ASYNCHRONOUS_IO)
+ // POSIX Asynch IO is present in this system.
+#if defined (_POSIX_ASYNC_IO)
+ // If this is defined and it is not -1, POSIX_ASYNCH is supported
+ // everywhere in the system.
+#if _POSIX_ASYNC_IO == -1
+ printf ("_POSIX_ASYNC_IO = -1.. ASYNCH IO NOT supported at all\n");
+ return -1;
+#else /* Not _POSIX_ASYNC_IO == -1 */
+ printf ("_POSIX_ASYNC_IO = %d\n ASYNCH IO is supported FULLY\n",
+ _POSIX_ASYNC_IO);
+#endif /* _POSIX_ASYNC_IO == -1 */
+
+#else /* Not defined _POSIX_ASYNC_IO */
+ printf ("_POSIX_ASYNC_IO is not defined.\n");
+ printf ("AIO might *not* be supported on some paths\n");
+#endif /* _POSIX_ASYNC_IO */
+
+ // System defined POSIX Values.
+ printf ("System claims to have POSIX_ASYNCHRONOUS_IO\n");
+
+ printf ("_POSIX_AIO_LISTIO_MAX = %d\n", _POSIX_AIO_LISTIO_MAX);
+ printf ("_POSIX_AIO_MAX = %d\n", _POSIX_AIO_MAX);
+
+ // Check and print the run time values.
+ do_sysconf ();
+
+ return 0;
+
+#else /* Not _POSIX_ASYNCHRONOUS_IO */
+ printf ("No support._POSIX_ASYNCHRONOUS_IO itself is not defined\n");
+ return -1;
+#endif /* _POSIX_ASYNCHRONOUS_IO */
+}
+
+int
+main (int, char *[])
+{
+ if (have_asynchio () == 0)
+ printf ("Test successful\n");
+ else
+ printf ("Test not successful\n");
+ return 0;
+}