/* Bug #22517 */ #define _GNU_SOURCE #include #include #include #include #include #include int main(void) { union { int pipefd[2]; struct { int readfd; int writefd; }; } p; int r; int i; r = pipe2(p.pipefd, O_NONBLOCK); if (r) { error(r, errno, "Failed to create pipe()\n"); return EXIT_FAILURE; } for (i = 0;; i++) { do { r = write(p.writefd, " ", 1); } while (r == -1 && errno == EINTR); /* interrupted by signal */ if (r == -1 && errno == EWOULDBLOCK) { printf("%d\n", i); return EXIT_SUCCESS; } if (r != 1) { error(r, errno, "Failed to write()\n"); return EXIT_FAILURE; } } }