如果你只學了C語言、C++或是JAVA等高級語言,你可能只知道函式間可以相互呼叫,但當你學習了行程的相關知識后,你的視野也就不止于此了,因為各個程式之間其實也是可以相互呼叫的,
如果你學過C語言,你應該有以下認識:
- 一個C程式由很多函陣列成,一個函式可以呼叫另一個函式,同時傳遞給它一些引數,
- 被呼叫的函式執行一定的操作,然后回傳一個值,
- 每個函式都有它自己的區域變數,
- 不同函式通過call/return系統進行通信,
這種通過引數和回傳值,在擁有私有資料的函式間通信的模式是結構化程式設計的基礎,Linux鼓勵將這種應用于程式之內的模式擴展到程式之間,

一個行程可以使用fork創建一個子行程,然后使用exec系列函式將子行程的代碼和資料替換為另一個程式的代碼和資料,之后子行程就用該程式的資料執行該程式的代碼,從而達到程式之間相互呼叫的效果,
pid_t id = fork();
if (id == 0){
execvp(myargv[0], myargv);
exit(1);
}
當這個被呼叫的程式執行完畢后,通過exit(n)來回傳一個值,呼叫它的行程可以通過wait或waitpid來獲取這個回傳值,
wait(&status);
waitpid(id, &status, 0);
程式之間相互呼叫帶來的好處之一
我們都知道各個語言有自己獨特的優勢,當我們做某一技術開發時,可能需要用到多種語言,而我們最終就是利用程式之間的相互呼叫使得各個語言之間可以進行銜接,
例如,一個C程式可以通過exec系列函式呼叫shell腳本、python以及C++等語言實作的程式,
shell腳本:

python:

C++:

我們使用以下C程式,便可以分別呼叫以上三個程式,

呼叫shell腳本運行結果:

呼叫python運行結果:

呼叫C++運行結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/305749.html
標籤:其他
