# Visual C++ & C++ Programming > Network Programming >  Sending Posix message via pipe

## perto1

I have following file called helper.h, which I want to call in server and client files later.



```

#ifndef HELPER_H

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include<cstdio>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<climits>
#include<fcntl.h>
/*
 * It will iterate through all the lines in file and
 * put them in given vector
 */
int getFileContent(std::string infileName,std::vector<std::string>& vecOfStrs)
{
    // Open the File to read the content into buffer
    std::ifstream in(infileName.c_str());

    // Check if object is valid
    if (!in)
    {
        throw (std::runtime_error("Cannot open the File : " ));

    }

    std::string str;
    // Read the next line from File until it reaches the end.
    while (std::getline(in, str))
    {
        // Line contains string of length > 0 then save it in vector
        if (str.size() > 0)
            vecOfStrs.push_back(str);
    }

    /*for (const auto& str : vecOfStrs)
        std::cout << str << '\n';*/



    in.close();
    return str.size();

}

int writeFileContent(std::string outfileName, std::vector<std::string>& vecOfStrs){
    std::string str;
    //Open the file to output the read buffer
    std::ofstream out(outfileName.c_str());

    if (!out)
    {
        std::cerr << "Write operation failed.";
        return false;
    }

    //int result = getFileContent("sample.txt", vecOfStrs);//This line should be removed


        for (const auto& row : vecOfStrs)
            out << row << '\n';
    
    out.close();

    return str.size();//str is created but never used re

}//Close of the write function


#endif
```

I want to call it via server named sender.cpp. I want to compare bytes_read and bytes_write and then send it to the receiver. My code is correct till pipe open. How can i proceed after that. 


```

//
// Created by pramah on 4/11/22.
//

#include "helper.h"



int main(){

    return 0;
}
void send(std::string pipe_name, std::string fname) {
    std::cout << "Starting pipeSend.." << std::endl;
    unlink(name.c_str());

    int pd;
    int total=0;
    std::vector<char> buffer(PIPE_BUF);
    std::vector<std::string> vec_str;
    std::ifstream ifs;
    unsigned bytes_read, bytes_write;

    //Pipe created
    if(mkfifo(name.c_str(),0666)==-1){
        throw(std::runtime_error("Sending failed. mkfifo"));
    }

    //Open the pipe
    pd = open(name.c_str(),O_WRONLY);
    if(pd==-1){
        throw(std::runtime_error("Send(): Pipe onpening failed"));
    }

    //Read and write operation
    while(ifs){//infinite loop
        bytes_read=getFileContent(fname, vec_str);
        if(bytes_read<=0) {
            throw(std::runtime_error("Send: readFile"));
        }
    }//reading input stream done

    //Write to pipe
    bytes_write = write(pd,buffer.data(),bytes_read);
    if(bytes_write==-1){
        throw(std::runtime_error("send: write to pipe"));
    }

    if(bytes_read==bytes_write){
        total +=bytes_read;
    }
    else{
        throw(std::runtime_error("send: read write difference"));
    }
    ifs.close();
    close(pd);
    std::cout<<"File deliverd from the pipe."<<std::endl;
    /*


}
```

----------


## VictorN

> ...
> I want to call it via server named sender.cpp. I want to compare bytes_read and bytes_write and then send it to the receiver. My code is correct till pipe open. How can i proceed after that. 
> ...


Why do you throw the runtime_error when *bytes_read > 0*?


```
    //Read and write operation
    while(ifs){//infinite loop
        bytes_read=getFileContent(fname, vec_str);
        if(bytes_read>0) {
            throw(std::runtime_error("Send: readFile"));
        }
    }//reading input stream done
```

----------


## perto1

It should throw error when byte is not read. (Edited)

----------

