linux新的API signalfd、timerfd、eventfd使用说明——eventfd
2013-01-09 20:35
477 查看
好久没更新了,今天看一下第三种新的fd:eventfd类似于管道的概念,可以实现线程间的事件通知,所不同的是eventfd的缓冲区大小是sizeof(uint64_t)也就是8字节,它是一个64位的计数器,写入递增计数器,读取将得到计数器的值,并且清零。看一下代码:
运行结果:
#include <sys/eventfd.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <stdint.h> /* Definition of uint64_t */ #define handle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0) int main(int argc, char *argv[]) { uint64_t u; int efd = eventfd(10, 0); if (efd == -1) handle_error("eventfd"); int ret = fork(); if(ret == 0) { for (int j = 1; j < argc; j++) { printf("Child writing %s to efd\n", argv[j]); u = atoll(argv[j]); ssize_t s = write(efd, &u, sizeof(uint64_t)); if (s != sizeof(uint64_t)) handle_error("write"); } printf("Child completed write loop\n"); exit(EXIT_SUCCESS); } else { sleep(2); ssize_t s = read(efd, &u, sizeof(uint64_t)); if (s != sizeof(uint64_t)) handle_error("read"); printf("Parent read %llu from efd\n",(unsigned long long)u); exit(EXIT_SUCCESS); } }比较简单,不做过解释。子进程写入命令行中传入的参数,父进程读取其中计数器的值。
运行结果:
./eventfd 10 20 30 Child writing 10 to efd Child writing 20 to efd Child writing 30 to efd Child completed write loop Parent read 70 from efd命令行传入的是10、20、30其和应为60,为啥读取的是70呢?请看15行调用eventfd时第一个参数是10,这个参数是创建eventfd时初始化计数器的值。
相关文章推荐
- linux新的API signalfd、timerfd、eventfd使用说明
- linux新的API signalfd、timerfd、eventfd使用说明——signalfd
- linux新的API signalfd、timerfd、eventfd使用说明
- linux新的API signalfd、timerfd、eventfd使用说明
- linux新的API signalfd、timerfd、eventfd使用说明
- Linux 新的API signalfd、timerfd、eventfd使用说明
- linux新的API signalfd、timerfd、eventfd使用说明
- [转] linux新的API signalfd、timerfd、eventfd使用说明
- linux新的API signalfd、timerfd、eventfd使用说明——timerfd
- linux新的API signalfd、timerfd、eventfd使用说明
- Linux 新的API signalfd、timerfd、eventfd使用说明
- Linux 新的API signalfd、timerfd、eventfd使用说明
- linux新的API signalfd、timerfd、eventfd使用说明——eventfd
- linux中新增系统调用signalfd、timerfd、eventfd使用说明
- linux新的API signalfd、timerfd、eventfd使用说明
- linux新API---signalfd的使用方法
- linux新的API signalfd、timerfd、eventfd使用说明
- linux新的API signalfd、timerfd、eventfd使用说明
- linux新API---signalfd的使用方法
- linux新的API signalfd、timerfd、eventfd使用说明