2016-01-14 52 views
0

故事 - 我在一個有根的Android Wear設備上獲得了一個腳本文件,我想用我的C++代碼運行它。Android上的C++代碼 - execl()函數調用失敗

首先我試過這個int ret = system(/system/bin/sh /full/path/a.sh),原來每次都用system()返回代碼127 - 命令不存在錯誤。

我在這裏發現了這個解決辦法:system is returning error 127 when called from c++ in linux和我一樣@Nikhilendra說:

int ret = execl("/system/bin/sh","/system/bin/sh","/full/path/a.sh",(char*)NULL)

現在我的C++代碼墜毀在這一行每一次,即使沒有返回值,所以我不能得到任何錯誤代碼在這。

任何幫助,高度讚賞。

EDIT1: 腳本a.sh本身運行正常。

EDIT2: 我的問題可以被理解爲system is returning error 127 when called from c++ in linux

+0

Nikhilendra有三個參數做到了。 – greenapps

+1

可能重複的[系統返回錯誤127當從Linux中調用C++](http://stackoverflow.com/questions/24380594/system-is-returning-error-127-when-called-from-c-in- linux) –

+0

@greenapps其實這是正確的方式,Nikhilendra沒有給出完整的參數列表。 – rickie

回答

0

如果你想使用的exec功能之一模仿system呼叫的跟進,你必須先fork一個新的子進程因爲當前過程(圖像)被exec調用中給出的過程所取代。也就是說,exec只會返回,如果失敗。

我不能說,如果fork系統調用適用於Android。但是,你可以用這個小例子檢查exec電話。我實際上在一臺Linux機器上測試了它。 編輯:您可能必須將sh的路徑更改爲/system/bin/sh

a.sh內容:

#!/bin/sh 
echo "Hello World." 

的C++測試程序的內容(將其稱爲exec_test)。

extern "C" { 
    #include <unistd.h> 
    #include <errno.h> 
} 
#include <iostream> 

int main() 
{ 
    execl("/bin/sh","sh","./a.sh",NULL); 
    // execl only returns if it failed 
    std::cout << "errno: " << errno << std::endl; 
    return 0; 
} 

輸出:

$ ./exec_test 
Hello World.