#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
using namespace std;
class PIPE
{
private:
int *base;
int *temp_tab;
bool which_Pid(pid_t pid_value)
{
if(pid_value==(pid_t)0)
return true;
else
return false;
}
bool is_First(int value)
{
int i,sum;
sum=0;
for(i=1;i<value+1;i++)
if(value%i==0)
++sum;
if(sum==2)
return true;
else
return false;
}
void init_Base(int size)
{
int i,j;
i=0;
j=2;
do
{
if(is_First(j))
{
base[i]=j;
++i;
}
++j;
}while(i<size);
}
FILE *temp_stream;
pid_t temp_pid;
void read_Base(FILE *temp_stream)
{
char *temp_buf;
temp_buf=new char[1024];
while(!feof(temp_stream) && fgets(temp_buf,sizeof(temp_buf),temp_stream)!=NULL)
fputs(temp_buf,stdout);
delete temp_buf;
}
void write_Base(int count, FILE *temp_stream)
{
int i;
for(i=0;i<count;i++)
{
fprintf(temp_stream,"%d\n",base[i]);
fflush(temp_stream);
}
}
public:
PIPE()
{
temp_tab=new int[2];
base=new int[1000];
init_Base(1000);
pipe(temp_tab);
temp_pid=fork();
}
void Run(int count)
{
if(which_Pid(temp_pid))
{
close(temp_tab[1]);
temp_stream=fdopen(temp_tab[0],"r");
read_Base(temp_stream);
close(temp_tab[0]);
}
else
{
close(temp_tab[0]);
temp_stream=fdopen(temp_tab[1],"w");
write_Base(count,temp_stream);
close(temp_tab[1]);
}
}
~PIPE()
{
delete temp_tab;
delete base;
}
};
int main(int argc, char **argv)
{
PIPE test_Pipe;
test_Pipe.Run(100);
return 0;
}
Brak komentarzy:
Prześlij komentarz