2017-06-17 62 views
-1

我懷疑如何在C中執行一個exec任務。應該如何傳遞參數(例如:3,+,2)?它會用於管道嗎?或者由argv儘管是int?而且,如果這個執行是由孩子拋出的,那麼父母是否會從管道中讀取該值? 謝謝!execvp(「/ usr/bin/bc」,arg,env)

+1

由於'bc'需要文件名作爲參數,你要麼必須爲'3 + 2'安排發送到它的標準輸入(pipe?),或者將'3 + 2'寫入文件並告訴'bc'處理文件(並在稍後刪除文件)。 'execvp()'系統調用只需要兩個參數,通常是'execvp(argv [0],argv)',用於某些以NULL結尾的字符串向量。 'argv [0]'的值將是'bc' - 如果指定了路徑,那麼使用'execvp()'而不是'execv()'沒有意義。 –

+0

非常感謝! 我把這個: sprintf(str1,「%d」,num1); \t \t sprintf(strop,「%d」,operando); \t \t sprintf(str2,「%d」,num2); \t \t strcat(str,str1); \t \t strcat(str,strop); \t \t strcat(str,str2); \t \t char * argumentsos [] = {「bc」,str}; \t \t execvp(「/ usr/bin/bc」,argumentsos); 會嗎?在我嘗試通過一個管道的值3 + 2之前,我還嘗試創建一個輔助文件,在那裏我寫了3 + 2並將該文件傳遞給了BC的執行程序....在任何情況下,我都設法恢復父級結果的值。有任何想法嗎?謝謝。 – ssuarez

+0

@ssuarez:在這個頁面的右邊,你會看到一個標有**「Related」**的部分,你可能會發現這個[question](https://stackoverflow.com/questions/40995172 /寫入-A-術語到BC-通管式-C)。查看接受的答案。查看相關問題總是很好:) – rici

回答

0

arg應該是一個字符串。就像參數在終端中輸入一樣。如果您有多個整數參數,則必須先將它們轉換爲字符串表示形式。至於env,你可以通過你在main()得到了env,或一個空的環境,如:

char *env[] = { NULL }; 
+0

「bc」的參數是文件名,而不是表達式。 – rici

+0

出於某種原因,OP提及通過「3,+,2」。 –

+1

如果OP知道如何做他們想做的事,他們就不會在這裏問一個問題。 :)'execvp'也不會帶'env'參數;如果你想傳遞一個環境,你需要'execvpe',但是在這種情況下沒有太多需要。 – rici