я тут зюзекаунтер на сях наваял аля 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


