This source file includes following definitions.
- fifo_read
- main
   1 
   2 
   3 
   4 
   5 
   6 #ifdef HAVE_SYS_TYPES_H
   7 #include <sys/types.h>
   8 #endif
   9 #include <sys/stat.h>
  10 #ifndef WIN32
  11 #ifdef HAVE_SYS_QUEUE_H
  12 #include <sys/queue.h>
  13 #endif
  14 #ifdef HAVE_UNISTD_H
  15 #include <unistd.h>
  16 #endif
  17 #ifdef HAVE_SYS_TIME_H
  18 #include <sys/time.h>
  19 #endif
  20 #else
  21 #include <windows.h>
  22 #endif
  23 #include <fcntl.h>
  24 #include <stdlib.h>
  25 #include <stdio.h>
  26 #include <string.h>
  27 #include <errno.h>
  28 #include <unistd.h>
  29 
  30 #include <opal/mca/event/event.h>
  31 #include "opal/runtime/opal.h"
  32 
  33 static void
  34 fifo_read(int fd, short event, void *arg)
  35 {
  36         char buf[255];
  37         int len;
  38         opal_event_t *ev = arg;
  39 #ifdef WIN32
  40         DWORD dwBytesRead;
  41 #endif
  42 
  43         
  44         opal_event.add(ev, NULL);
  45 
  46         fprintf(stderr, "fifo_read called with fd: %d, event: %d, arg: %p\n",
  47                 fd, event, arg);
  48 #ifdef WIN32
  49         len = ReadFile((HANDLE)fd, buf, sizeof(buf) - 1, &dwBytesRead, NULL);
  50 
  51         
  52         if(len && dwBytesRead == 0) {
  53                 fprintf(stderr, "End Of File");
  54                 opal_event.del(ev);
  55                 return;
  56         }
  57 
  58         buf[dwBytesRead + 1] = '\0';
  59 #else
  60         len = read(fd, buf, sizeof(buf) - 1);
  61 
  62         if (len == -1) {
  63                 perror("read");
  64                 return;
  65         } else if (len == 0) {
  66                 fprintf(stderr, "Connection closed\n");
  67                 return;
  68         }
  69 
  70         buf[len] = '\0';
  71 #endif
  72         fprintf(stdout, "Read: %s\n", buf);
  73 }
  74 
  75 int
  76 main (int argc, char **argv)
  77 {
  78         opal_event_t evfifo;
  79 #ifdef WIN32
  80         HANDLE socket;
  81         
  82         socket = CreateFile("test.txt",     
  83                         GENERIC_READ,                 
  84                         0,                            
  85                         NULL,                         
  86                         OPEN_EXISTING,                
  87                         FILE_ATTRIBUTE_NORMAL,        
  88                         NULL);                        
  89 
  90         if(socket == INVALID_HANDLE_VALUE)
  91                 return 1;
  92 
  93 #else
  94         struct stat st;
  95         char *fifo = "event.fifo";
  96         int socket;
  97 
  98         if (lstat (fifo, &st) == 0) {
  99                 if ((st.st_mode & S_IFMT) == S_IFREG) {
 100                         errno = EEXIST;
 101                         perror("lstat");
 102                         exit (1);
 103                 }
 104         }
 105 
 106         unlink (fifo);
 107         if (mkfifo (fifo, 0600) == -1) {
 108                 perror("mkfifo");
 109                 exit (1);
 110         }
 111 
 112         
 113 #ifdef __linux
 114         socket = open (fifo, O_RDWR | O_NONBLOCK, 0);
 115 #else
 116         socket = open (fifo, O_RDONLY | O_NONBLOCK, 0);
 117 #endif
 118 
 119         if (socket == -1) {
 120                 perror("open");
 121                 exit (1);
 122         }
 123 
 124         fprintf(stderr, "Write data to %s\n", fifo);
 125 #endif
 126         
 127         opal_init();
 128 
 129         
 130 #ifdef WIN32
 131         opal_event.set(opal_event_base, &evfifo, (int)socket, OPAL_EV_READ, fifo_read, &evfifo);
 132 #else
 133         opal_event.set(opal_event_base, &evfifo, socket, OPAL_EV_READ, fifo_read, &evfifo);
 134 #endif
 135 
 136         
 137         opal_event.add(&evfifo, NULL);
 138 
 139         opal_event.dispatch(opal_event_base);
 140 #ifdef WIN32
 141         CloseHandle(socket);
 142 #endif
 143         return (0);
 144 }
 145