Annotation of embedaddon/libevent/sample/event-test.c, revision 1.1.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>