⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system.c

📁 嵌入式linux下液晶编程院代码, 可以在LINUX2.4内核下运行
💻 C
📖 第 1 页 / 共 2 页
字号:
  }  if ((v5=parse_meminfo ("Cached:", buffer))<0) {    fd=-1;    return -1;  }  *total=v1;  *free=v2;  *shared=v3;  *buffered=v4;  *cached=v5;  return 0;}int Load (double *load1, double *load2, double *load3){  static int fd=-2;  char buffer[16];  static double val1=0;  static double val2=0;  static double val3=0;  static time_t now=0;    *load1=val1;  *load2=val2;  *load3=val3;  if (fd==-1) return -1;    if (time(NULL)==now) return 0;  time(&now);    if (fd==-2) {    fd=open("/proc/loadavg", O_RDONLY);    if (fd==-1) {      error ("open(/proc/loadavg) failed: %s", strerror(errno));      return -1;    }    debug ("open(/proc/loadavg)=%d", fd);  }  if (lseek(fd, 0L, SEEK_SET)!=0) {    error("lseek(/proc/loadavg) failed: %s", strerror(errno));    fd=-1;    return -1;  }  if (read (fd, &buffer, sizeof(buffer)-1)==-1) {    error("read(/proc/loadavg) failed: %s", strerror(errno));    fd=-1;    return -1;  }  if (sscanf(buffer, "%lf %lf %lf", &val1, &val2, &val3)!=3) {    error ("parse(/proc/loadavg) failed: unknown format");    fd=-1;    return -1;  }  *load1=val1;  *load2=val2;  *load3=val3;  return 0;}int Busy (double *user, double *nice, double *system, double *idle){  static int fd=-2;  char buffer[64], *p;  unsigned long v1, v2, v3, v4;  double d1, d2, d3, d4, d5;  *user=0.0;  *nice=0.0;  *system=0.0;  *idle=0.0;  if (fd==-1) return -1;  if (fd==-2) {    fd=open("/proc/stat", O_RDONLY);    if (fd==-1) {      error ("open(proc/stat) failed: %s", strerror(errno));      return -1;    }    debug ("open (/proc/stat)=%d", fd);  }  if (lseek(fd, 0L, SEEK_SET)!=0) {    error ("lseek(/proc/stat) failed: %s", strerror(errno));    fd=-1;    return -1;  }  if (read (fd, &buffer, sizeof(buffer)-1)==-1) {    error ("read(/proc/stat) failed: %s", strerror(errno));    fd=-1;    return -1;  }  p=strstr(buffer, "cpu ");  if (p==NULL) {    error ("parse(/proc/stat) failed: no 'cpu' line");    fd=-1;    return -1;  }  if (sscanf(p+4, " %lu %lu %lu %lu", &v1, &v2, &v3, &v4)!=4) {    error ("parse(/proc/stat) failed: unknown 'cpu' format");    fd=-1;    return -1;  }  d1=smooth("cpu_user", 500, v1);  d2=smooth("cpu_nice", 500, v2);  d3=smooth("cpu_sys",  500, v3);  d4=smooth("cpu_idle", 500, v4);  d5=d1+d2+d3+d4;   if (d5!=0.0) {    *user=(d1+d2)/d5;    *nice=d2/d5;    *system=d3/d5;    *idle=d4/d5;  }  return 0;}int Disk (int *r, int *w){  char buffer[4096], *p;  static int fd=-2;    *r=0;  *w=0;  if (fd==-1) return -1;    if (fd==-2) {    fd = open("/proc/stat", O_RDONLY | O_NDELAY);    if (fd==-1) {      error ("open(/proc/stat) failed: %s", strerror(errno));      return -1;    }    debug ("open (/proc/stat)=%d", fd);  }    if (lseek(fd, 0L, SEEK_SET)!=0) {    error ("lseek(/proc/stat) failed: %s", strerror(errno));    fd=-1;    return -1;  }  if (read (fd, &buffer, sizeof(buffer)-1)==-1) {    error ("read(/proc/stat) failed: %s", strerror(errno));    fd=-1;    return -1;  }  p=strstr(buffer, "disk_io:");  if (p!=NULL) {    unsigned long rsum=0, wsum=0;    p+=8; while (*p==' ') p++;    while (*p && *p!='\n') {      int i, n;      unsigned long dummy;      unsigned long rblk, wblk;      i=sscanf(p, "(%lu,%lu):(%lu,%lu,%lu,%lu,%lu)%n", 	       &dummy, &dummy, &dummy, &dummy, &rblk, &dummy, &wblk, &n);      if (n==0 || i!= 7) {	i=sscanf(p, "(%lu,%lu):(%lu,%lu,%lu,%lu)%n",		 &dummy, &dummy, &dummy, &rblk, &dummy, &wblk, &n)+1;      }      if (n>0 && i==7) {	rsum+=rblk;	wsum+=wblk;	p+=n; while (*p==' ') p++;      } else {	error ("parse(/proc/stat) failed: unknown 'disk_io' format");	fd=-1;	return -1;      }    }    // assume that we got the number of sectors, and a sector size of 512 bytes.    // to get te number in kilobytes/sec, we calculate as follows:    // kb=blocks*512/1024, which is blocks/2    *r=smooth ("disk_r", 500, rsum/2);    *w=smooth ("disk_w", 500, wsum/2);  } else {    unsigned long r1, r2, r3, r4;    unsigned long w1, w2, w3, w4;    p=strstr(buffer, "disk_rblk");    if (p==NULL) {      error ("parse(/proc/stat) failed: neither 'disk_io' nor 'disk_rblk' found");      fd=-1;      return -1;    }    if (sscanf(p+9, "%lu %lu %lu %lu", &r1, &r2, &r3, &r4)!=4) {      error ("parse(/proc/stat) failed: unknown 'disk_rblk' format");      fd=-1;      return -1;    }    p=strstr(buffer, "disk_wblk");    if (p==NULL) {      error ("parse(/proc/stat) failed: no 'disk_wblk' line");      fd=-1;      return -1;    }    if (sscanf(p+9, "%lu %lu %lu %lu", &w1, &w2, &w3, &w4)!=4) {      error ("parse(/proc/stat) failed: unknown 'disk_wblk' format");      fd=-1;      return -1;    }    *r=smooth ("disk_r", 500, r1+r2+r3+r4);    *w=smooth ("disk_w", 500, w1+w2+w3+w4);  }    return 0;}int Net (int *rx, int *tx, int *bytes){  char buffer[4096], *p, *s;  static int fd=-2;  unsigned long pkg_rx, pkg_tx;    *rx=0;  *tx=0;  *bytes=0;  if (fd==-1) return -1;    if (fd==-2) {    fd = open("/proc/net/dev", O_RDONLY | O_NDELAY);    if (fd==-1) {      error ("open(/proc/net/dev) failed: %s", strerror(errno));      return -1;    }    debug ("open (/proc/net/dev)=%d", fd);  }    if (lseek(fd, 0L, SEEK_SET)!=0) {    error ("lseek(/proc/net/dev) failed: %s", strerror(errno));    fd=-1;    return -1;  }  if (read (fd, &buffer, sizeof(buffer)-1)==-1) {    error ("read(/proc/net/dev) failed: %s", strerror(errno));    fd=-1;    return -1;  }  pkg_rx=0;  pkg_tx=0;  p=buffer;  while ((s=strsep(&p, "\n"))) {    int n, u;    unsigned long v[16]={0};    n=sscanf (s, " eth%d:%lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu",	      &u, &v[0], &v[1], &v[2], &v[3], &v[4], &v[5], &v[6], &v[7],	      &v[8], &v[9], &v[10], &v[11], &v[12], &v[13], &v[14], &v[15]);    if (n==17) {      pkg_rx+=v[0];      pkg_tx+=v[8];      *bytes=1;    } else if (n==12) {      pkg_rx+=v[0];      pkg_tx+=v[5];      *bytes=0;    } else if (n>0) {      error ("parse(/proc/net/dev) failed: unknown format");      fd=-1;      return -1;    }  }  *rx=smooth("net_rx", 500, pkg_rx);  *tx=smooth("net_tx", 500, pkg_tx);  return 0;}int PPP (int unit, int *rx, int *tx){  static int fd=-2;  char buffer[16];  #ifdef HAVE_NET_IF_PPP_H  struct ifpppstatsreq req;#endif  *rx=0;  *tx=0;#ifdef HAVE_NET_IF_PPP_H  if (fd==-1) return -1;    if (fd==-2) {    fd = socket(AF_INET, SOCK_DGRAM, 0);    if (fd==-1) {      error ("socket() failed: %s", strerror(errno));      return -1;    }    debug ("socket()=%d", fd);  }  memset (&req, 0, sizeof (req));  req.stats_ptr = (caddr_t) &req.stats;  snprintf (req.ifr__name, sizeof(req.ifr__name), "ppp%d", unit);    if (ioctl(fd, SIOCGPPPSTATS, &req) < 0)    return 0;    snprintf (buffer, sizeof(buffer), "ppp%d_rx", unit);  *rx=smooth(buffer, 500, req.stats.p.ppp_ibytes);  snprintf (buffer, sizeof(buffer), "ppp%d_tx", unit);  *tx=smooth(buffer, 500, req.stats.p.ppp_obytes);#endif  return 0;}int Sensor (int index, double *val, double *min, double *max){  char buffer[32];  double dummy, value;  static int fd[SENSORS+1]={[0 ... SENSORS]=-2,};  static char *sensor[SENSORS+1]={NULL,};  static double val_buf[SENSORS+1]={0.0,};  static double min_buf[SENSORS+1]={0.0,};  static double max_buf[SENSORS+1]={0.0,};  static double factor_buf[SENSORS+1]={0.0,};  static double offset_buf[SENSORS+1]={0.0,};  static time_t now[SENSORS+1]={0,};  if (index<0 || index>SENSORS) return -1;  *val=val_buf[index];  *min=min_buf[index];  *max=max_buf[index];  if (fd[index]==-1) return -1;  if (time(NULL)==now[index]) return 0;  time(&now[index]);  if (fd[index]==-2) {    snprintf(buffer, 32, "Sensor%d", index);    sensor[index]=cfg_get(buffer, NULL);    if (sensor[index]==NULL || *sensor[index]=='\0') {      error ("no entry for '%s' in %s", buffer, cfg_source());      fd[index]=-1;      return -1;    }    snprintf(buffer, 32, "Sensor%d_min", index);    min_buf[index]=atof(cfg_get(buffer,"0"));    *min=min_buf[index];    snprintf(buffer, 32, "Sensor%d_max", index);    max_buf[index]=atof(cfg_get(buffer,"100"));    *max=max_buf[index];    snprintf(buffer, 32, "Sensor%d_factor", index);    factor_buf[index]=atof(cfg_get(buffer,"1"));    snprintf(buffer, 32, "Sensor%d_offset", index);    offset_buf[index]=atof(cfg_get(buffer,"0"));    fd[index]=open(sensor[index], O_RDONLY);    if (fd[index]==-1) {      error ("open(%s) failed: %s", sensor[index], strerror(errno));      return -1;    }    debug ("open (%s)=%d", sensor[index], fd[index]);  }  if (lseek(fd[index], 0L, SEEK_SET)!=0) {    error ("lseek(%s) failed: %s", sensor[index], strerror(errno));    fd[index]=-1;    return -1;  }  if (read (fd[index], &buffer, sizeof(buffer)-1)==-1) {    error ("read(%s) failed: %s", sensor[index], strerror(errno));    fd[index]=-1;    return -1;  }  if (sscanf(buffer, "%lf %lf %lf", &dummy, &dummy, &value)!=3) {    error ("parse(%s) failed: unknown format", sensor[index]);    fd[index]=-1;    return -1;  }  value *= factor_buf[index];  value += offset_buf[index];  val_buf[index]=value;  *val=value;  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -