| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys/select.h>
- #include <errno.h>
- #define DEVICE_PATH "/dev/power"
- #define BUFFER_SIZE 256
- int main() {
- int fd;
- fd_set read_fds;
- struct timeval timeout;
- char buffer[BUFFER_SIZE];
- int ret;
- fd = open(DEVICE_PATH, O_RDONLY | O_NONBLOCK);
- if (fd < 0) {
- perror("open device failed");
- return EXIT_FAILURE;
- }
- printf("Waiting for data from %s (select mode)...\n", DEVICE_PATH);
- while (1) {
- FD_ZERO(&read_fds);
- FD_SET(fd, &read_fds);
- timeout.tv_sec = 5;
- timeout.tv_usec = 0;
- ret = select(fd + 1, &read_fds, NULL, NULL, &timeout);
- if (ret < 0) {
- perror("select error");
- close(fd);
- return EXIT_FAILURE;
- } else if (ret == 0) {
- printf("select timeout after 5 seconds, continue waiting...\n");
- continue;
- }
- if (FD_ISSET(fd, &read_fds)) {
- memset(buffer, 0, BUFFER_SIZE);
- ret = read(fd, buffer, BUFFER_SIZE - 1);
- if (ret < 0) {
- if (errno != EAGAIN) {
- perror("read error");
- }
- continue;
- } else if (ret == 0) {
- printf("device closed? ret=0\n");
- break;
- } else {
- printf("Received %d bytes: %s\n", ret, buffer);
- if (strstr(buffer, "battery") != NULL) {
- printf(" -> Battery related data\n");
- }
- }
- }
- }
- close(fd);
- return EXIT_SUCCESS;
- }
|