Colors of Ray+Hue'

posix_fallocate

Linux Kernel2016. 8. 16. 09:55

original Source: http://pubs.opengroup.org/onlinepubs/009695399/functions/posix_fallocate.html


posix_fallocate

NAME

posix_fallocate 함수는 해당 파일에 대해서 요청하는 크기만큼 블록을 미리 할당한다. 주로 filesystem에서의 block fragmentation을 방지하는데 많은 도움이 되며, torrent와 같이 미리 할당이 요구되는 작업에 효율적이다. posix_fallocate를 지원하지 않는 파일 시스템에 대해서는 커널에서 적절히(?) 블록을 미리 할당한다. 

NAME

posix_fallocate - file space control (ADVANCED REALTIME)

SYNOPSIS

[ADV] [Option Start] #include <fcntl.h>

int posix_fallocate(int
 fd, off_t offset, off_t len); [Option End]

DESCRIPTION

The posix_fallocate() function shall ensure that any required storage for regular file data starting at offset and continuing for len bytes is allocated on the file system storage media. If posix_fallocate() returns successfully, subsequent writes to the specified file data shall not fail due to the lack of free space on the file system storage media.

posix_fallocate() 함수는 일반 파일이 요구하는 연속된 공간(off-len)이 스토리지 partition에 연속적으로 할당되어 있는 것을 보장 한다. 만일 posix_fallocate()가 success를 리턴하면, 반드시 요구되는 공간이 있다는 것을 의미한다. 해당 파일에 대한 연속적인 쓰기는 파일시스템 스토리지에 free space가 없는 이유로 실패할 수 없다. 

만일 4KB 연속적인 공간을 해당 fd를 포함하고 있는 파일시스템의 블록 디바이스에 할당할 경우, posix_fallocate(fd,0,4096) 과 같이 사용할 수 있다. 

If the offset+ len is beyond the current file size, then posix_fallocate() shall adjust the file size to offset+ len. Otherwise, the file size shall not be changed.

만일 offset+ len 가 현재 파일 크기보다 크면, posix_fallocate() 는 파일 크기를 offset+ len 로 조정해야 한다. 아닐경우, 파일 크기는 변할 수 없다.

It is implementation-defined whether a previous posix_fadvise() call influences allocation strategy.

Space allocated via posix_fallocate() shall be freed by a successful call to creat() or open() that truncates the size of the file. Space allocated via posix_fallocate() may be freed by a successful call to ftruncate() that reduces the file size to a size smaller than offset+len.

posix_fallocate() 에 의해 할당된 공간은 파일의 크기를 절단하는 create나 open에 해제 될 수 있다. posix_fallocate() 에 의해 할당된 공간은  파일 크기를 offset+len 보다 작은 파일 크기로 줄일 수 있는 ftruncate() 에 의해 해제될 수 있다.  

RETURN VALUE

success: return zero

else return errors below:

[EBADF]      The fd argument is not a valid file descriptor.

[EBADF]      The fd argument references a file that was opened without write permission.

[EFBIG]       The value of offset+ len is greater than the maximum file size.

[EINTR]       A signal was caught during execution.

[EINVAL]     The len argument was zero or the offset argument was less than zero.

[EIO]          An I/O error occurred while reading from or writing to a file system.

[ENODEV]   The fd argument does not refer to a regular file.

[ENOSPC]    There is insufficient free space remaining on the file system storage media.

[ESPIPE]      The fd argument is associated with a pipe or FIFO.


'Linux Kernel' 카테고리의 다른 글

JEMALLOC: A Scalable Concurrent malloc(3) Implementation for FreeBSD  (0) 2016.08.18
malloc 소개  (0) 2016.08.18
System Memory  (0) 2016.08.13
Radix Tree  (0) 2016.08.12
Linear VS Physical Address  (0) 2016.08.10