eventfd syscall wrapper and read/write wrappers
This commit is contained in:
parent
11e4b92556
commit
15b77d52c9
4 changed files with 46 additions and 0 deletions
25
include/sys/eventfd.h
Normal file
25
include/sys/eventfd.h
Normal 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
7
src/linux/eventfd.c
Normal 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
7
src/linux/eventfd_read.c
Normal 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;
|
||||||
|
}
|
||||||
7
src/linux/eventfd_write.c
Normal file
7
src/linux/eventfd_write.c
Normal 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;
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue