diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-01-17 22:17:18 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-01-17 22:17:18 +0000 |
commit | a0cd0829992027596010beea6e4148f085f18d1c (patch) | |
tree | a42a74ec013cdf3c3563f3bc823ee44c339609aa /testsuites/psxtests/psxaio03/init.c | |
parent | 2011-01-17 Alin Rus <alin.codejunkie@gmail.com> (diff) | |
download | rtems-a0cd0829992027596010beea6e4148f085f18d1c.tar.bz2 |
2011-01-17 Alin Rus <alin.codejunkie@gmail.com>
* Makefile.am, configure.ac: Add psxaio03/.
* psxaio03/Makefile.am, psxaio03/init.c, psxaio03/psxaio03.scn
psxaio03/system.h: New.
Diffstat (limited to 'testsuites/psxtests/psxaio03/init.c')
-rw-r--r-- | testsuites/psxtests/psxaio03/init.c | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/testsuites/psxtests/psxaio03/init.c b/testsuites/psxtests/psxaio03/init.c new file mode 100644 index 0000000000..cfd3133379 --- /dev/null +++ b/testsuites/psxtests/psxaio03/init.c @@ -0,0 +1,136 @@ +/* + * Copyright 2011, Alin Rus <alin.codejunkie@gmail.com> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + */ + +#define CONFIGURE_INIT +#include "system.h" +#include <rtems.h> +#include "tmacros.h" +#include <rtems/posix/aio_misc.h> +#include <aio.h> +#include <stdlib.h> +#include <unistd.h> +#include <stdio.h> +#include <sched.h> +#include <fcntl.h> +#include <rtems/chain.h> + +#define MAX 6 +#define BUFSIZE 128 + +struct aiocb * +create_aiocb (int fd) +{ + struct aiocb *aiocbp; + + aiocbp = malloc (sizeof (struct aiocb)); + memset (aiocbp, 0, sizeof (struct aiocb)); + aiocbp->aio_buf = malloc (BUFSIZE * sizeof (char)); + aiocbp->aio_nbytes = BUFSIZE; + aiocbp->aio_offset = 0; + aiocbp->aio_reqprio = 0; + aiocbp->aio_fildes = fd; + + return aiocbp; +} + +void +free_aiocb (struct aiocb *aiocbp) +{ + free ((char*) aiocbp->aio_buf); + free (aiocbp); +} + + +void * +POSIX_Init (void *argument) +{ + int fd[MAX]; + struct aiocb *aiocbp[MAX+1]; + int status, i, policy = SCHED_FIFO; + char filename[BUFSIZE]; + struct sched_param param; + + status = rtems_aio_init (); + rtems_test_assert (status == 0); + + param.sched_priority = 30; + status = pthread_setschedparam (pthread_self(), policy, ¶m); + rtems_test_assert (status == 0); + + status = mkdir ("/tmp", S_IRWXU); + rtems_test_assert (!status); + + puts ("\n\n*** POSIX AIO TEST 03 ***"); + + puts (" Init: Open files "); + + for (i=0; i<MAX; i++) + { + sprintf (filename, "/tmp/aio_fildes%d",i); + fd[i] = open (filename, O_RDWR|O_CREAT, S_IRWXU|S_IRWXG|S_IRWXO); + rtems_test_assert ( fd[i] != -1); + } + + puts (" Init: [WQ] aio_write on 1st file "); + aiocbp[0] = create_aiocb (fd[0]); + status = aio_write (aiocbp[0]); + rtems_test_assert (status != -1); + + puts (" Init: [WQ] aio_write on 2nd file "); + aiocbp[1] = create_aiocb (fd[1]); + status = aio_write (aiocbp[1]); + rtems_test_assert (status != -1); + + puts (" Init: [WQ] aio_read on 2nd file add by priority "); + aiocbp[2] = create_aiocb (fd[1]); + status = aio_read (aiocbp[2]); + rtems_test_assert (status != -1); + + puts (" Init: [WQ] aio_write on 3rd file "); + aiocbp[3] = create_aiocb (fd[2]); + status = aio_write (aiocbp[3]); + rtems_test_assert (status != -1); + + puts (" Init: [WQ] aio_write on 4th file "); + aiocbp[4] = create_aiocb (fd[3]); + status = aio_write (aiocbp[4]); + rtems_test_assert (status != -1); + + puts (" Init: [WQ] aio_write on 5th file -- [WQ] full "); + aiocbp[5] = create_aiocb (fd[4]); + status = aio_write (aiocbp[5]); + rtems_test_assert (status != -1); + + puts (" Init: [IQ] aio_write on 6th file "); + aiocbp[6] = create_aiocb (fd[5]); + status = aio_read (aiocbp[6]); + rtems_test_assert (status != -1); + + puts (" Init: going to sleep for 60 sec "); + sleep (60); + puts (" Init: going to sleep again for 60 sec "); + sleep (60); + puts (" Init: going to sleep again for 60 sec "); + sleep (60); + puts ("\n\n*** POSIX AIO TEST 03 ***"); + + puts ("*** END OF POSIX AIO TEST 03 ***"); + + for (i = 0; i < MAX; i++) + { + close (fd[i]); + free_aiocb (aiocbp[i]); + } + free_aiocb (aiocbp[i]); + rtems_test_exit (0); + + return NULL; + +} + |