crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Перезапись уже созданного файла, как это сделать
AD
  опции профиля:
сообщение 17.4.2012, 9:27
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Стоит следующая задачка. Сделать кольцевой файл - наподобие кольцевого буфера. В принципе уже все сделал. Но есть одна проблема: я возвращаю счетчик позиции в начало файла, с помощью lseek перевожу на начало файла, но самой перезаписи не вижу. То есть в итоге получается файл, в котором в начале вижу то, что записал сначала, а перезаписи не вижу. Может ошибка в каких-то флагах? Все делается с помощью POSIX функций.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
maint
  опции профиля:
сообщение 17.4.2012, 11:58
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char *argv[])
{

    int fd;
    int n_write;
    int n_read;
    char buf[4096];

    if((fd = open(argv[1], O_RDWR)) < 0) return 1;
    while((n_read = read(fd, buf, 4096)) > 0)
       ;
    lseek(fd, SEEK_SET, 0L);
    strcpy(buf, "111111111111111");
    n_write = write(fd, buf, strlen(buf));
    printf("n_write %d\n", n_write);
    close(fd);

    return 0;
}

работает 100 пудов, только проверил. Пишет в начало файла
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 2:27