Balan Sinniah wrote: > I am learning parallel processing and I am doing a parallel program using > fork(). My problem is as stated below... [snip] > Can anyone guide me??? Try the attached program. -- Glynn Clements <[EMAIL PROTECTED]>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#define PROCESSES 5
#define CHILDREN (PROCESSES - 1)
void do_sort(void)
{
int result;
if (fscanf(stdin, "%d", &result) != 1)
{
fprintf(stderr, "No input\n");
exit(1);
}
for (;;)
{
int n, hi;
if (fscanf(stdin, "%d", &n) != 1)
break;
if (n < result)
{
hi = result;
result = n;
}
else
hi = n;
fprintf(stdout, "%d\n", hi);
fflush(stdout);
}
fprintf(stderr, "%d\n", result);
fclose(stdout);
}
int main(void)
{
pid_t pids[CHILDREN];
int i;
for (i = 0; i < CHILDREN; i++)
{
pid_t pid;
int fds[2];
if (pipe(fds) < 0)
{
perror("pipe");
exit(1);
}
pid = fork();
if (pid < 0)
{
perror("fork");
exit(1);
}
if (pid == 0)
{
if (dup2(fds[0], STDIN_FILENO) < 0)
{
perror("dup2(in)");
exit(1);
}
if (close(fds[0]) < 0)
{
perror("close(in)");
exit(1);
}
if (close(fds[1]) < 0)
{
perror("close(out)");
exit(1);
}
do_sort();
exit(0);
}
else
{
if (dup2(fds[1], STDOUT_FILENO) < 0)
{
perror("dup2(out)");
exit(1);
}
if (close(fds[0]) < 0)
{
perror("close(in)");
exit(1);
}
if (close(fds[1]) < 0)
{
perror("close(out)");
exit(1);
}
pids[i] = pid;
}
}
do_sort();
for (i = 0; i < CHILDREN; i++)
{
if (wait(NULL) < 0)
{
perror("wait");
exit(1);
}
}
return 0;
}
