Annotation of embedaddon/libevent/sample/event-test.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Compile with:
! 3: * cc -I/usr/local/include -o event-test event-test.c -L/usr/local/lib -levent
! 4: */
! 5:
! 6: #ifdef HAVE_CONFIG_H
! 7: #include "config.h"
! 8: #endif
! 9:
! 10: #include <sys/types.h>
! 11: #include <sys/stat.h>
! 12: #ifndef WIN32
! 13: #include <sys/queue.h>
! 14: #include <unistd.h>
! 15: #include <sys/time.h>
! 16: #else
! 17: #include <windows.h>
! 18: #endif
! 19: #include <fcntl.h>
! 20: #include <stdlib.h>
! 21: #include <stdio.h>
! 22: #include <string.h>
! 23: #include <errno.h>
! 24:
! 25: #include <event.h>
! 26:
! 27: static void
! 28: fifo_read(int fd, short event, void *arg)
! 29: {
! 30: char buf[255];
! 31: int len;
! 32: struct event *ev = arg;
! 33: #ifdef WIN32
! 34: DWORD dwBytesRead;
! 35: #endif
! 36:
! 37: /* Reschedule this event */
! 38: event_add(ev, NULL);
! 39:
! 40: fprintf(stderr, "fifo_read called with fd: %d, event: %d, arg: %p\n",
! 41: fd, event, arg);
! 42: #ifdef WIN32
! 43: len = ReadFile((HANDLE)fd, buf, sizeof(buf) - 1, &dwBytesRead, NULL);
! 44:
! 45: // Check for end of file.
! 46: if(len && dwBytesRead == 0) {
! 47: fprintf(stderr, "End Of File");
! 48: event_del(ev);
! 49: return;
! 50: }
! 51:
! 52: buf[dwBytesRead] = '\0';
! 53: #else
! 54: len = read(fd, buf, sizeof(buf) - 1);
! 55:
! 56: if (len == -1) {
! 57: perror("read");
! 58: return;
! 59: } else if (len == 0) {
! 60: fprintf(stderr, "Connection closed\n");
! 61: return;
! 62: }
! 63:
! 64: buf[len] = '\0';
! 65: #endif
! 66: fprintf(stdout, "Read: %s\n", buf);
! 67: }
! 68:
! 69: int
! 70: main (int argc, char **argv)
! 71: {
! 72: struct event evfifo;
! 73: #ifdef WIN32
! 74: HANDLE socket;
! 75: // Open a file.
! 76: socket = CreateFileA("test.txt", // open File
! 77: GENERIC_READ, // open for reading
! 78: 0, // do not share
! 79: NULL, // no security
! 80: OPEN_EXISTING, // existing file only
! 81: FILE_ATTRIBUTE_NORMAL, // normal file
! 82: NULL); // no attr. template
! 83:
! 84: if(socket == INVALID_HANDLE_VALUE)
! 85: return 1;
! 86:
! 87: #else
! 88: struct stat st;
! 89: const char *fifo = "event.fifo";
! 90: int socket;
! 91:
! 92: if (lstat (fifo, &st) == 0) {
! 93: if ((st.st_mode & S_IFMT) == S_IFREG) {
! 94: errno = EEXIST;
! 95: perror("lstat");
! 96: exit (1);
! 97: }
! 98: }
! 99:
! 100: unlink (fifo);
! 101: if (mkfifo (fifo, 0600) == -1) {
! 102: perror("mkfifo");
! 103: exit (1);
! 104: }
! 105:
! 106: /* Linux pipes are broken, we need O_RDWR instead of O_RDONLY */
! 107: #ifdef __linux
! 108: socket = open (fifo, O_RDWR | O_NONBLOCK, 0);
! 109: #else
! 110: socket = open (fifo, O_RDONLY | O_NONBLOCK, 0);
! 111: #endif
! 112:
! 113: if (socket == -1) {
! 114: perror("open");
! 115: exit (1);
! 116: }
! 117:
! 118: fprintf(stderr, "Write data to %s\n", fifo);
! 119: #endif
! 120: /* Initalize the event library */
! 121: event_init();
! 122:
! 123: /* Initalize one event */
! 124: #ifdef WIN32
! 125: event_set(&evfifo, (int)socket, EV_READ, fifo_read, &evfifo);
! 126: #else
! 127: event_set(&evfifo, socket, EV_READ, fifo_read, &evfifo);
! 128: #endif
! 129:
! 130: /* Add it to the active events, without a timeout */
! 131: event_add(&evfifo, NULL);
! 132:
! 133: event_dispatch();
! 134: #ifdef WIN32
! 135: CloseHandle(socket);
! 136: #endif
! 137: return (0);
! 138: }
! 139:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>