私はそれがない、すべてが非常に簡単に次のようなシステムコールを使用しようとしている 、シンプルなユーティリティ(カーネル3.4.67)をコンパイルしよう:あなたが見ることができるように、システムコールが失敗し、システムコールが失敗するのはなぜですか?
int main(void)
{
int rc;
printf("hello 1\n");
rc = system("echo hello again");
printf("system returned %d\n",rc);
rc = system("ls -l");
printf("system returned %d\n",rc);
return 0;
}
はまだありません次のログ:
[email protected]_kk:/ # /sdcard/test
hello 1
system returned 32512
system returned 32512
私はを以下のようにコンパイル:
arm-linux-gnueabihf-gcc -s -static -Wall -Wstrict-prototypes test.c -o test
私は過去にさまざまなLinuxでシステムを使用していて、それに問題は一度もなかったので、これは本当に面白いです。 私はさらに別のクロスcpompilerを試みましたが、私は同じ失敗を受けます。カーネルの
バージョン&クロスコンパイラ:
# busybox uname -a
Linux localhost 3.4.67 #1 SMP PREEMPT Wed Sep 28 18:18:33 CST 2016 armv7l GNU/Linux
arm-linux-gnueabihf-gcc --version
arm-linux-gnueabihf-gcc (crosstool-NG linaro-1.13.1-4.7-2013.03-20130313 - Linaro GCC 2013.03) 4.7.3 20130226 (prerelease)
EDIT:
[email protected]_kk:/ # echo hello again && echo $? && echo $0
hello again
0
tmp-mksh
[email protected]_kk:/ #
しかし、私は何か面白いもの見つけた:メインをwithing)(test_expanderを呼んで を、それが動作しますOK。だから、おそらくシステムコールが設立されていないバイナリを見つけようとしているのだろうか?
int test_expander(void)
{
pid_t pid;
char *const parmList[] = {"/system/bin/busybox", "echo", "hello", NULL};
if ((pid = fork()) == -1)
perror("fork error");
else if (pid == 0) {
execv("/system/bin/busybox", parmList);
printf("Return not expected. Must be an execv error.n");
}
return 0;
}
ありがとうございました。
が
蘭シェルでagain'リターンハロー '$エコーは何でしょうか?バッファに "hello again"をコピーして、 'system()'に渡してください。 –
何も返しません(それは問題です)。システムコールのようなことはまったくありません:(なぜわからないのですか? – ransh
前のコマンドで述べたように 'echo'を実行した後、 '$?'を意味していましたか? –