File indexing completed on 2025-05-11 08:24:47
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #ifdef HAVE_CONFIG_H
0030 #include "config.h"
0031 #endif
0032
0033 #include <tmacros.h>
0034 #include "test_support.h"
0035
0036 #include <sys/types.h>
0037 #include <sys/stat.h>
0038 #include <fcntl.h>
0039 #include <unistd.h>
0040 #include <errno.h>
0041 #include <rtems/malloc.h>
0042
0043 const char rtems_test_name[] = "SPFIFO 2";
0044
0045 #define NUM_OPEN_REQ 26
0046
0047 static void create_fifo(void)
0048 {
0049 int status;
0050
0051 status = mkfifo("/fifo01", 0777);
0052 rtems_test_assert(status == 0);
0053 }
0054
0055 static void open_fifo(int expected, int flags)
0056 {
0057 int fd;
0058
0059 fd = open("/fifo01", flags);
0060 printf( "expect status=%d errno=%d/(%s)\n", fd, errno, strerror(errno) );
0061 if ( expected ) {
0062 rtems_test_assert(fd == -1);
0063 rtems_test_assert(errno == expected);
0064 } else {
0065 rtems_test_assert(fd != -1);
0066 close( fd );
0067 }
0068 }
0069
0070 static rtems_task Init(
0071 rtems_task_argument argument
0072 )
0073 {
0074 void *p;
0075 int num_opens = 0;
0076 int index = 0;
0077
0078 TEST_BEGIN();
0079
0080 puts( "Creating FIFO" );
0081 create_fifo();
0082
0083 p = rtems_heap_greedy_allocate(NULL, 0);
0084 puts("Opening FIFO.. expect ENOMEM since no memory is available");
0085 open_fifo(ENOMEM, O_RDWR);
0086 rtems_heap_greedy_free(p);
0087
0088 puts( "Opening FIFO in RDWR mode. Expect OK" );
0089 open_fifo(0, O_RDWR);
0090 ++num_opens;
0091
0092 puts( "Opening FIFO in non blocking RDONLY mode. Expect OK");
0093 open_fifo(0, O_RDONLY | O_NONBLOCK);
0094 ++num_opens;
0095
0096 puts( "Opening FIFO in non blocking WRONLY mode. Expect ENXIO");
0097 open_fifo(ENXIO, O_WRONLY | O_NONBLOCK);
0098 ++num_opens;
0099
0100 puts("\nMultiple opens\n");
0101 index = 0;
0102 do {
0103
0104 printf("%d... ", index+1);
0105 open_fifo(0, O_RDONLY | O_NONBLOCK);
0106 ++index;
0107 } while ( index < NUM_OPEN_REQ - num_opens );
0108
0109 TEST_END();
0110
0111 rtems_test_exit(0);
0112 }
0113
0114
0115
0116 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
0117 #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
0118
0119 #define CONFIGURE_MAXIMUM_TASKS 1
0120 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
0121
0122 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
0123
0124 #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 5
0125
0126 #define CONFIGURE_IMFS_ENABLE_MKFIFO
0127
0128 #define CONFIGURE_INIT
0129
0130 #include <rtems/confdefs.h>
0131