truncate

TRUNCATE(2)     Ð ÑководÑÑво пÑогÑаммиÑÑа Linux     TRUNCATE(2)



ÐÐЯ
       truncate, ftruncate - обÑÐµÐ·Ð°ÐµÑ Ñайл до заданного
       ÑазмеÑа

ÐÐÐÐÐ
       #include <unistd.h>
       #include <sys/types.h>

       int truncate(const char *path, off_t length);
       int ftruncate(int fd, off_t length);

   ТÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÐºÑоÑа ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑÑв Ð´Ð»Ñ glibc
   (Ñм. feature_test_macros(7)):

       truncate():
           _XOPEN_SOURCE >= 500
               || /* наÑÐ¸Ð½Ð°Ñ Ñ glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
               || /* в веÑÑиÑÑ glibc <= 2.19: */ _BSD_SOURCE

       ftruncate():
           _XOPEN_SOURCE >= 500
               || /* наÑÐ¸Ð½Ð°Ñ Ñ glibc 2.3.5: */ _POSIX_C_SOURCE >= 200112L
               || /* в веÑÑиÑÑ glibc <= 2.19: */ _BSD_SOURCE

ÐÐÐСÐÐÐÐ
       ФÑнкÑии truncate() и ftruncate() обÑезаÑÑ Ð¾Ð±ÑÑнÑй
       Ñайл, ÑказаннÑй по имени path или ÑÑÑлке  fd,
       до ÑазмеÑа, Ñказанного в length (в байÑаÑ).

       ÐÑли до ÑÑого Ñайл бÑл болÑÑе Ñказанного
       ÑазмеÑа, вÑе лиÑние даннÑе бÑдÑÑ ÑÑеÑÑнÑ. ÐÑли
       Ñайл бÑл менÑÑе, он бÑÐ´ÐµÑ ÑвелиÑен, а
       дополниÑелÑÐ½Ð°Ñ ÑаÑÑÑ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð°
       нÑлевÑми байÑами («\0»).

       СмеÑение Ñайла не изменÑеÑÑÑ.

       ÐÑли ÑÐ°Ð·Ð¼ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»ÑÑ, Ð¿Ð¾Ð»Ñ st_ctime и st_mtime
       (вÑÐµÐ¼Ñ Ð¿Ð¾Ñледнего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑоÑÑоÑÐ½Ð¸Ñ Ð¸
       вÑÐµÐ¼Ñ Ð¿Ð¾Ñледнего изменениÑ,
       ÑооÑвеÑÑÑвенно; ÑмоÑÑиÑе stat(2)) Ñайла бÑдÑÑ
       обновленÑ, а биÑÑ Ñежимов set-user-ID и set-group-ID
       могÑÑ Ð±ÑÑÑ ÑбÑоÑенÑ.

       ÐÐ»Ñ ftruncate() Ñайл должен бÑÑÑ Ð¾ÑкÑÑÑ Ð½Ð° запиÑÑ;
       Ð´Ð»Ñ truncate() Ñайл должен бÑÑÑ Ð´Ð¾ÑÑÑпен на
       запиÑÑ.

ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ
       ÐÑи ÑÑпеÑном вÑполнении возвÑаÑаеÑÑÑ 0. Ð
       ÑлÑÑае оÑибки возвÑаÑаеÑÑÑ -1, а errno
       ÑÑÑанавливаеÑÑÑ Ð² ÑооÑвеÑÑÑвÑÑÑее знаÑение.

ÐШÐÐÐÐ
       ÐÐ»Ñ truncate():

       EACCES Родном из каÑалогов пÑеÑикÑа не
              ÑазÑеÑен поиÑк, либо ÑказаннÑй Ñайл не
              доÑÑÑпен на запиÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ
              (ÑмоÑÑиÑе Ñакже path_resolution(7)).

       EFAULT ÐнаÑение path ÑказÑÐ²Ð°ÐµÑ Ð·Ð° пÑеделÑ
              адÑеÑного пÑоÑÑÑанÑÑва, вÑделенного
              пÑоÑеÑÑÑ.

       EFBIG  ÐÑгÑÐ¼ÐµÐ½Ñ length болÑÑе макÑималÑно
              допÑÑÑимого ÑазмеÑа Ñайла (XSI).

       EINTR  ÐÑи блокиÑÑÑÑем ожидании завеÑÑениÑ
              вÑзов бÑл пÑеÑван обÑабоÑÑиком
              Ñигналов; ÑмоÑÑиÑе fcntl(2) и signal(7).

       EINVAL ÐÑгÑÐ¼ÐµÐ½Ñ length ÑвлÑеÑÑÑ Ð¾ÑÑиÑаÑелÑнÑм или
              болÑÑе макÑималÑно допÑÑÑимого ÑазмеÑа
              Ñайла.

       EIO    Ðо вÑÐµÐ¼Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑного
              деÑкÑипÑоÑа (inode) возникла оÑибка
              ввода/вÑвода.

       EISDIR УказаннÑй Ñайл ÑвлÑеÑÑÑ ÐºÐ°Ñалогом.

       ELOOP  Ðо вÑÐµÐ¼Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ pathname вÑÑÑеÑилоÑÑ
              ÑлиÑком много ÑимволÑнÑÑ ÑÑÑлок.

       ENAMETOOLONG
              ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð¸Ð¼ÐµÐ½Ð¸ пÑÑи ÑодеÑÐ¶Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ 255
              Ñимволов, или веÑÑ Ð¿ÑÑÑ ÑодеÑÐ¶Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ
              1023 Ñимволов.

       ENOENT УказаннÑй Ñайл не ÑÑÑеÑÑвÑеÑ.

       ENOTDIR
              ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð² пÑеÑикÑе пÑÑи не ÑвлÑеÑÑÑ
              каÑалогом.

       EPERM  ÐÑполÑзÑÐµÐ¼Ð°Ñ ÑÐ°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑÑема не
              поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑаÑÑиÑение Ñайла болÑÑе
              его ÑекÑÑего ÑазмеÑа.

       EPERM  ÐÑполнение опеÑаÑии пÑедоÑвÑаÑено
              опеÑаÑÑванием (file seal); ÑмоÑÑиÑе fcntl(2).

       EROFS  УказаннÑй Ñайл наÑодиÑÑÑ Ð½Ð° Ñайловой
              ÑиÑÑеме, ÑмонÑиÑованной ÑолÑко длÑ
              ÑÑениÑ.

       ETXTBSY
              Файл ÑвлÑеÑÑÑ Ð¸ÑполнÑемÑм Ñайлом,
              коÑоÑÑй в даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¸ÑполнÑеÑÑÑ.

       ÐÐ»Ñ ftruncate() дейÑÑвÑÑÑ Ñе же оÑибки, за
       иÑклÑÑением Ñого, ÑÑо вмеÑÑо оÑибок,
       ÑвÑзаннÑÑ Ñ Ð½ÐµÐ¿ÑавилÑнÑм path, поÑвлÑÑÑÑÑ
       оÑибки, ÑвÑзаннÑе Ñ ÑайловÑм деÑкÑипÑоÑом fd:

       EBADF  ÐнаÑение fd не ÑвлÑеÑÑÑ Ð¿ÑавилÑнÑм
              ÑайловÑм деÑкÑипÑоÑом.

       EBADF или EINVAL
              ÐеÑкÑипÑÐ¾Ñ fd не оÑкÑÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи.

       EINVAL ÐеÑкÑипÑÐ¾Ñ fd не ÑказÑÐ²Ð°ÐµÑ Ð½Ð° обÑÑнÑй
              Ñайл.

       EINVAL или EBADF
              ФайловÑй деÑкÑипÑÐ¾Ñ fd не оÑкÑÑÑ Ð½Ð°
              запиÑÑ. Ð POSIX ÑÑо допÑÑкаеÑÑÑ Ð¸
              пеÑеноÑимÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ
              обÑабаÑÑваÑÑ Ð»ÑбÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð´Ð»Ñ ÑÑого ÑлÑÑаÑ
              (Linux возвÑаÑÐ°ÐµÑ EINVAL).

СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       POSIX.1-2001, POSIX.1-2008, 4.4BSD, SVr4 (даннÑе вÑзовÑ
       впеÑвÑе поÑвилиÑÑ Ð² 4.2BSD).

ÐÐÐÐЧÐÐÐЯ
       Ð ÐÐÐСÐÐÐРпÑиведена инÑоÑмаÑÐ¸Ñ Ð´Ð»Ñ
       XSI-ÑовмеÑÑимÑÑ ÑиÑÑем. ÐÐ»Ñ Ð½Ðµ XSI-ÑовмеÑÑимÑÑ
       ÑиÑÑем в ÑÑандаÑÑе POSIX опиÑано два
       Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ftruncate(), когда length пÑевÑÑаеÑ
       Ð´Ð»Ð¸Ð½Ñ Ñайла (замеÑим, ÑÑо truncate() не
       обÑзаÑелÑно бÑÑÑ Ð²Ð¾ вÑÐµÑ ÑÐ°ÐºÐ¸Ñ Ð¾ÐºÑÑжениÑÑ):
       или веÑнÑÑÑ Ð¾ÑибкÑ, или ÑаÑÑиÑиÑÑ Ñайл.
       Ðодобно болÑÑинÑÑÐ²Ñ ÑеализаÑий UNIX, Linux
       ÑооÑвеÑÑÑвÑÐµÑ ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ XSI, когда ÑабоÑÐ°ÐµÑ Ñ
       ÑоднÑми ÑайловÑми ÑиÑÑемами. Ðднако, в
       некоÑоÑÑÑ Ð½ÐµÑоднÑÑ ÑайловÑÑ ÑиÑÑÐµÐ¼Ð°Ñ Ð½Ðµ
       ÑазÑеÑаеÑÑÑ Ð¸ÑполÑзоваÑÑ truncate() и ftruncate() длÑ
       ÑаÑÑиÑÐµÐ½Ð¸Ñ Ñайла болÑÑе его ÑекÑÑей длинÑ:
       напÑимеÑ, в Linux ÑÑо каÑаеÑÑÑ VFAT.

       ÐеÑвонаÑалÑнÑе веÑÑии ÑиÑÑемнÑÑ Ð²Ñзовов
       truncate() и ftruncate() в Linux не Ñмели ÑабоÑаÑÑ Ñ
       болÑÑими ÑайловÑми ÑмеÑениÑми. Ðозднее, в
       Linux 2.4 бÑли Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ ÑиÑÑемнÑе вÑзовÑ
       truncate64() и ftruncate64() Ð´Ð»Ñ ÑабоÑÑ Ñ Ð±Ð¾Ð»ÑÑими
       Ñайлами. Ðднако ÑÑо ÑазлиÑие можеÑ
       игноÑиÑоваÑÑÑÑ Ð¿ÑиложениÑми, коÑоÑÑе
       иÑполÑзÑÑÑ glibc, Ñак как имеÑÑиеÑÑ Ð² ней
       обÑÑÑоÑнÑе ÑÑнкÑии ÑамоÑÑоÑÑелÑно задейÑÑвÑÑÑ
       более новÑй ÑиÑÑемнÑй вÑзов, еÑли он
       доÑÑÑпен.

       Ðа некоÑоÑÑÑ 32-биÑнÑÑ Ð°ÑÑиÑекÑÑÑÐ°Ñ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ ÑÑиÑ
       ÑиÑÑемнÑÑ Ð²Ñзовов оÑлиÑаеÑÑÑ Ð¾Ñ Ð¾Ð¿Ð¸Ñанного
       вÑÑе по пÑиÑинам, ÑказаннÑм в syscall(2).

ÐÐФÐÐТЫ
       Ðз-за оÑибки в заголовоÑном Ñайле glibc 2.12
       минималÑное знаÑение _POSIX_C_SOURCE, ÑÑебÑемое
       Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð´ÐµÐºÐ»Ð°ÑаÑии ftruncate(), бÑло
       Ñавно 200809L вмеÑÑо 200112L. РпоÑледÑÑÑÐ¸Ñ Ð²ÐµÑÑиÑÑ
       glibc ÑÑа оÑибка бÑла иÑпÑавлена.

СÐÐТРÐТРТÐÐÐÐ
       truncate(1), open(2), stat(2), path_resolution(7)



Linux                             2016-03-15                       TRUNCATE(2)