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。重定向 顧名思義就是將標準的輸入和輸出位置重新定向 覆蓋重定向 每一次的輸出都要覆蓋原始檔中的內...