1417
Конференция C SoobCha
письмо # 1418
|
1419 |
|
Здравствуйте, C.izvenite za translit( u menya est' programma, kotoraya obrabatyvaet dva faila sobiraya informaciu po strokam i zapisyvaet ee v tretiy file eto procedura dlya billinga s uvelicheniem chisla abonentov poyavilas' problema obrabotav okolo 1000 zapisey programa vyletaet Sigmentation fault prichem chislo zapisey mozhet byt' 980 - 1020 chuvstvuu chto delo v modeli pamyati, no kak pomenyat' ne znau compiler - gcc-3.5.5 nizhe privedu kod #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> double extractor (char* u_name) { FILE *fp; char fullstr[108]; char data_ch[256]; char value[15]; int i,k,j,t,p=0; int tmp=strlen(u_name); fullstr[0]='C'; fullstr[1]='h'; fullstr[2]='a'; fullstr[3]='i'; fullstr[4]='n'; fullstr[5]=' '; for (i=6;i<tmp+6;i++) { fullstr[i]=u_name[i-6]; k=i; } fullstr[k+1]=' '; fullstr[k+2]='('; fp=fopen ("/tmp/chains","r"); // printf ("\nstr:'%s'",fullstr); while (feof(fp)==0) { fgets (data_ch, 256, fp); for (j=0;j<k+2;j++) { if (data_ch[j]==fullstr[j]) p++; } // printf ("p=%d,tmp=%d",p,tmp); if (p==tmp+7) { fgets (data_ch, 256, fp); fgets (data_ch, 256, fp); i=16; t=0; while (data_ch[i]!=' ') { t++; i--; } k=0; for (j=16-t+1;j<=16;j++) { value[k]=data_ch[j]; k++; } break; } p=0; } return atol(value); } main () { FILE *fp, *fp_sql, *ftmp; char data[256]; char data_ch[256]; char u_name[100]; char t_price[8]; char t_admin[2]; char str_tmp[256]; char chain_name[108]; char value[15]; long bytes=0; double price, tmp_money, b2; int admin; int i=0, j=0, k=0, f=0, count_1=0, p=0, d=0, t=0, count_2=0, z=0, counter=0; int DAT=system("date +%d > /tmp/date.time"); int DAT2=system("date +%m > /tmp/month.time"); int DAT3=system("date +%H > /tmp/hour.time"); int DAT4=system("date +%M > /tmp/minute.time"); ftmp=fopen ("/tmp/date.time","r"); fgets (str_tmp,256,ftmp); DAT=atoi(str_tmp); fclose(ftmp); ftmp=fopen ("/tmp/month.time","r"); fgets (str_tmp,256,ftmp); DAT2=atoi(str_tmp); fclose(ftmp); ftmp=fopen ("/tmp/hour.time","r"); fgets (str_tmp,256,ftmp); DAT3=atoi(str_tmp); fclose(ftmp); ftmp=fopen ("/tmp/minute.time","r"); fgets (str_tmp,256,ftmp); DAT4=atoi(str_tmp); fclose(ftmp); // printf ("\nDAT=%d, DAT2=%d, DAT3=%d, DAT4=%d\n",DAT,DAT2,DAT3,DAT4); fp=fopen ("/tmp/collect_users","r"); fp_sql=fopen ("/tmp/collector_step","w"); fgets (data, 256, fp); fgets (data, 256, fp); while (feof(fp)==0) { j=0; counter++; printf ("\n counter=%d",counter); while (data[j]!='\t') { u_name[j]=data[j]; j++; } j++; k=j; while (data[j]!='\t') { t_price[j-k]=data[j]; j++; } j++; k=j; while (data[j]!='\n') { t_admin[j-k]=data[j]; j++; } k=0; j=0; i=0; price=atof(t_price); admin=atoi(t_admin); printf ("\nu_name=%s, price=%f, admin=%d",u_name,price,admin); bytes=extractor(u_name); //printf ("\nu_name=%s, price=%f, admin=%d, bytes=%ld",u_name,price,admin,bytes); if (bytes>3) { // printf ("\nu_name=%s, price=%f, admin=%d, bytes=%ld",u_name,price,admin,bytes); if (admin<10) { // b2=bytes/1048576; b2=bytes*0.00000095367432; // printf (" b2=%f",b2); tmp_money=b2*price; // printf ("money=%f",tmp_money); fprintf (fp_sql,"INSERT INTO Bill_day_m VALUES (%d,%d,%d,%d,'%s',%ld,%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes,bytes); fprintf (fp_sql,"INSERT INTO Bill_day VALUES (%d,%d,%d,%d,'%s',%ld,%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes,bytes); fprintf (fp_sql,"UPDATE Balance SET money_rest=money_rest-%f WHERE login='%s';\n",tmp_money,u_name); } if (admin==12) { b2=bytes*0.00000095367432; // printf (" b2=%f",b2); tmp_money=b2*price; // printf ("money=%f",tmp_money); fprintf (fp_sql,"INSERT INTO Bill_day_m VALUES (%d,%d,%d,%d,'%s',%ld,%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes,bytes); fprintf (fp_sql,"INSERT INTO Bill_day VALUES (%d,%d,%d,%d,'%s',%ld,%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes,bytes); fprintf (fp_sql,"UPDATE Balance SET money_rest=money_rest-%f WHERE login='%s';\n",tmp_money,u_name); } if (admin==10) { fprintf (fp_sql,"INSERT INTO Bill_day_m VALUES (%d,%d,%d,%d,'%s',%ld,%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes,bytes); fprintf (fp_sql,"INSERT INTO packet_Bill_day VALUES (%d,%d,%d,%d,'%s',%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes); fprintf (fp_sql,"UPDATE active_packets set bytes_left=bytes_left-%ld where login='%s' and active=1;\n",bytes,u_name); } if (admin==11) { fprintf (fp_sql,"INSERT INTO Bill_day_m VALUES (%d,%d,%d,%d,'%s',%ld,%ld);\n",DAT,DAT2,DAT3,DAT4,u_name,bytes,bytes); } } for (i=0;i<100;i++) u_name[i]=0; for (i=0;i<108;i++) chain_name[i]=0; for (i=0;i<8;i++) t_price[i]=0; for (i=0;i<2;i++) t_admin[i]=0; fgets (data, 256, fp); } fclose(fp); fclose(fp_sql); // fclose(fp1); } -- С уважением, mlx mailto:mlx@kvant.ks.ua |
1417
|
1419 |
|
|
|
|