#include #include #include #include #include #include #include #define NUM 3 static void *sendproc(void *arg) { int fd = (int)arg; char result = 42; sleep(2); /* Some task that takes a long time */ send(fd, &result, sizeof(result), 0); return NULL; } int main() { int pair[2], fd, i, ret; pid_t pid; pthread_t t; char result; const char *name; socketpair(AF_UNIX, SOCK_STREAM, 0, pair); pid = fork(); if (pid < 0) { printf("fork error.\n"); return 1; } if (pid) { fd = pair[0]; close(pair[1]); name = "parent"; } else { fd = pair[1]; close(pair[0]); name = "child"; } for (i = 0; i < NUM; ++i) { printf("%s loop %d\n", name, i); fflush(stdout); pthread_create(&t, NULL, &sendproc, (void *)fd); ret = recv(fd, &result, 1, 0); if (ret != 1) { printf("recv error %d %s.\n", errno, strerror(errno)); return 1; } printf("%s got %d, continue\n", name, (int)result); fflush(stdout); } printf("%s done\n", name); return 0; }