я тут зюзекаунтер на сях наваял аля top.mail.ru , кто пропатчит до супермегасчетчика?? Т.к. эта собака на моем супермегасервере пентиум 90 с 32 мегами оперативы после 200-го юзера начинает сильно подтормаживать.... ну типа просто ради исскуства. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> #include "gd.h" #include "gdfontl.h" #include "gdfonts.h" #define HTML_DIR1 "/var/www/html/count/ip.txt" #define MAX_WORDS 12000 #define MAX_WORD_LEN 14 #define MAX_SENTENCE_LEN (MAX_WORDS * MAX_WORD_LEN) int tokenize(); int eliminate_duplicates(); int print_words(); int main(void) { char sentence[MAX_SENTENCE_LEN], words[MAX_WORDS * MAX_WORD_LEN]; char *full_path1 = HTML_DIR1; gdImagePtr im; int bg_color,fore_color,num_words,num1,num2; FILE *fp = NULL; int access_count; char str1[10]; char str2[10]; int i, k; im = gdImageCreate(80, 18); bg_color = gdImageColorAllocate(im, 0, 0, 0); fore_color = gdImageColorAllocate(im, 255, 255, 255); fp = fopen(full_path1,"a"); fprintf(fp,"%s ",getenv("REMOTE_ADDR")); fclose(fp); fp = fopen(full_path1,"r"); fgets(sentence, MAX_SENTENCE_LEN, fp); fclose(fp); num_words = tokenize(sentence,words); num2=eliminate_duplicates(words,num_words); num1=print_words(words,num_words); sprintf(str1, "%d", num_words); sprintf(str2, "%d", num1); gdImageString(im, gdFontSmall, 2, 1, str1, fore_color); gdImageString(im, gdFontSmall, 60, 1, str2, fore_color); printf("Content-type: image/png\n\n"); gdImagePng(im, stdout); gdImageDestroy(im); return 0; } int tokenize(char sentence[MAX_SENTENCE_LEN], char words[MAX_SENTENCE_LEN]){ int i = 0; char separators[] = " ", *token; token = strtok(sentence,separators); while(token != 0){ strcpy(&words[i * MAX_WORD_LEN],token); token = strtok(0,separators); ++i; } return i; } int eliminate_duplicates(char words[MAX_WORDS * MAX_WORD_LEN], int num_words){ int i, j, e;e=0; for(i = 0; i < num_words; ++i){ for(j = 0; j < num_words; ++j){ if(j != i){ if((words[i * MAX_WORD_LEN] != '\0') && (words[j * MAX_WORD_LEN] != '\0')){ if(strstr(&words[j * MAX_WORD_LEN],&words[i * MAX_WORD_LEN]) != 0){ words[j * MAX_WORD_LEN] = '\0'; e++; } } } } } return e; } int print_words(char words[MAX_WORDS * MAX_WORD_LEN], int num_words){ int i,k; k=0; for(i = 0; i < num_words; ++i){ if(words[i * MAX_WORD_LEN] != '\0'){ // printf("%s ",&words[i * MAX_WORD_LEN]); k++; } } // printf ("%d\n",k); return k; }
Перемещено JB из Talks