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

📄 func.c

📁 一个在LINUX下运行的东西
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include <string.h>#include <glib.h>#include <errno.h>#include <wait.h>#include <gtk/gtk.h>#include "main.h"#include "callbacks.h"#include "func.h"#include "debug.h"#include "config.h"long int t_sec = 0;extern GtkWidget *label;void set_to(char *str,char a,char b){ while(*str){  if(*str==a)*str=b;  str++; }} char *get_addr(char *str,char ch) { char *p=str; while(*p){  if(*p==ch)break;  p++; } return *p?p:str; }int is_pppoe_on(void){ FILE *fp = NULL; char *line = NULL; static char *fpath = "/proc/net/pppoe"; size_t len=0; int t = 0; //g_print("is_pppoe_on ():%s\n",fpath); if(access(fpath,F_OK)==0){  fp = fopen(fpath,"r"); } else return t; if(!fp ){   g_print("is_pppoe_on():fopen %s error :%s .\n",fpath,strerror(errno));   return t; } while(getline(&line,&len,fp)!=-1) {  //g_print("is_pppoe_on ():%s\n",line);  if(g_strrstr(line,"Address")) continue;   t = (!0);   break; } if(line)free(line); if(fp)fclose(fp); return t;}/*int fselect(FILE *fp){ //fp->_fileno = 0; //printf("fp->_fileno = %d\n",fp->_fileno); //write(fp->_fileno,"goddamn it !\n",13); int fd = fp->_fileno; fd_set fds; FD_ZERO(&fds); FD_SET(fd,&fds); select(fd+1,&fds,NULL,NULL,NULL); if(FD_ISSET(fd,&fds))return (!0); return 0;}*/ppp * get_ppps(FILE *fp ){  //char *fpath = "/proc/net/dev";  //FILE *fp;  ppp *p = NULL,*head = NULL;//{{},0,0,0,0};  char *line;  char **args;  //char *argv[6];  size_t len = 0 ;  /*  fp = fopen(fpath,"r");  if(!fp){  g_print("Can't fopen(): %s !\n",fpath);  return NULL;  } */  //head = g_malloc(sizeof(ppp));  //head = &p;  while(getline(&line,&len,fp) != -1){     if(g_strrstr(line,"|")||g_strrstr(line,"lo"))continue;     //debug(g_print(line));     if(!p) head= p = g_malloc(sizeof(ppp));      else {       p->nt = g_malloc(sizeof(ppp));       p=p->nt;     }      set_to(line,':',' ');      args = get_args(line);//g_strsplit_set(line,"\t :\n",-1);      //int i=0,j=0;      //while(args[i]){if(args[i][0])g_print("args[%d]:%s j = %d \n",i,args[i],j),j++;i++;}      /*i=0;j=0;      while(args[i]){   	     if(args[i][0]){    	      //if(j>10)break;on_window_delete_event    	      if(j==0)argv[0]=args[i];    	      if(j==1)argv[1]=args[i];    	      if(j==2)argv[2]=args[i];    	      if(j==9)argv[3]=args[i];    	      if(j==10)argv[4]=args[i];   		     j++;   	     }   	     if(j>11)break;   	     i++;      }*/      strcpy(p->name,args[0]);      p->rev_bytes=atol(args[1]);      p->rev_pkts=atol(args[2]);      p->tsm_bytes=atol(args[9]);      p->tsm_pkts=atol(args[10]);      if(args)free_args(args);//g_strfreev(args);      p->nt = NULL;  }  //p=head->nt;  //g_free(head); if(line)free(line); return head;}void print_ppp(ppp *p){ do { if(p)g_print(      "ppp->name     :%s\n"      "ppp->rev_bytes:%ld\n"      "ppp->rev_pkts :%ld\n"      "ppp->tsm_bytes:%ld\n"      "ppp->tsm_pkts :%ld\n",       p->name,p->rev_bytes,p->rev_pkts,       p->tsm_bytes,p->tsm_pkts     ); else g_print("NULL!\n"); p=p->nt; }while(p);}char *sprint_ppp(ppp *p){ static char str[1024*2]={0}; int i=0; do {   if(p)i = sprintf(&str[i],"Interface:%s\n""        rev_bytes:%ld\n""        rev_pkts :%ld\n""        tsm_bytes:%ld\n""        tsm_pkts :%ld\n",       p->name,p->rev_bytes,p->rev_pkts,       p->tsm_bytes,p->tsm_pkts     ); else sprintf(str,"NULL!\n"); p=p->nt; }while(p); return str;}void free_ppp(ppp *p){ ppp *tmp1=p; ppp *tmp2=NULL; tmp2 = tmp1->nt; while(tmp1){   g_free(tmp1);   if(tmp2)tmp1= tmp2->nt;   else return;   if(tmp1)tmp2=tmp1->nt; }}//voidgboolean handler(gpointer data){  static long int total=  -3;  static FILE *fd = NULL;  static char *fpath ="/proc/net/dev";  ppp *p = NULL;  char *stt = NULL;  char a[16]={0};  char *cmd[]={shell_path"/scripts/pppoecount.sh",def.username,NULL,NULL};  //alarm(2);  cmd[2]=a;  fd= fopen (fpath, "r" );  if(!fd){    g_print("Can't fopen(): %s :%s\n",fpath,strerror(errno));    return FALSE;  }  //g_print("come to handler for alarm .\n");  p = get_ppps(fd);  //print_ppp(p);  stt = sprint_ppp(p);  if(g_strrstr(stt,"ppp")){    t_sec+=2;    sprintf(          &stt[strlen(stt)],          "ppp time: %ld:%ld:%ld.\n",          t_sec/(3600),          (t_sec/60)%60,          t_sec%60          );  }  else {    sprintf(a,"%ld",t_sec);    if(t_sec)my_exec(cmd,1);    t_sec = 0;    total = get_time_of(def.username); }   if(total<-2)total = get_time_of(def.username);   long int tmp = total + t_sec;   sprintf(&stt[strlen(stt)],"Total : %ld:%ld:%ld .\n",tmp/3600,(tmp/60)%60,tmp%60);  if(data)     gtk_label_set_text(GTK_LABEL(data),stt);  free_ppp(p);  if(fd)fclose(fd);  return TRUE;}gboolean dialog_handler(gpointer data){  debug(g_print("dialog_handler() :\n"));  if(GTK_IS_BUTTON(data))gtk_button_clicked  (GTK_BUTTON(data));  debug(print("dialog_handler(): exit .\n"));  return FALSE;}int my_exec(char **cmd,int flag){ int status = 0; int pid = 0; pid = fork(); if(pid == 0){   //child !  execv(cmd[0],cmd);  fprintf(stderr,"execv() %s:%s .\n",cmd[0],strerror(errno));  exit(errno); } else if(pid == -1 ){ ///error .   fprintf(stderr,"my_exec:fork():%s \n",strerror(errno));   return pid;  }    if(flag == 0){//father        waitpid(pid,&status, 0);    if(WIFEXITED(status)){     fprintf(stderr,"My_exec():%s Normal exit .\n",cmd[0]);     return WEXITSTATUS(status);    }else     {      fprintf(stderr,"My_exec():%s .\n",strerror(errno));     }  }  else if (flag == 1 )     return pid;  return (-2);}int my_exec_str(char * cmdstr,int flag){ char **cmd = NULL;/// no more argc -1 argumnets; int i=0; cmd = get_args(cmdstr); i = my_exec(cmd,flag); if(cmd)free_args(cmd); return i;}void del_user_in(char * file,char *user){ char cmd [ 1024 ]={0}; sprintf(cmd,"/bin/sed -i -e 's/%s/d' %s",user,file); my_exec_str(cmd,0);}char ** get_args(char *cmdstr){#define argc  18 static char *cmd[argc] ;/// no more argc -1 argumnets; char *str = NULL, *head = NULL; int i=0; int j=0; if(!cmdstr||!cmdstr[0]) return NULL; head = str = malloc(strlen(cmdstr)+1); if(str == NULL){  fprintf(stderr,"get_args():malloc():%s .\n",strerror(errno));  exit(errno);  } strcpy(str,cmdstr); if(*str&&*str!=' '&&*str!='\n')cmd[i++]=str; while(*str){   char tmp;   tmp =*str;   if(tmp != '\''&&j==1){ str++;continue;}   if(tmp=='\'')j++;   if(j==2)j=0;   if(tmp=='\''||tmp ==' '||tmp == '\n')*str=0;    str++;    if((tmp=='\''||tmp==' ')&&(*str!='\''&&*str!=' '&&*str!='\n')){      if(!(i<argc-2))break;      cmd[i++]=str;   } } cmd[i]=NULL; cmd[i+1]=head; //int args=0; while(args<i&&cmd[args][0]){ g_print("%s args = %d\n",cmd[args++],args);}  g_print("i = %d\n",i); return cmd;#undef argc}int get_run_proc_dir(){ if(access(pid_file,F_OK)==0){   FILE *fd =NULL;   char str[32]="/proc/";   fd = fopen(pid_file,"r");   fscanf(fd,"%s",str+6);   fclose(fd);   if(access(str,F_OK)==0)return 1;   else return 0; } return 0;}void deal_pid_file(void){ if(get_run_proc_dir()){   fprintf(stderr,"Gtk-pppoe is running .\n");   exit(1);  }  else {    FILE *fs =NULL;    fs = fopen(pid_file,"w");    if(!fs){     fprintf(stderr,"deal_pid_file():fopen():%s .\n",strerror(errno));     exit(errno);    }  fprintf(fs,"%d",getpid());  fclose(fs); }}void free_args(char **args){ int i=0; while(args[i])i++; free(args[i]);}void my_exit(void){ if(access(pid_file,F_OK)==0)unlink(pid_file); if(tail_pid >20&&kill(tail_pid,15))       fprintf(stderr,"kill():%s .\n",strerror(errno));   char *cmd[]={"/usr/bin/poff",def.adslname,NULL};   my_exec(cmd,0);  fprintf(stderr,"gtk-pppoe: My_exit was runed .\n");}long int  get_time_of(char *name){ char *s = "/home/.pppoe.log"; FILE *f = NULL; size_t len = 0; char *line = NULL; long int t = 0; if(!(name&&*name))return t; f = fopen(s,"r"); if(!f){  fprintf(stderr,"fopen():%s:%s .\n",s,strerror(errno));  t= -1; }else   while(getline(&line,&len,f)!=-1){     if(g_strrstr(line,name)){       t = atol(get_addr(line,'=')+1);    }  } if(f)fclose(f); if(line)free(line); return t;}char *get_gw(void) ///temporary{ return "ppp";}

⌨️ 快捷键说明

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