Aufruf von exec zurück errno 14 (ungültige Adresse) mit absoluten Pfad

in eine einfache cgi-server für einen Kurs. Zu tun, dass in einigen Punkt, den ich machen muss um ein fork/exec zum starten der cgi-handler, das problem ist, dass die exec-immer wieder errno 14. Ich habe versucht den folgenden code in eine standalone-version funktioniert es mit und ohne den absoluten Pfad.

Hier der code:

static void _process_cgi(int fd, http_context_t* ctx)
{
    pid_t childProcess;
    int ret;
    char returnValue[1024];
    log(LOG, "calling cgi", &ctx->uri[1], 0);

    if((childProcess = fork()) != 0)
    {
        ///
        ///Set the CGI standard output to the socket.
        ///
        dup2(fd, STANDARD_OUTPUT);
            //ctx->uri = "/simple.cgi"

        execl("/home/dvd/nwebdir/simple.cgi",&ctx->uri[1]);
        sprintf(returnValue,"%d",errno);

        log(LOG, "exec returned ", returnValue, 0);
        return -1;
    }

    ret = waitpid(childProcess,NULL,0);
    sprintf(returnValue,"%d",ret);
    log(LOG, "cgi returned", returnValue, 0);
}

Hier ist die Liste der sys-Aufrufe, dass der server übergibt vor dem erreichen mein code (in der Reihenfolge):
- chdir
- Gabel
- setpqrp
- Gabel
Ich weiß nicht, ob dies relevant ist oder nicht, aber in meinem test-Programm habe ich nicht chdir noch setpqrp.

Den test-code ist der folgende:

pid_t pid;

    if ((pid = fork()) != 0)
    {
        execl("simple.cgi","simple");
        //execl("/home/dvd/nwebdir/simple.cgi","simple");
        return 0;
    }
    printf("waiting\n");
    waitpid(pid, NULL, 0);
    printf("Parent exiting\n");

Hinweis: ich habe versucht, sowohl die execl und execlp in der server-code.

Finden Sie die grundlegende server-Implementierung (ohne CGI) hier, die einzige Veränderungen die ich gemacht habe war in der web-Funktion:
http://www.ibm.com/developerworks/systems/library/es-nweb/index.html

Hinsichtlich

InformationsquelleAutor DVD | 2012-03-24

Schreibe einen Kommentar