![]() |
|
Модераторы: bsa |
![]()
|
|
| ressac |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
не понимаю зачем эта операция? если после предыдущего fread() указатель сместился куда надо, это видно при помощии fteel(), но ВОТ если убрать этот fseek() то ничего не работает :( не понимаю почему? тут полный код, если кому надо, правда на испанском
Это сообщение отредактировал(а) ressac - 13.4.2009, 17:55 |
||||
|
|||||
| InvalidProperty |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: 2 Всего: 9 |
не работает, если убрать какой именно fseek? Какая операция непонятна?
-------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Я не-знаю, я не по-ни-маю. Песенка такая была
Это сообщение отредактировал(а) zim22 - 14.4.2009, 08:08 |
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
InvalidProperty, второй
zim22, ты видишь что тебе ftell() говорит до и после второго fseek() ? позиция указателя не меняется, например был указатель на 144 так он и остался на 144 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
fread & fwrite буферизуют обмен с файлом. Так что когда делается fread на одну структуру реально читается больше, fwrite тоже не сразу пишет. fseek сбрасывает буфера, как чтения так и записи.
Другое дело, что fread & fwrite должны сбрасывать буфера друг друга (IMHO), но по видимому они этого не делают |
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
вы уверены что позиция не меняется? посмотрите значение переменной file_position
|
||||
|
|||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
zim22,
конечно я посмотрел, а вы? |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
ressac, я бы не писал, если бы не смотрел
они разные |
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
|
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Добавлено @ 13:03 тупил. да, действительно, вроде смещается куда надо. сейчас подумаю, почему ошибка в таком случае просходит. ***
Это сообщение отредактировал(а) zim22 - 14.4.2009, 14:26 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Ошибка происходит изх за буферизации потока. Можно позвать fflush(f) вместо fseek, должно работать
|
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
это как в песне, нет ну всё понятно что конкретно....
c fflush() не пашет а если fseek() не нужен, то почему без него не работает? |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
давайте споём! |
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
ну что?
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Возможно не будет работать без fseek в том случае, если fread закончилась ничем - т.е. стояла на конце файла. Проверьте результат fread - прошло чтение или нет.
|
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
да, последний fread читает...
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Anikmar прав. попробуйте закомментировать злосчастный fseek. и вы увидите, что не fread не читает, а fwrite не пишет
Это сообщение отредактировал(а) zim22 - 16.4.2009, 12:33 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Этот fseek, я так понимаю, нужен, чтобы увеличить размер файла - выйти за его границу для добавления информации. В середине файла он ничего не делает, а вот в конце файла - нужен.
Добавлено @ 12:43 Последний понятно - цикл идет с конца к наячалу. Первый смотрите. Это сообщение отредактировал(а) Anikmar - 16.4.2009, 12:43 |
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
я так и не понял, можно ещё раз?
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
функции fread и fwrite возвращают количество байт, которые они записали/прочитали. измените свой код так, чтобы он отображал эти значения и вы увидите, что в одном случае всё нормально, а вдругом - не очень. |
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
ну в одном возрващает "1" а в другом "0"
только что это значит |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
fread и fwrite возвращают число записей, т. е. 1 - записана 1 запись, 0 - запись не записана или записана не целиком.
Чтобы знать число байт установите параметр size в 1 |
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
Ну да , всё сходится вообщем и fread и fwrite возвращают "1".
ну а вопрос серовно открыт |
|||
|
||||
| ressac |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 25.11.2006 Репутация: нет Всего: 1 |
http://www.opengroup.org/onlinepubs/799098.../xsh/fopen.html
"When a file is opened with update mode (+ as the second or third character in the mode argument), both input and output may be performed on the associated stream. However, output must not be directly followed by input without an intervening call to fflush() or to a file positioning function (.Fn fseek , fsetpos() or rewind()), and input must not be directly followed by output without an intervening call to a file positioning function, unless the input operation encounters end-of-file. " вот теперь, я могу спать спокойно |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |