2014-04-19 16 views
0

讓我們說從主機Linux系統I交叉編譯ARM這樣的代碼:C程序

#include <stdio.h> 
#include <unistd.h> 
#include <dirent.h> 

int main (void) { 

    return execl ("/bin/echo", "echo", NULL); 

} 

我有一個二進制echoFromC

問題出在我的目標上,這個二進制文件會運行,沒有/ bin,/ usr等等,所以它不會執行這個命令。

所以我想最終的二進制文件應該包含執行「回聲」所需的所有東西。它不會尋找/ bin/echo(因爲它不在那裏)。

我該怎麼做?

其實我要實現:

交流計劃
bash> echo 240 > /sys/class/gpio/export 
bash> echo out > /sys/class/gpio/gpio240/direction 
bash> echo 1 > /sys/class/gpio/gpio240/value 

+2

爲什麼首先需要'echo'?爲什麼不在你的C代碼中調用'printf()'? – NPE

+1

你需要在你的程序中實現'echo'而不是調用'system(「/ bin/echo」,...'。 –

+0

你是什麼意思執行echo的一切?你需要找到一個可執行文件的路徑或者只是在標準輸出上打印? – perreal

回答

2

您可以實現用C那些echo功能,例如實施echo 240 > /sys/class/gpio/export,你可以不喜歡

FILE *fh; 

fh = open("/sys/class/gpio/export", "w+"); 
if (fh == NULL) { /* fopen failed */ } 

fwrite("240\n", 1, 4, fh); 

fclose(fh); 
+0

有沒有fwrite中「\ n」的具體要求? – user2799508

+1

@ user2799508'echo'將在其輸出結尾添加一個換行符,除非您使用的是-n選項。 –