您的位置:首页 > 编程语言 > C语言/C++

学习VC++深入浅出——命名管道的使用

2008-03-19 23:08 495 查看
 学习VC++深入浅出——命名管道的使用


HANDLE  hPipe;




void CNamedPipeSrvView::OnPipeCreate() 




...{


    // TODO: Add your command handler code here


    hPipe= CreateNamedPipe("//./pipe/MyPipe",


        PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED,0,


        1,1024,1024,0,NULL);


    if(INVALID_HANDLE_VALUE ==hPipe)




    ...{


        MessageBox("创建命名管道失败!");


        hPipe= NULL;


        return ;


    }


    HANDLE hEvent;


    hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);


    if(!hEvent)




    ...{


        MessageBox("创建事件对象失败");


        CloseHandle(hPipe);


        hPipe =NULL;


        return ;


    }


    OVERLAPPED ovlap;


    ZeroMemory(&ovlap,sizeof(OVERLAPPED));


    ovlap.hEvent = hEvent;


    if(!ConnectNamedPipe(hPipe,&ovlap))




    ...{


        if(ERROR_IO_PENDING!=GetLastError())




        ...{


            MessageBox("等待客户端连接失败!");


            CloseHandle(hPipe);


            CloseHandle(hEvent);


            hPipe =NULL;


            return ;


        }


    }


    if(WAIT_FAILED==WaitForSingleObject(hEvent,INFINITE))




    ...{


        MessageBox("等待对象失败!");


        CloseHandle(hPipe);


        CloseHandle(hEvent);


        hPipe =NULL;


        return ;


    }


    CloseHandle(hEvent);


}


void CNamedPipeSrvView::OnPipeRead() 




...{


    // TODO: Add your command handler code here


    char buf[100];


    DWORD dwRead;


    if(!ReadFile(hPipe,buf,100,&dwRead,NULL))




    ...{


        MessageBox("读取数据失败!");


        return ;


    }


    MessageBox(buf);


}




void CNamedPipeSrvView::OnPipeWrite() 




...{


    // TODO: Add your command handler code here


    char buf[]="http://zhangdali.org";


    DWORD dwWrite;


    if(!WriteFile(hPipe,buf,strlen(buf)+1,&dwWrite,NULL))




    ...{


        MessageBox("写入数据失败!");


        return ;


    }


}






void CNamedPipeCltView::OnPipeWrite() 




...{


    // TODO: Add your command handler code here


    char buf[]="http://zhangdali.org";


    DWORD dwWrite;


    if(!WriteFile(hPipe,buf,strlen(buf)+1,&dwWrite,NULL))




    ...{


        MessageBox("写入数据失败!");


        return ;


    }


}




void CNamedPipeCltView::OnPipeRead() 




...{


    // TODO: Add your command handler code here


    char buf[100];


    DWORD dwRead;


    if(!ReadFile(hPipe,buf,100,&dwRead,NULL))




    ...{


        MessageBox("读取数据失败!");


        return ;


    }


    MessageBox(buf);


}




void CNamedPipeCltView::OnPipeConnect() 




...{


    // TODO: Add your command handler code here


    if(!WaitNamedPipe("//./pipe/MyPipe",


        NMPWAIT_WAIT_FOREVER))




    ...{


        MessageBox("当前没有可利用的命名管道实例!");


        return ;


    }


    hPipe =CreateFile("//./pipe/MyPipe",GENERIC_READ|GENERIC_WRITE,


        0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);


    if(INVALID_HANDLE_VALUE ==hPipe)




    ...{


        MessageBox("打开命名管道!");


        hPipe =NULL;


        return ;


    }


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vc++ null file access io