Ad esempio questo funziona...
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/poll.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
static void __attribute__((__noreturn__)) fail(const char *s) {
perror(s);
exit(-1);
}
int main(void) {
int fd;
int ret;
char buf[4096];
struct pollfd pfd;
reopen:
fd = open("pipe_name", O_RDONLY|O_NONBLOCK);
if(fd<0) fail("open");
pfd.fd = fd;
pfd.events = POLLIN;
fprintf(stderr, "pipe aperto sul fd %d...\n", fd);
retry:
ret = poll(&pfd, 1, -1);
fprintf(stderr, "poll=%d revents=%d\n", ret, pfd.revents);
if(pfd.revents&POLLIN) {
ret = read(fd, buf, 4095);
fprintf(stderr, "read=%d\n", ret);
if(ret<=0) goto retry;
buf[ret] = '\0';
fprintf(stderr, "recv %s\n", buf);
goto retry;
} else if(pfd.revents&POLLHUP) {
fprintf(stderr, "Hangup!\n");
close(fd);
goto reopen;
} else {
fprintf(stderr, "!?\n");
goto retry;
}
return 0;
}
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
|