Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/signalfd.h>
- #include <signal.h>
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- static void
- transfer_line(FILE* from) {
- char buffer[4096];
- memset(buffer, 0, sizeof(buffer));
- fgets(buffer, sizeof(buffer), from);
- fputs(buffer, stdout);
- fflush(stdout);
- }
- int main(int argc, char** argv) {
- FILE* files[argc-1];
- for (int i = 1; i < argc; i++) {
- files[i - 1] = fopen(argv[i], "r");
- }
- sigset_t block, catch;
- sigfillset(&block);
- sigemptyset(&catch);
- for (int i = 0; i < argc; i++) {
- sigaddset(&catch, SIGRTMIN + i);
- }
- sigprocmask(SIG_BLOCK, &block, NULL);
- int fd = signalfd(-1, &catch, 0);
- struct signalfd_siginfo si;
- int index;
- for(;;) {
- read(fd, &si, sizeof(si));
- index = si.ssi_signo - SIGRTMIN;
- if (0 == index) {
- break;
- } else {
- transfer_line(files[index-1]);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement