2015-05-06 36 views
1

我有一個C程序,xyz.c它對某個變量進行了一些計算,比如transferme。我想傳遞這個變量/將這個變量傳遞給另一個C程序,比如jkl.c如何在兩個C程序之間發送變量

我一直在努力做到以下幾點:

的xyz.c和使用execvp()這個transferme傳遞給jkl.c的可執行[原來execvp將只接受路徑爲二進制可執行文件或shell腳本]

正在發生的事情是,

  1. execvp()不調變量,它需要const char *作爲參數的類型。
  2. 將路徑傳遞給二進制可執行文件不起作用。 [我試過一個簡單的分叉和execvp,但不嘗試傳遞變量。]

任何人都可以請:

  1. 告訴我怎麼用execvp()這裏在這種情況下?二進制可執行文件在主文件夾中,比如路徑是/home/user/jkl.o
  2. 告訴我如何將該變量傳遞給其他程序?

我試圖調查pipe,但我得到更多的困惑。

編輯:我的意思是jkl.out

+1

'XYZ。 c'和'jkl.c'不是程序,它們是_source files_ – Eregrith

+1

只是爲了確認,'jkl.c'是另一個源代碼文件還是可執行文件? – user1978011

+1

它們每個都有'main'功能嗎? – Eregrith

回答

0

你有serveral的方式將數據傳輸到另一個程序。 (pipin',files,and way more。稍後我可以編輯我的答案,並在必要時給出有關在兩個C程序之間發送數據的更加標準的指南) 讓我們來看看execl()您的情況。

我們必須首先同意程序jkl.o將由您的主程序啓動,並將接收包含參數的字符串作爲其開始參數。

讓我們看看execl的()的男人:

的爲const char * ARG和隨後的橢圓在execl的()),execlp(, 和execle()函數可以被認爲是爲arg0 ,arg1,...,argn。 它們一起描述了一個或多個指向 空指針字符串的列表,該指針表示可用於 執行的程序的自變量列表。按照慣例,第一個參數應該指向 與正在執行的文件關聯的文件名。 參數列表必須由NULL指針終止,並且,因爲這些是可變參數函數,所以此指針必須被強制轉換(char *)NULL。

好的。所以你首先必須給execl()你的路徑,然後在每一行中添加一個參數。你指出你需要分叉,這是真的。所以讓我們這樣做,我們分叉,然後我們發送一個包含你的transferme的字符串。我將假設這個變量是一個常規字符串。

child_pid = fork() 
/* fork() == 0 for child process */ 

    if(child_pid == 0) 
    { 
     /*executing jkl.o */ 
     execl("/home/user/a.out", "a.out" , transferme); /* with a.out being your second program, you can change that to whatever you'd want*/ 
    } 
/* parent stuff*/ 

這應該可以做到。


[更新自評:]

我忘了argv[0](即execl第二個參數必須是程序本身的名稱。),所以儘量

execl("/home/user/d.out", "d.out", transferme, (char*) NULL); 
+0

'execl'如何執行一個沒有'__start()'的對象文件? – Eregrith

+1

@Eregrith是的,我只是沒有想到的C/C,我編輯我的答案,現在它的第二個程序,謝謝你的頭 – Mekap

+0

@Mekap好吧,這樣的作品!還有一個問題。我在哪裏收到'transferme'?我在jkl.c的main中打印argv [1],但只打印'null'。我的execl()調用:'execl(「/ home/user/d.out」,transferme,(char *)NULL);' – complextea

相關問題