Перезапись уже созданного файла, как это сделать |
Здравствуйте, гость ( Вход | Регистрация )
Перезапись уже созданного файла, как это сделать |
AD |
17.4.2012, 9:27
Сообщение
#1
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Стоит следующая задачка. Сделать кольцевой файл - наподобие кольцевого буфера. В принципе уже все сделал. Но есть одна проблема: я возвращаю счетчик позиции в начало файла, с помощью lseek перевожу на начало файла, но самой перезаписи не вижу. То есть в итоге получается файл, в котором в начале вижу то, что записал сначала, а перезаписи не вижу. Может ошибка в каких-то флагах? Все делается с помощью POSIX функций.
|
|
|
maint |
17.4.2012, 9:39
Сообщение
#2
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
Стоит следующая задачка. Сделать кольцевой файл - наподобие кольцевого буфера. В принципе уже все сделал. Но есть одна проблема: я возвращаю счетчик позиции в начало файла, с помощью lseek перевожу на начало файла, но самой перезаписи не вижу. То есть в итоге получается файл, в котором в начале вижу то, что записал сначала, а перезаписи не вижу. Может ошибка в каких-то флагах? Все делается с помощью POSIX функций. с помощью каких POSIX функций ? От функций и флаги зависят |
|
|
AD |
17.4.2012, 9:49
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
maint |
17.4.2012, 10:30
Сообщение
#4
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
|
|
|
AD |
17.4.2012, 10:41
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
maint |
17.4.2012, 11:07
Сообщение
#6
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
для перезаписи O_RDWR. И проверять код возврата из lseek, как и из write. Может и не было смещения и записи Блин. Ну я не маленький все же. Уж такие вещи я точно знаю! Конечно, это первое, что проверил! Смещение в файле происходит! а что вы хотели что бы я нашел без текста программы . Была хохмочка в свое время, были отличия у open у фряхи и линуха. Но на другом уровне, на fopen. fsync можно попробовать. Но если close выполняется, по моему бессмысленно. Как и setbuf. Все же хочу спросить write возвращает именно нужное кол-во записанных байт ? Сообщение отредактировал maint - 17.4.2012, 11:08 |
|
|
AD |
17.4.2012, 11:25
Сообщение
#7
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
а что вы хотели что бы я нашел без текста программы . Была хохмочка в свое время, были отличия у open у фряхи и линуха. Но на другом уровне, на fopen. fsync можно попробовать. Но если close выполняется, по моему бессмысленно. Как и setbuf. Все же хочу спросить write возвращает именно нужное кол-во записанных байт ? Вопрос, как мне казалось, не требовал кода. Уровень вопроса, на мой взгляд, подобен вопросу в предыдущей теме, когда можно подсказать без кода! Кол-во байт write возвращает правильное! Сообщение отредактировал AD - 17.4.2012, 11:28 |
|
|
maint |
17.4.2012, 11:58
Сообщение
#8
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
работает 100 пудов, только проверил. Пишет в начало файла |
|
|
AD |
17.4.2012, 12:24
Сообщение
#9
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
работает 100 пудов, только проверил. Пишет в начало файла По-моему, у функции lseek параметры надо поменять местами. Вот так:
А куда Вы пишете? В файл самой программы что-ли? А.... Понял.... Блин. Ваш код проверил. Работает. У меня чего-то не удается. Буду разбираться!!! Сообщение отредактировал AD - 17.4.2012, 12:13 |
|
|
maint |
17.4.2012, 12:27
Сообщение
#10
|
Участник Группа: Участник Сообщений: 235 Регистрация: 3.8.2009 Из: Иркутск Пользователь №: 982 Спасибо сказали: 28 раз(а) Репутация: 2 |
работает 100 пудов, только проверил. Пишет в начало файла По-моему, у функции lseek параметры надо поменять местами. Вот так:
А куда Вы пишете? В файл самой программы что-ли? А.... Понял.... Блин. Ваш код проверил. Работает. У меня чего-то не удается. Буду разбираться!!! в первый аргумент вызова open(argv[1]). Сама программа argv[0]. Ага параметры ошибся. Но не принципиально. SEEK_SET все равно нулю равен. Проверил еще раз, тот же результат Сообщение отредактировал maint - 17.4.2012, 12:30 |
|
|
Текстовая версия | Сейчас: 25.11.2024, 10:40 |