开发者

debugging server's cgi program

开发者 https://www.devze.com 2023-03-10 01:46 出处:网络
i am trying to make a webserver in C which can handle request to dynamic contents. the webserver part is finish already. i\'m trying to execute the following command:

i am trying to make a webserver in C which can handle request to dynamic contents. the webserver part is finish already. i'm trying to execute the following command:

http://localhost:1601/cgi-bin/test?3&7

with the code of program test is as follow:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <assert.h>
#include <fcntl.h>
#include <errno.h>
#include <wordexp.h>
#define MAXLINE 300

int m开发者_开发问答ain(int narg, char * arg[]) {
    char *buf, *p;
    char arg1[MAXLINE], arg2[MAXLINE], content[MAXLINE];
    int n1=0, n2=0;

    /* Extract the two arguments */
    if ((buf = getenv("QUERY_STRING")) != NULL) {
    p = strchr(buf, '&');
    *p = '\0';
    strcpy(arg1, buf);
    strcpy(arg2, p+1);
    n1 = atoi(arg1);
    n2 = atoi(arg2);
    }

    /* Make the response body */
    sprintf(content, "Welcome to add.com: ");
    sprintf(content, "%sTHE Internet addition portal.\r\n<p>", content);
    sprintf(content, "%sThe answer is: %d + %d = %d\r\n<p>",
        content, n1, n2, n1 + n2);
    sprintf(content, "%sThanks for visiting!\r\n", content);

    /* Generate the HTTP response */
    printf("Content-length: %d\r\n", (int)strlen(content));
    printf("Content-type: text/html\r\n\r\n");
    printf("%s", content);
    if (fork()==0) {
        printf("asdfagloiauergauhfgaiudfhg");
        execvp("ls",arg);
        printf("child of adder error");
    }
    printf("%s", content);

    fflush(stdout);
    exit(0);
}
/* $end adder */

It run well. However, i wonder why the child code (the line printf("asdfagloiauergauhfgaiudfhg"); and execvp) didn't print out to the webserver's output. although everything else in test output correctly.


For starters you set the Content-length header to the length of the content, then sent the content, then sent more data in both threads. The browser is within its rights to ignore everything after content-length bytes in the output stream.

0

精彩评论

暂无评论...
验证码 换一张
取 消