piątek, 27 kwietnia 2018

Use pipe (g++ class) Linux

#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