程序通訊之三 父程序傳引數與子程序返回值

2021-08-27 10:13:44 字數 1363 閱讀 9342

歡迎關注微博:

前面已經寫了使用wm_copydata訊息來完成程序之間的通訊

1.《程序通訊之一使用wm_copydata c++及c#實現》

然後用了三篇文章來講解如何使用管道技術來完成程序通訊功能。

1.《程序通訊之二

管道技術第一篇

輸入輸出的重定向

》2.《程序通訊之二

管道技術第二篇

匿名管道

》3.《程序通訊之二

管道技術第三篇

命名管道

》本篇介紹乙個簡單而又實用的程序通訊方式——父程序向子程序傳入引數並獲取子程序返回值。這個非常簡單:

1.父程序向子程序傳入引數可以由createprocess()函式來完成,注意子程序是通過getcommandline

()來獲取這個引數而且不是

char *argv。2

.父程序要獲取子程序的返回值可以在等待子程序結束後通過

getexitcodeprocess

並傳入子程序控制代碼來獲取子程序中

main

或winmain

函式的返回值。

下面就結出例項**,首先來看子程序的程式**:

//程序通訊之三 父程序傳引數與子程序返回值

////by morewindows( )

#include #include #include #include #include int main(int argc, char *argv)

然後是父程序的程式**,**中的

adjustprocesscurrentdirectory();

函式可以參考《

windows vc++

調整程序當前目錄為程式可執行檔案所在目錄》(

):

//程序通訊之三 父程序傳引數與子程序返回值

////by morewindows( )

#include #include #include #include // 啟動子程序並傳入引數,等待子程序結束後獲取其返回值。

bool getchildproces***itcode(const char *pstrchildproces***efilename,

char *pstrconmandline,

dword *pdwexitcode, bool fhide = true)

int main()

getch();

return 0;

}

程式執行結果如下:

歡迎關注微博:

父程序與子程序管道

int main else return 0 先在父程序中建立管道,然後建立子程序,子程序複製了父程序管道檔案的檔案描述符,所以父程序和子程序各具有2個管道描述符,當在子程序中關閉讀端,這時關閉的是子程序中管道檔案的讀端,而父程序的讀端沒有關閉,這時子程序往寫段寫資料的時候,因管道讀端未完全關閉,所...

子程序與父程序的簡單應用

示例 在單核處理器裡,絕對的多程序是不存在的,那為什麼大家說也有多程序的存在,單核處理器的多程序實際上使用時間分配的概念做的,如果有同時有幾個程式要跑,那麼處理器就去分配一下。不是絕對的,大家一起執行,多核處理器的程序一般是絕對的,就是大家一起跑。同時進行。為什麼要有用多程序,使用多程序能更好的提高...

SIGCHLD訊號與父程序非同步等待子程序

阻塞式等待 函式,當然waitpid函式當其第三個引數不為 時也是阻塞式等待。非阻塞式等待 輪詢的方式 當waitpid函式當其第三個引數為 是非阻塞式等待。父程序可以阻塞等待子程序結束,也可以非阻塞地查詢是否有子程序結束等待清理 也就是輪詢的方式 若採用阻塞等待方式,父程序就不能處理自己的工作了 ...