Хрестоматия по программированию на Си в Unix



         

Примеры. Хрестоматия по программированию на Си в Unix - стр. 2


for(i=len_all=used_all=0; i < NENTRIES; i++){ len_all += aTab[i].length; used_all += aTab[i].used;

printf("%d/%d%s", aTab[i].used, aTab[i].length, i==NENTRIES-1 ? "\n":" "); } printf("%d/%d=%g%%\n", used_all, len_all, (double)used_all * 100 / len_all); }

/* ТЕСТ =================================================================*/

Cell *text;

/* Прочитать файл в память */ void fileIn(char *name){ char buf[10000]; FILE *fp;

if((fp = fopen(name, "r")) == NULL){ printf("Cannot read %s\n", name); return; } while(fgets(buf, sizeof buf, fp) != NULL){ char *s; Cell *p;

s = (char *) aCalloc(1, strlen(buf)+1); strcpy(s, buf);

p = (Cell *) aCalloc(sizeof(Cell), 1); p->addr = s; p->next = text; text = p; } fclose(fp); }

/* Уничтожить текст в памяти */ void killAll(){ Cell *ptr, *nxtp;

ptr = text; while(ptr){ nxtp = ptr->next; if(!aFree(ptr->addr)) printf("No free(1)\n"); if(!aFree(ptr)) printf("No free(2)\n"); ptr = nxtp; } }

/* Удалить из текста строки, начинающиеся с определенной буквы */ void randomKill(int *deleted){ unsigned char c = rand() % 256; Cell *ptr, *prevp; unsigned char *s;

retry: prevp = NULL; ptr = text; while(ptr){ s = (unsigned char *) ptr->addr; if(*s == c){ /* нашел */ if(!aFree(s)) printf("No free(3)\n");

/* исключить из списка */ if(prevp) prevp->next = ptr->next; else text = ptr->next;

if(!aFree(ptr)) printf("No free(4)\n");

/* Заведомо неправильный free if(!aFree(ptr+1)) printf("No free(5)\n"); */

(*deleted)++;

goto retry; } prevp = ptr; ptr = ptr->next; } }

int main(int ac, char *av[]){ int i, r, d; char buffer[4098];

srand(time(NULL)); for(i=1; i < ac; i++){ printf("File: %s\n", av[i]); fileIn(av[i]); aStat();

d = 0; for(r=0; r < 128; r++) randomKill(&d); printf("%d lines deleted\n", d); aStat(); } killAll(); aStat();

if(!aFree(buffer)) printf("buffer[] - не динамическая переменная.\n");

return 0; }

© Copyright А. Богатырев, 1992-95
Си в UNIX

| |




Содержание  Назад  Вперед