eventfd syscall wrapper and read/write wrappers

This commit is contained in:
Rich Felker 2011-05-08 00:03:00 -04:00
parent 11e4b92556
commit 15b77d52c9
4 changed files with 46 additions and 0 deletions

25
include/sys/eventfd.h Normal file
View File

@ -0,0 +1,25 @@
#ifndef _SYS_EVENTFD_H
#define _SYS_EVENTFD_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
typedef uint64_t eventfd_t;
#define EFD_SEMAPHORE 1
#define EFD_CLOEXEC 02000000
#define EFD_NONBLOCK 04000
int eventfd(unsigned int, int);
int eventfd_read(int, eventfd_t *);
int eventfd_write(int, eventfd_t);
#ifdef __cplusplus
}
#endif
#endif /* sys/eventfd.h */

7
src/linux/eventfd.c Normal file
View File

@ -0,0 +1,7 @@
#include <sys/eventfd.h>
#include "syscall.h"
int eventfd(unsigned int count, int flags)
{
return syscall(flags ? SYS_eventfd2 : SYS_eventfd, count, flags);
}

7
src/linux/eventfd_read.c Normal file
View File

@ -0,0 +1,7 @@
#include <sys/eventfd.h>
#include <unistd.h>
int eventfd_read(int fd, eventfd_t *value)
{
return (sizeof(*value) == read(fd, value, sizeof(*value))) ? 0 : -1;
}

View File

@ -0,0 +1,7 @@
#include <sys/eventfd.h>
#include <unistd.h>
int eventfd_write(int fd, eventfd_t value)
{
return (sizeof(value) == write(fd, &value, sizeof(value))) ? 0 : -1;
}