diff options
author | Sumit Garg <sumit.garg@linaro.org> | 2021-05-05 12:38:32 +0530 |
---|---|---|
committer | Sumit Garg <sumit.garg@linaro.org> | 2021-05-05 12:38:32 +0530 |
commit | 6b1ba40bb2ca4dc3797e0f30b9e8b3ee1acddd0f (patch) | |
tree | 7fefa215ee9e09633a255f349804af226a61cd10 /meta-rtmod1/model_answer/files/rt-sysfs-poll.c | |
parent | 0464688d2d79ea0122467273e681930362feae22 (diff) |
meta-rtmod1: Add sysfs polling lab materialhardknott
Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
Diffstat (limited to 'meta-rtmod1/model_answer/files/rt-sysfs-poll.c')
-rw-r--r-- | meta-rtmod1/model_answer/files/rt-sysfs-poll.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/meta-rtmod1/model_answer/files/rt-sysfs-poll.c b/meta-rtmod1/model_answer/files/rt-sysfs-poll.c new file mode 100644 index 0000000000..8d0a5314e9 --- /dev/null +++ b/meta-rtmod1/model_answer/files/rt-sysfs-poll.c @@ -0,0 +1,52 @@ +/* Copyright (C) 2021 by Linaro */ +/* Permission to use, copy, modify, and/or distribute this software for any */ +/* purpose with or without fee is hereby granted. */ +/* THE SOFTWARE IS PROVIDED AS IS AND THE AUTHOR DISCLAIMS ALL WARRANTIES */ +/* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR */ +/* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */ +/* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN */ +/* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF */ +/* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#include <stdint.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <poll.h> + +#define TEST_SYSFS_NOTIFY "/sys/demo-poll/notify" + +int main(void) +{ + int notify_fd, rv, cnt; + char attr_data[100]; + struct pollfd ufds; + + if ((notify_fd = open(TEST_SYSFS_NOTIFY, O_RDWR)) < 0) { + printf("Unable to open %s", TEST_SYSFS_NOTIFY); + exit(1); + } + + cnt = read(notify_fd, attr_data, 100); + lseek(notify_fd, 0, SEEK_SET); + ufds.fd = notify_fd; + ufds.events = POLLPRI | POLLERR; + ufds.revents = 0; + + if ((rv = poll(&ufds, 1, 100000)) < 0) { + perror("poll error"); + } else if (rv == 0) { + printf("Timeout occurred!\n"); + } else if (ufds.revents & (POLLPRI | POLLERR)) { + cnt = read(notify_fd, attr_data, 100); + printf("sysfs_notify() triggered, revents: %08X," + " attribute data[%d] %s", ufds.revents, cnt, attr_data); + } + + close(notify_fd); +} |