Название: Разобрать исходные коды Отправлено: jatsuk от Май 22, 2011, 06:46 Препод замучил.... нужно разобраться как работает функция feof. И не просто сказать что она возвращает, в каких случаях, а ПРЯМ в исходном коде функции показать где это выполняется.
Скачал я glibc-2.3.4 и нашел там исходный код. Код: #include "libioP.h" Мне понять из этого как работает очень сложно. Понятно только одно здесь прямо это не выполняется (возвращает не нулевой символ если конец, а если конец, то 0 вроде) Так вопрос, а в какой вообще функции идет это сравнение , возвращение ??? я так понял result = _IO_feof_unlocked (fp); здесь возвращается. Где тогда найти саму функцию _IO_feof_unlocked сеё исходным кодом. А Если есть какая нибудь книжечка с полным описанием исходных кодов, подскажите ?? Название: Re: Разобрать исходные коды Отправлено: Fat-Zer от Май 22, 2011, 13:09 _IO_feof_unlocked - это не функция, это макрос... как найти - воспользуйся поиском...
А Если есть какая нибудь книжечка с полным описанием исходных кодов, подскажите ?? есть только документация идущая с библиотекой...Название: Re: Разобрать исходные коды Отправлено: jatsuk от Май 22, 2011, 13:35 _IO_feof_unlocked искал
много раз искал, по тексту ... находит только libio.h, feof_u.c,feof.c, stdio.h что за документация, вроде там не было... Название: Re: Разобрать исходные коды Отправлено: jatsuk от Май 22, 2011, 14:10 всё что есть
#define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0) Название: Re: Разобрать исходные коды Отправлено: Fat-Zer от Май 22, 2011, 14:40 что за документация, вроде там не было... папка manual, но она в ТеХе, её нужно собрать...#define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0) тогда чего здесь не понятного? если флаг установлен, то возвращается труъНазвание: Re: Разобрать исходные коды Отправлено: jatsuk от Май 22, 2011, 14:52 Папки мануал нет :-[
ну да ладно вторая функция getc, она должна возвращать EOF если конец #define _IO_getc_unlocked(_fp) \ (_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \ ? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++) но где тут это ?? я только понял , что сравнивает указатель чтения сейчас и конца и возвращает 0.А в конце указатель передвигается. А EOF нет ( Название: Re: Разобрать исходные коды Отправлено: Fat-Zer от Май 22, 2011, 15:21 Папки мануал нет :-[ не заметил, что версия древняя... может там и нет... тогда можно посмотреть в онлайне на оф.сайте.ну да ладно вторая функция getc, она должна возвращать EOF если конец всё же ведь написано: если указатель чтения >= вернего указателя буфера, то вызвать __uflow, которая будет делпть чёрную работу, иначе вернуть указатель на текущий символ и увеличить указатель чтения.#define _IO_getc_unlocked(_fp) \ (_IO_BE ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end, 0) \ ? __uflow (_fp) : *(unsigned char *) (_fp)->_IO_read_ptr++) но где тут это ?? я только понял , что сравнивает указатель чтения сейчас и конца и возвращает 0.А в конце указатель передвигается. А EOF нет ( Название: Re: Разобрать исходные коды Отправлено: jatsuk от Май 22, 2011, 16:00 Спасибо за всё. Завтра поищу новую версию...
С Eof так и не понял :-[ Название: Re: Разобрать исходные коды Отправлено: Fat-Zer от Май 22, 2011, 16:02 С Eof так и не понял :-[ смотрите код __uflow()Название: Re: Разобрать исходные коды Отправлено: jatsuk от Май 24, 2011, 08:12 А что такое
int result; CHECK_FILE (fp, EOF); ?????? _IO_flockfile (fp); result = _IO_feof_unlocked (fp); _IO_funlockfile (fp); return result; Название: Re: Разобрать исходные коды Отправлено: brankovic от Май 24, 2011, 10:01 А что такое CHECK_FILE (fp, EOF); ?????? проверяет что fp не ноль и грубо, что он вообще валидный. Чего вы хотите-то разобраться досконально прям? Тогда всё в исходниках есть. Но ИМХО постановка (со стороны преподавателя) более чем странная. Название: Re: Разобрать исходные коды Отправлено: gogi от Май 24, 2011, 10:42 Скачал я glibc-2.3.4 Ничего по-ископаемее не нашёл?Название: Re: Разобрать исходные коды Отправлено: jatsuk от Май 25, 2011, 06:01 Я лично не хочу в этом разбираться :) но приходится
Чек файла в исходниках не нашел... А скачал, что было на серваке кафедры ;D Название: Re: Разобрать исходные коды Отправлено: jatsuk от Май 25, 2011, 06:13 Вот что получилось с функцией getc
Код: result = _IO_getc_unlocked (fp); (getc.с) этот макрос в libio.h Код: #define _IO_getc_unlocked(_fp) \ далее __uflow genops.c Код: int |