View Single Post
Old 26-07-2004, 14:22   #11
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Cittā: Roma
Messaggi: 15625
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
ilsensine č offline   Rispondi citando il messaggio o parte di esso