Portál AbcLinuxu, 10. listopadu 2025 07:14
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.