Язык программирования Си


         

ifdef COMMENT base ptr случай


- 170 - Си в UNIX

/* "Перемотать" файл в начало */ void rewind(FILE *fp){ fflush(fp); lseek(fileno(fp), 0L, 0); fp->cnt = 0; fp->ptr = fp->base; clearerr(fp); if(fp->flag & IORW) fp->flag &= ~(IOREAD|IOWRT); }

/* Позиционирование указателя чтения/записи */ # ifdef COMMENT base ptr случай IOREAD | |<----cnt---->| 0L |б у |ф е р | |=======######@@@@@@@@@@@@@@======== файл file | |<-p->|<-dl-->| |<----pos---->| | | |<----offset(new)-->| | |<----RWptr---------------->|

где pos = RWptr - cnt; // указатель с поправкой offset = pos + p = RWptr - cnt + p = lseek(file,0L,1) - cnt + p отсюда: (для SEEK_SET) p = offset+cnt-lseek(file,0L,1); или (для SEEK_CUR) dl = RWptr - offset = p - cnt lseek(file, dl, 1); Условие, что указатель можно сдвинуть просто в буфере: if( cnt > 0 && p <= cnt && base <= ptr + p ){ ptr += p; cnt -= p; } #endif /*COMMENT*/



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