Portál AbcLinuxu, 10. května 2025 02:01
int main(void) { int pipe_fd; int ret; int n; struct pollfd ufds[1]; char buff[32]; pipe_fd = mkfifo("./pipe",660); pipe_fd = open("./pipe", O_RDONLY | O_NONBLOCK, 660); ufds[0].fd = pipe_fd; ufds[0].events = POLLIN; ufds[0].revents = 0; while(1) { ret = poll(ufds, 1, 1000); if (ret == -1) { printf("poll error\n"); close (pipe_fd); exit (1); } else if (ret == 0) printf("no data...\n"); else { if (ufds[0].revents == POLLIN) { do { n = read(pipe_fd, buff, 32); if (n == -1) { printf("read error\n"); break; } else printf("recv (%d)\n",n); } while (n != 0); } } } close(pipe_fd); return(0); }slave proces:
int main(void) { int pipe_fd; char buff[32]; pipe_fd = open("./pipe",O_WRONLY | O_NONBLOCK ,660); strcpy(buff, "ahoj"); write(pipe_fd, buff, 5); close(pipe_fd); return(0); }Nevite kde je problem? Dekuji.
do { // Tady Ti chybí poll() nebo select(), který musíš použít vždy, // když máš file descriptor otevřený v neblokujícím režimu, // jelikož ho tam nemáš fce read() je okamžitě opuštěna a proto // Ti to "žere" procesor n = read(pipe_fd, buff, 32); if (n == -1) { printf("read error\n"); break; } else printf("recv (%d)\n",n); } while (n != 0);
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.