سؤال

#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.

تحرير: خطأ المستخدم. "Crash" يعني تجميد Xcode عندما كان يدير البرنامج. الضغط على الاستمرار يعمل بشكل جيد.

هل كانت مفيدة؟

المحلول

يتم تشغيل هذا الرمز وتجمع بشكل جيد في بيئتي ، GCC 4.4.3 تحت Ubuntu 10. هذا يقودني إلى الاعتقاد بأن لديك مشكلة مختلفة عن تلك التي تعتقد أن لديك :-)


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 هو ما تتوقعه أن يكون (قابل للتنفيذ ، وليس نصًا ، على سبيل المثال).

ويستحق توضيح ما تعنيه بـ "Crash". هل هو فقط لا تنتج أي ناتج؟ انها إلقاء ملف أساسي؟ هل يجلب نظام التشغيل بالكامل إلى ركبتيه ، مما يسبب إعادة تشغيل؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top