This sample read data file "gamma.dat" come with Origin, and send to local "OriginTestPipe" pipe. Here use "LT_execute("sec -p 1");" as time delay to simulate sending a data to pipe every second. See Client Sample
#include <Origin.h> //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// // Start your functions here. #define PIPE_TIMEOUT 10000 #define BUFSIZE 10000 #define PIPENAME "\\\\.\\pipe\\OriginTestPipe" //err will just printf in this function so just return void static void do_pipe_process(HANDLE hPipe, string strFileName = "Samples\\Curve Fitting\\gamma.dat") { stdioFile ff; string strFilename = GetAppPath(TRUE) + strFileName; bool bRet = ff.Open(strFilename, file::modeRead); if(!bRet) { out_str(strFilename + " not found!"); return; } printf("Pipe handle = %X\nHit Escape to abort!\nSending Data..\n", (int)hPipe); waitCursor cur; string strTemp; int ii=0; while(!cur.CheckEsc() && ff.ReadString(strTemp)) { DWORD nWritten, nBytes = strTemp.GetLength()+1; LPSTR lpbuff = strTemp.GetBuffer(nBytes); out_str(lpbuff); // show locally to script window BOOL bSuccess = WriteFile( hPipe, // handle to pipe lpbuff, // buffer to write from nBytes, // number of bytes to write &nWritten, // number of bytes written NULL); // not overlapped I/O if (! bSuccess || nBytes != nWritten) { printf("success=%d, %d bytes written out of %d\n", bSuccess, nWritten, nBytes); break; } // just simulate the speed of slow external hardware data generator // delay 1 sec, LT_execute("sec -p 1"); } ff.Close(); out_str("END!"); } int testpipserver() { BOOL bConnected; HANDLE hPipe; // create named pipe hPipe = CreateNamedPipe( PIPENAME, // pipe name PIPE_ACCESS_DUPLEX, // read/write access PIPE_TYPE_MESSAGE | // message type pipe PIPE_READMODE_MESSAGE | // message-read mode PIPE_WAIT, // blocking mode PIPE_UNLIMITED_INSTANCES, // max. instances BUFSIZE, // output buffer size BUFSIZE, // input buffer size PIPE_TIMEOUT, // client time-out NULL); // no security attribute if (hPipe == INVALID_HANDLE_VALUE) { out_str("Could not CreatePipe: " + PIPENAME); return -1; } printf("%s is setup, waiting for client request.\n", PIPENAME); if(ConnectNamedPipe(hPipe, NULL)) { do_pipe_process(hPipe); DisconnectNamedPipe(hPipe); CloseHandle(hPipe); } else { // The client could not connect, so close the pipe. out_str("failed in connect!"); CloseHandle(hPipe); return -1; } return 0; }