niedziela, 23 czerwca 2019

Pipe and fork() - example gcc/Linux

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define size 1000
#define B 2048
int m_First[size];
double sqrt_First[size];
pid_t example_pid;
int temp[2];

int 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 1;
else
 return 0;
}
void init_Arrays()
{
int i,j;
i=0;
j=2;
do
{
if(is_First(j))
{
m_First[i]=j;
sqrt_First[i]=sqrt(1.0*j);
++i;
}
++j;
}while(i<size);
}
void f_P(char *buff)
{
fputs(buff,stdout);
}
void read_File(FILE *str_buffer)
{
char buff[B];
while(!feof(str_buffer) && !ferror(str_buffer) && fgets(buff,sizeof(buff),str_buffer)!=NULL)
f_P(buff);
}
void write_Dates(int count, FILE *str1)
{
int i;
for(i=0;i<count;i++)
{
fprintf(str1,"%d  %f\n",m_First[i],sqrt_First[i]);
fflush(str1); 
}
}
int main(int argc, char **argv)
{
FILE *temp_stream;
int rand_value;
pipe(temp);
example_pid=fork();
srand(time(NULL));
init_Arrays();
rand_value=1+rand()%size;

if(example_pid==(pid_t) 0)
{
close(temp[1]);
temp_stream=fdopen(temp[0],"r");
read_File(temp_stream);
close(temp[0]);
}
else
{
   close(temp[0]);
   temp_stream=fdopen(temp[1],"w");
   write_Dates(rand_value,temp_stream);
   close(temp[1]);
}
return 0;
}

Brak komentarzy:

Prześlij komentarz