1 /*
2 * Copyright (C) 2020-2021 Alibaba Group Holding Limited
3 */
4 #include <stdlib.h>
5 #include <fcntl.h>
6 #include <stdio.h>
7 #include "aos/vfs.h"
8 #include "epoll.h"
9 #if AOS_COMP_CLI
10 #include "aos/cli.h"
11 #endif
12
13 extern int epoll_vfs_test_device_init(void);
14 extern int epoll_vfs_test_device_deinit(void);
15
epoll_example()16 static void epoll_example()
17 {
18 int ret;
19 int test_fd = -1;
20 int epoll_fd = -1;
21 int val = 2;
22 int read_val = 0;
23 struct epoll_event event;
24 struct epoll_event wait_event[2] = {0};
25
26 test_fd = aos_open("/dev/test", O_RDWR);
27 if(test_fd < 0) {
28 printf("open test device err\r\n");
29 return;
30 }
31
32 epoll_fd = epoll_create(0);
33 if (epoll_fd < 0) {
34 printf("epoll create failed\r\n");
35 goto err;
36 }
37
38 event.events = EPOLLIN;
39 event.data.fd = test_fd;
40 ret = epoll_ctl(epoll_fd, EPOLL_CTL_ADD, test_fd, &event);
41 if (ret < 0) {
42 printf("epoll_ctl:add fd failed\r\n");
43 goto err;
44 }
45 ret = epoll_wait(epoll_fd, wait_event, 2, 1000);
46 printf("epoll wait timeout:ret = %d\r\n", ret);
47
48 aos_write(test_fd, &val, sizeof(val));
49
50 ret = epoll_wait(epoll_fd, wait_event, 2, 1000);
51 printf("epoll_wait,ret = %d\r\n", ret);
52 printf("epoll_wait,get event, fd = %d, event = %d\r\n", wait_event[0].data.fd, wait_event[0].events);
53
54 aos_read(test_fd, &read_val, sizeof(read_val));
55 printf(" read fd =%d, data = %d \r\n", test_fd, read_val);
56 err:
57 aos_close(test_fd);
58 aos_close(epoll_fd);
59 }
60
61
epoll_comp_example(int argc,char ** argv)62 static void epoll_comp_example(int argc, char **argv)
63 {
64 /* init a test vfs device for poll and select */
65 epoll_vfs_test_device_init();
66
67 epoll_example();
68
69 epoll_vfs_test_device_deinit();
70 return;
71 }
72
73 #if AOS_COMP_CLI
74 /* reg args: fun, cmd, description*/
75 ALIOS_CLI_CMD_REGISTER(epoll_comp_example, epoll_example, epoll API base example)
76 #endif
77