LINUX.ORG.RU

Помогите вспомнить системный вызов


0

0

Встала задача создать наперёд пустой файл большого размера, а потом туда постепенно писать. Но, создав файл, прийдётся его искуственно забивать левой информацией иначе ему не выделится дисковое пространство.. Помнится был какой-то системный вызов который создавал файл и реально выделял под него место на диске, вот имя этого вызова не помню и не могу найти..

anonymous

Ответ на: комментарий от anonymous

Оно, спасибо большое. Переносимость в данном случае не волнует, т.к. кроме как на linux оно не будет запускаться..

anonymous
()

fallocate - не портабельный костыль.

То, что тебе нужно делается обычным lseek'ом.

anonymous
()
Ответ на: комментарий от anonymous

> Оно, спасибо большое. Переносимость в данном случае не волнует, т.к. кроме как на linux оно не будет запускаться..

тогда уж posix_fallocate().

POSIX_FALLOCATE(3)         Linux Programmer's Manual        POSIX_FALLOCATE(3)

NAME
       posix_fallocate - allocate file space

SYNOPSIS
       #define _XOPEN_SOURCE 600
       #include <stdlib.h>

       int posix_fallocate(int fd, off_t offset, off_t len);

DESCRIPTION
       The  function  posix_fallocate()  ensures  that disk space is allocated for the file
       referred to by the descriptor fd for the bytes in the range starting at  offset  and
       continuing  for len bytes.  After a successful call to posix_fallocate(), subsequent
       writes to bytes in the specified range are guaranteed not to fail because of lack of
       disk space.

       If  the size of the file is less than offset+len, then the file is increased to this
       size; otherwise the file size is left unchanged.

AVAILABILITY
       posix_fallocate() is available since glibc 2.1.94.

CONFORMING TO
       POSIX.1-2001.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

> fallocate - не портабельный костыль.

однако, posix_fallocate - это уже вполне стандартная вещь. если у кого-то её всё ещё нет и этот кто-то не имеет стремления быть POSIX compliant - это его проблемы.

> То, что тебе нужно делается обычным lseek'ом.

внимательно читаем статью на LWN по приведённой ссылке и думаем, почему то-же самое в принципе не делается через lseek(2). для полноты картины вспоминаем о sparced files.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

А, я невнимательно прочитал вопрос. Думал, sparse файл как раз и нужен.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.