日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

windows pipe

發(fā)布時間:2023/12/15 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 windows pipe 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

管道分為 匿名管道命名管道
1.匿名管道僅僅能在父子進程間進行通信。不能在網(wǎng)絡(luò)間通信,并且傳輸數(shù)據(jù)是單向的。僅僅能一端寫,還有一端讀。

2.命令管道能夠在隨意進程間通信。通信是雙向的,隨意一端都可讀可寫,可是在同一時間僅僅能有一端讀、一端寫。

每個 命名管道 都有一個唯一的名字以區(qū)分于存在于系統(tǒng)的命名對象列表中的其它命名管道。管道server在調(diào)用CreateNamedPipe()函數(shù)創(chuàng)建命名管道的一個或多個實例時為其指定了名稱。

對于管道客戶機。則是在調(diào)用CreateFile()或CallNamedPipe()函數(shù)以連接一個命名管道實例時對管道名進行指定。

命名管道的命名規(guī)范與郵槽有些相似。對其標識也是採用的UNC格式:

\ServerPipe[Path]Name 

當中。第一部分Server指定了server的名字,命名管道服務(wù)即在此server創(chuàng)建。其字串部分可表示為一個小數(shù)點(表示本機)、星號(當前網(wǎng)絡(luò)字段)、域名或是一個真正的服務(wù);第二部分Pipe與郵槽的Mailslot一樣是一個不可變化的硬編碼字串,以指出該文件是從屬于NPFS;第三部分[Path]Name則使應(yīng)用程序能夠唯一定義及標識一個命名管道的名字。并且能夠設(shè)置多級文件夾。

服務(wù)端使用函數(shù):

CreateNamedPipe(); // 創(chuàng)建管道  
ConnectNamedPipe(); // 堵塞。等待client連接

client使用函數(shù):

CreateFile(); // 打開(連接)管道  

兩方共用函數(shù)

WriteFile();  
ReadFile(); // 堵塞,使用方便  
CloseHandle(); // 關(guān)閉管道,斷開連接

server端代碼演示樣例:

#include <stdio.h>  
#include <windows.h>  

#define PIPE_NAME L"\\.\Pipe\test"  

HANDLE g_hPipe = INVALID_HANDLE_VALUE;  

int main()  
{  
    char buffer[1024];  
    DWORD WriteNum;  

    printf("test server.
");  
    g_hPipe = CreateNamedPipe(PIPE_NAME, PIPE_ACCESS_DUPLEX,   
            PIPE_TYPE_BYTE|PIPE_READMODE_BYTE , 1, 0, 0, 1000, NULL);  
    if(g_hPipe == INVALID_HANDLE_VALUE)  
    {  
        printf("Create name pipe failed!
");  
        goto out;  
    }  

    printf("Wait for connect...
");  
    if(ConnectNamedPipe(g_hPipe, NULL) == FALSE)  
    {  
        printf("Connect failed!
");  
        goto out;  
    }  
    printf("Connected.
");  

    while(1)  
    {  
        scanf("%s", &buffer);  
        if(WriteFile(g_hPipe, buffer, (DWORD)strlen(buffer), &WriteNum, NULL) == FALSE)  
        {  
            printf("Write failed!
");  
            break;  
        }  
    }  

out:  
    printf("Close pipe.
");  
    CloseHandle(g_hPipe);  
    system("pause");  
    return 0;  
}  

client代碼演示樣例:

#include <stdio.h>  
#include <windows.h>  

#define PIPE_NAME L"\\.\Pipe\test"  

HANDLE g_hPipe = INVALID_HANDLE_VALUE;  

int main()  
{  
    char buffer[1024];  
    DWORD ReadNum;  

    printf("test client.
");  

    g_hPipe = CreateFile(PIPE_NAME, GENERIC_READ | GENERIC_WRITE,   
            0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);  
    if (g_hPipe == INVALID_HANDLE_VALUE)  
    {  
        printf("Connect pipe failed!
");  
        goto out;  
    }  
    printf("Connected.
");  

    while(1)  
    {  
        if(ReadFile(g_hPipe, buffer, sizeof(buffer), &ReadNum, NULL) == FALSE)  
        {  
            break;  
        }  
        buffer[ReadNum] = 0;  
        printf("%s
", buffer);  
    }  
out:  
    printf("Close pipe.
");  
    CloseHandle(g_hPipe);  
    system("pause");  
    return 0;  
}  

總結(jié)

以上是生活随笔為你收集整理的windows pipe的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。