Here is the code.
/* ======================================================================================= */
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/queue.h>
#include <unistd.h>
#include <sys/time.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include < string.h>
#include <errno.h>
#include <iostream>
// C libraries
extern "C"
{
// libevent
#include <event.h>
}
/*
I had to make some changes to get this to compile under C++
the ... short event, ... argument and the ... struct event *ev...
clashed in some way so I had to rename them.
Also struct event *ev = arg would not compile, once I added the
reinterpret_cast<>() / static_cast<>(), it compiles but now it appears that it doesn't do anything :-)
this was originally
void fifo_read(int fd, short event, void *arg)
*/
void fifo_read(int fd, short e, void *arg)
{
char buf[255];
int len;
// this was originally
// struct event *ev = arg;
//struct event *ev = reinterpret_cast<event*>(arg);
struct event *ev = static_cast<event*>(arg);
// reschedule this event
event_add(ev, NULL);
// this was originally
// fprintf(stderr, "fifo_read called with fd: %d, event: %d, arg: %p\n", fd, event, arg);
fprintf(stdout, "fifo_read called with fd: %d, event: %d, arg: %p\n", fd, e, arg);
len = read(fd, buf, sizeof(buf) -1);
if (len == -1)
{
perror("read");
return;
}
else if (len == 0)
{
fprintf(stderr, "Connection closed\n");
return;
}
buf[len] = '\0';
fprintf(stdout, "Read: %s\n", buf);
}
int main (int argc, char * const argv[])
{
struct event evfifo;
struct stat st;
char *fifo = " event.fifo";
int socket;
if (lstat(fifo, &st) == 0)
{
if((st.st_mode & S_IFMT) == S_IFREG)
{
errno = EEXIST;
perror("lstat");
exit(1);
}
}
unlink(fifo);
if (mkfifo (fifo, 0600) == -1)
{
perror("mkfifo");
exit(1);
}
socket = open(fifo, O_RDONLY | O_NONBLOCK, 0);
if (socket == -1)
{
perror("open");
exit(1);
}
fprintf(stderr, "Write data to %s\n", fifo);
// Initialize the event library
event_init();
// Initialize one event
event_set(&evfifo, socket, EV_READ, fifo_read, &evfifo);
// Add it to the active events, without a timeout
event_add(&evfifo, NULL);
event_dispatch();
return 0;
}
/* ======================================================================================= */
_______________________________________________ Libevent-users mailing list Libevent-users@monkey.org http://monkey.org/mailman/listinfo/libevent-users