Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: panx в Jul 08, 2002, 16:49



Титла: parsing na file s C
Публикувано от: panx в Jul 08, 2002, 16:49
Pravq optiti za programirane na C
Nalaga mi se parse na /proc/net/dev  - iskam da izvadq tekushtiq vhodqsht i izhodqsht traffic  i da go linkna kym nekva promenliva. Koq funkciq da polzvam
ot mnogoto *scan* . Shte se radvam i na nqkol-drug red kato primer:)
Thanx


Титла: parsing na file s C
Публикувано от: в Jul 09, 2002, 04:38
Нещо такова би трябвало да свърши работа:
Примерен код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>


int main() {
   FILE *fp;
#define buf_len      1024
#define ISBLANK(c)   (((c) == ' ') || ((c) == '\t'))
        char buf[buf_len];
   int line_num = 0;
        const char *stats_file = "/proc/net/dev";
        const char *interface = "ppp0";
   if(stats_file == NULL)
            return(-1);
        fp = fopen(stats_file, "rb");
        if(fp == NULL)
            return(-1);
   while(fgets(buf, buf_len, fp) != NULL)
   {
       if(line_num >= 2)
       {
      char cur_ifname[256];
      char *strptr;

      unsigned long   r_bytes, r_packets, r_errs, r_drop,
            r_fifo, r_frame, r_compressed, r_multicast,
            s_bytes, s_packets, s_errs, s_drop,
            s_fifo, s_colls, s_carrier, s_compressed;


      strptr = buf;
      while(ISBLANK(*strptr))
          strptr++;
      strncpy(cur_ifname, strptr, 256);
      cur_ifname[256 - 1] = '\0';
      strptr = strchr(cur_ifname, ':');
      if(strptr != NULL)
          (*strptr) = '\0';

      if(!strcmp(interface, cur_ifname))
      {

          strptr = strchr(buf, ':');
          if(strptr != NULL)
         strptr++;
          else
         strptr = buf;
          while(ISBLANK(*strptr))
         strptr++;

          sscanf(
         strptr,
"%lu %lu %lu %lu\
 %lu %lu %lu %lu\
 %lu %lu %lu %lu\
 %lu %lu %lu %lu",
         &r_bytes, &r_packets, &r_errs, &r_drop,
         &r_fifo, &r_frame, &r_compressed, &r_multicast,
         &s_bytes, &s_packets, &s_errs, &s_drop,
         &s_fifo, &s_colls, &s_carrier, &s_compressed
          );
printf("Recieved bytes: %ld\nSent bytes: %ld\n",r_bytes, s_bytes);          
break;
      }
       }

       line_num++;
   }

        fclose(fp);

#undef buf_len

}


Титла: parsing na file s C
Публикувано от: в Jul 09, 2002, 08:32
Bla, tva e poveche ot tova koeto ochakvah.
Blagodarq! :)


Титла: parsing na file s C
Публикувано от: в Jul 09, 2002, 22:07
As se sblaskah sas podoben problem: Opitvam se da parsna html direktno ot url-a , no se sblaskah s dosta problemi sas socket - vraskata. Njakoi moze li da mi pomgne sas savet ili HOWTO-Adres???
Mersi :)