Newsgroup: it.comp.lang.c
Titolo: Rieccomi con un problemino [Lungo]

sviluppa le seguenti attività: Con riferimento al programma scansioneLog2.c
che hai svolto in precedenza esegui una scansione riga per riga dell'elenco
contenuto nel file di log t2.log* ed estrai le seguenti informazioni:
q. conta il numero di elementi che sono stati richiesti al server come
pagine, immagini, ecc... (cioè il numero di righe) ;
r. conta il numero di utenti connessi (successione semplice) nel modo
seguente:
s. 159.149.67.22     Conta = 1
t. 159.149.67.22     Conta = 1 (non e' cambiato dal precedente)
u. 159.149.67.22     Conta = 1 (non e' cambiato dal precedente)
v. 151.42.178.106    Conta = 2
w. 151.42.178.106    Conta = 2 (non e' cambiato dal precedente)
x. 151.42.178.106    Conta = 2 (non e' cambiato dal precedente)
y. 151.42.178.106    Conta = 2 (non e' cambiato dal precedente)
z. 159.149.67.22     Conta = 3
aa. 151.42.178.106    Conta = 4
bb. 159.149.67.22     Conta = 5
cc. conta quante volte sono richieste nel file di log t2.log
- le pagine php
- le pagine htm
- le immagini png
- la pagina home /
dd. conta il numero medio di oggetti richiesti dagli utenti come il rapporto
fra il numero di righe (calcolato al punto b) ed il numero di utenti
(calcolato al punto a)
* il file .log è un file log di un server Apache così costruito:
159.149.67.22 - - [02/Apr/2004:10:40:06 +0200] "GET /js/cerca.php HTTP/1.1"
200 530 "
http://www.dti.unimi.it/
" "Mozilla/5.0 (X11; U; Linux i686; en-US;
rv:1.4) Gecko/20030624" 0 
www.dti.unimi.it
Formato ovviamente da parecchie righe
Vi posto il codice che ho scritto
http://rafb.net/paste/results/LFBQBf54.html
Quello che non riesco a fare è contare quante volte sono richieste nel file
di log t2.log
- le pagine php
- le pagine htm
- le immagini png
Ho provato a rifare un ciclo, alla fine del secondo while, che rileggesse
tutti i caratteri fino al '.' e copiasse i tre successivi in un array per
poi confrontarlo con gli altri, ma nulla da fare.
Grazie a tutti.
CiaoMorpheus

 - le immagini png
Puoi cercare tutte le richieste GET, che hanno come delimitatore destro 
l'indicazione del protocollo e della versione (HTTP/1.1, ad es.).
Alla GET sempre segue qualcosa, ti basta catturare l'estensione della 
risorsa richiesta.

"Andrea Laforgia" <x...@xx.xx> ha scritto nel messaggio
news:XRbxe.40226$bc....@tornado.fastwebnet.it...

Ho fatto anche quello ma non riesco a catturare l'estensione.
Ho provato a cercare le pagine visitate:
/~liberali/valent.jpg
, ma non riesco ad estrarre solo gli ultimi 3 caratteri (che poi è l'
estensione).
Ho provato ad aggiungere nella fscanf    %[^.] per arrivare fino al punto e
partire da li per catturare l' estensione ma nulla da fare.
Ciao e grazie.
Morpheus

 estensione).
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *dupstr(const char *s)
{
    char *r=malloc(strlen(s)+1);
    if (r)
      strcpy(r, s);
    return r;
}
char *getext(const char *s)
{
      char *result=0;
      int i=0, dot_found=0, slash_found=0;
      if (s) {
         int len=strlen(s);
         for (i=len-1; i>=0 && !(dot_found || slash_found); i--) {
            dot_found=(s[i]=='.');
            slash_found=(s[i]=='/');
         }
         if (dot_found)
           result=dupstr(s+i+1);
      }
      return result;
}
int main(int argc, char *argv[])
{
     char *res1=0;
     char *res2="/~liberali/valent.jpg";
     char *res3="pippo";
     char *res4="a";
     char *res5="pippo.html";
     printf("getext(\"%s\")=\"%s\"\n", res1, getext(res1));
     printf("getext(\"%s\")=\"%s\"\n", res2, getext(res2));
     printf("getext(\"%s\")=\"%s\"\n", res3, getext(res3));
     printf("getext(\"%s\")=\"%s\"\n", res4, getext(res4));
     printf("getext(\"%s\")=\"%s\"\n", res5, getext(res5));
     return 0;
}

"Andrea Laforgia" <x...@xx.xx> ha scritto nel messaggio
news:Zscxe.40330$bc.2...@tornado.fastwebnet.it...

SPETTACOLO  :D
Grazie Andrea, adesso vado cercare di capirlo ed implementarlo nel mio.
Ciao e grazie mille della disponibilità.
Morpheus

char *dupstr(const char *s)
{
    char *r=malloc(strlen(s)+1);
    if (r)
      strcpy(r, s);
    return r; 
} 
la strdup in string.h non fa la stessa cosa?

 la strdup in string.h non fa la stessa cosa?
strdup() non esiste come funzione standard.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Quindi la string.h contiene sia funzioni standard che non standard?

 Quindi la string.h contiene sia funzioni standard che non standard?
Quel file contiene solo prototipi.  A seconda della piattaforma di 
sviluppo, potrebbe contenere prototipi di funzioni non standard.