pipe基本使用

2021-08-14 20:02:28 字數 2365 閱讀 7007

一、基本函式介紹

bool createpipe( //建立管道

phandle hreadpipe, //管道讀資料控制代碼

phandle hwritepipe, //管道寫資料控制代碼

plsecurity_attributes lppipeattributes, //安全屬性,成員binherthandle表示子程序是否可繼承

dword nsize //管道緩衝區大小,0代表預設緩衝區代銷

) 安全屬性結構體如下:

typedef struct _security_attrbutessecurity_attrbutes,*plsecurity_attributes;

typedef struct _startupinfo startupinfo, *lpstartupinfo;

typedef struct_process_informationprocess_information;

二、匿名管道:只用於父子程序

建立匿名管道

security_attributes sa;

sa.binherithandle = true;

sa.nlength = sizeof(security_attributes);

sa.lpsecuritydescriptor = null;

if (!createpipe(&hread, &hwrite, &sa, 0))

startupinfo sui;

zeromemory(&sui, sizeof(startupinfo));

sui.cb = sizeof(startupinfo);

sui.dwflags = startf_usestdhandles;

sui.hstdinput = hread;

sui.hstdoutput = hwrite;

sui.hstderror = getstdhandle(std_error_handle);

process_information pi;

if (!createprocess(l"..\\debug\\pipechild.exe", null, null

, null, true, 0, null, null, &sui, &pi))

closehandle(pi.hprocess);

closehandle(pi.hthread);

讀取資料

char szbuf[100] = ;

dword dwread;

if (!readfile(hread, szbuf, 100, &dwread, null))

cstring strdata(szbuf);

messagebox(strdata);

寫入資料

char szdata = "parent:this is a test";

dword dwwrite;

if (!writefile(hwrite, szdata, strlen(szdata) + 1, &dwwrite, null))

tips:在子程序需要獲取父程序建立時指定的管道操作控制代碼

三、命名管道

建立管道

hpipe = createnamedpipe(l"\\\\.\\pipe\\mypipe", pipe_access_duplex

if (invalid_handle_value == hpipe)

//建立那麼人工重置事件物件

handle hevent = createevent(null, true, false, null);

if (null == hevent)

ovlap.hevent = hevent;

if (!connectnamedpipe(hpipe, &ovlap))

}if (wait_failed == waitforsingleobject(hevent, infinite))

closehandle(hevent);

連線管道

if (!waitnamedpipe(l"\\\\.\\pipe\\mypipe", nmpwait_wait_forever))

hpipe = createfile(l"\\\\.\\pipe\\mypipe", generic_read

| generic_write, 0, null, open_existing, file_attribute_normal, null);

if (invalid_handle_value == hpipe)

管道讀寫和匿名管道保持一致

pipe函式使用

dup 和dup2 pthread join 2008 12 11 15 45 54 分類 天天向上 標籤 字型大小 大中小訂閱 pipe 建立管道 表頭檔案 include 定義函式 int pipe int filedes 2 函式說明 pipe 會建立管道,並將檔案描述詞由引數 filedes...

Linux管道pipe使用例項

函式 include int pipe int filedes 2 描述pipe 函式建立乙個管道和指向該管道的一對檔案描述符,並且將檔案描述符儲存到檔案描述符陣列filedes中。其中filedes 0 為讀端,filedes 1 為寫端。返回值0 管道建立成功 1 管道建立失敗,同時errno置...

例項 Linux管道pipe的使用

例項 linux管道pipe的使用 moakap總結 函式 include int pipe int filedes 2 描述 pipe 函式建立乙個管道和指向該管道的一對檔案描述符,並且將檔案描述符儲存到檔案描述符陣列filedes中。其中filedes 0 為讀端,filedes 1 為寫端。返...