parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Александр Петросян (PAF) 27.05.2003 17:32

огромное спасибо за помощь.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

const size_t READ_POST_CHUNK_SIZE=0x400*0x400; // 1M

size_t min(size_t a, size_t b) {
        return a<b?a:b;
}

size_t read_post(char *buf, size_t max_bytes) {
        size_t read_size=0;
        do {
                ssize_t chunk_size=read(fileno(stdin),
                        buf+read_size, min(READ_POST_CHUNK_SIZE, max_bytes-read_size));
                if(chunk_size<=0)
                        break;
                read_size+=chunk_size;
        } while(read_size<max_bytes);

        return read_size;
}

int main(){
        char *content_length_cstr=getenv("CONTENT_LENGTH");
        int content_length_int=content_length_cstr?atoi(getenv("CONTENT_LENGTH")):-1;
        char buf[0x400*0x400*2];
        memset(buf, 0, sizeof(buf));
        size_t read_int=read_post(buf, sizeof(buf));

        if(read_int>0)
                buf[read_int]=0;
        printf("content-type:text/plain\n\nlength=%d\ndata_len=%d\ndata='%s'",
                content_length_int,
                read_int,
                buf);
        return 0;
}