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