0
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main (int argc, const char * argv[])
{
    printf("start\n");
    char *const parmList[] = {"/bin/ls", "-l", NULL};
    execv("/bin/ls", parmList);
    return 0;
}

GCC4.2でコンパイルしましたなぜこれがクラッシュするのか考えてみてください。xcodeでエラーメッセージが表示されません。

編集:ユーザーエラー。「クラッシュ」とは、プログラムの実行時にxcodeがフリーズしたことを意味します。続行を押すと正常に機能します。

4

1 に答える 1

2

そのコードは、私の環境、Ubuntu10ではgcc4.4.3で正常に実行およびコンパイルされます。これにより、問題があると思われる問題とは異なる問題が発生していると思います:-)


pax@pax-desktop:~$ ./testprog
start
total 2152
drwxr-xr-x 11 pax pax    4096 2010-10-02 08:23 Pax
: :
----r-S---  1 pax pax       0 2010-08-23 18:58 xyz

pax@pax-desktop:~$ gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

次のコードを試して、実際execが失敗しているかどうかを確認してください。もしそうなら、それはあなたに理由を教えてくれるはずです。そうでない場合は、rc出力がまったく表示されません。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>

int main (int argc, const char * argv[])
{
    int rc;
    printf("start\n");
    char *const parmList[] = {"/bin/ls", "-l", NULL};
    rc = execv("/bin/ls", parmList);
    printf ("rc = %d, errno = %d\n", rc, errno);
    return 0;
}

また、が期待どおりであることを確認してください/bin/ls(たとえば、スクリプトではなく実行可能ファイル)。

そして、「クラッシュ」の意味を明確にする価値があります。出力を生成していないだけですか?コアファイルをダンプしますか?OS全体がひざまずいて、再起動が発生していませんか?

于 2010-10-02T00:27:09.643 に答える