如何使用匿名管道輸出重定向

2021-04-02 20:49:47 字數 1674 閱讀 2406

vc++在多程序通訊中有一種很好的方法就是使用管道技術。

對於很多的初學者來說,不知道ide的具體原理是什麼,作者也是一樣,為此迷惑了很多年,也最近才弄清楚

ide是如何整合了其他的命令列軟體的,比如vc中的cc.exe,cl.exe等devc++中的gcc,wintc中整合的tc2.0等。

看起來相當的神秘,其實很簡單的。這些ide就只使用了兩種比較核心的技術:一是建立乙個程序,比如建立一

個cl.exe的程序;二是利用管道與子程序通訊,獲取其執行結果,把過程輸出和結果輸出顯示在ide的輸出中!

ide提供的其他的就是乙個**的編輯環境而已!當然,ide還做了一件幕後的工作就是根據工程的檔案組織生

成了乙個makefile檔案。所以,只要你熟悉這兩種技術,你也可以編寫出乙個ide!

具體我也懶得寫了,給段自己的**出來在這裡,自己除錯下就知道了。

void cdiadlg::ongo()

//´´½¨ò»¸öääãû¹üµà£¬óãà´êä³öðåäöøðⶨïò

handle hread,hwrite;

security_attributes sa;

sa.nlength = sizeof( security_attributes );

sa.binherithandle = true;

sa.lpsecuritydescriptor = null;

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

startupinfo si;

process_information pi;

memset(&si,0,sizeof(si));

//zeromemory(

si.cb = sizeof(startupinfo);

// getstartupinfo(&si);

si.hstderror = hwrite;

si.hstdoutput = hwrite;

si.dwflags = startf_useshowwindow | startf_usestdhandles;

si.wshowwindow = sw_hide;

memset(&si,0,sizeof(pi));

if( !::createprocess(null,

"hello.exe",

null,

null,

1,0,

null,

null,

&si,

&pi) )

closehandle(hwrite);

char buffer[1024] = ;

dword bytesread;

cstring str;

while(true)

str.format("%s",buffer);

trace(str);

m_editstr += str;

updatedata(false);

sleep(200);

} closehandle(pi.hthread);

waitforsingleobject(pi.hprocess,infinite);

closehandle(pi.hprocess);

closehandle(hmutex);

hmutex = null;

}

shell中輸入重定向,輸出重定向,管道

什麼是檔案描述符 1 程序中開啟乙個檔案就會有乙個檔案描述符 2 檔案描述符是乙個非負整數 3 系統為每乙個程序維護乙個檔案描述符表 程序級檔案描述符 4 同乙個程序裡面不同檔案描述符可以對應同乙個檔案 乙個檔案被開啟多次 5 不同程序的檔案描述符可以相同 不影響 可以指向同乙個檔案,也可以指向不同...

linux 管道符 輸出重定向

1 輸出重定向 ll a.txt 將 ll的結果寫入到a.txt 2 管道符 ls la grep h 這條命令的理解為 ls la 的結果作為gerp h 的結果 gerp 是強大的文字搜尋工具 他能使用正規表示式搜尋,grep 格式 主要引數 grep c 只輸出匹配的計數 grep i 不區分...

重定向 管道

1 輸入輸出重定向可分為 標準輸入 由鍵盤輸入 標準輸出 由監視器輸出 錯誤輸出 與標準輸出相同,但是他們是具有各自的資料流,各佔乙個資料流 通常用識別符號對位 標準輸入用0,標準輸出用1,錯誤輸出用2。重定向 顧名思義就是將標準的輸入和輸出位置重新定向 覆蓋重定向 每一次的輸出都要覆蓋原始檔中的內...