pread

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



ÐÐЯ
       pread, pwrite - ÑÑение или запиÑÑ Ð¸Ð½ÑоÑмаÑии из
       Ñайлового деÑкÑипÑоÑа ÑоглаÑно заданномÑ
       ÑмеÑениÑ

ÐÐÐÐÐ
       #include <unistd.h>

       ssize_t pread(int fd, void *buf, size_t count, off_t offset);

       ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset);

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

       pread(), pwrite():
           _XOPEN_SOURCE >= 500
           || /* наÑÐ¸Ð½Ð°Ñ Ñ glibc 2.12: */ _POSIX_C_SOURCE >= 200809L

ÐÐÐСÐÐÐÐ
       pread() ÑиÑÐ°ÐµÑ Ð¼Ð°ÐºÑимÑм count байÑов из
       Ñайлового деÑкÑипÑоÑа fd, наÑÐ¸Ð½Ð°Ñ Ñо ÑмеÑениÑ
       offset (Ð¾Ñ Ð½Ð°Ñала Ñайла), в бÑÑеÑ, наÑÐ¸Ð½Ð°Ñ Ñ buf.
       ТекÑÑÐ°Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ñайла не изменÑеÑÑÑ.

       pwrite() запиÑÑÐ²Ð°ÐµÑ Ð¼Ð°ÐºÑимÑм count байÑов из
       бÑÑеÑа buf в ÑайловÑй деÑкÑипÑÐ¾Ñ fd , наÑÐ¸Ð½Ð°Ñ Ñо
       ÑмеÑÐµÐ½Ð¸Ñ offset. ТекÑÑÐ°Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ñайла не
       изменÑеÑÑÑ.

       Файл, заданнÑй в fd, должен позволÑÑÑ
       изменение ÑмеÑениÑ.

ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ
       ÐÑи ÑÑпеÑном вÑполнении pread() возвÑаÑаеÑÑÑ
       колиÑеÑÑво ÑÑиÑаннÑÑ Ð±Ð°Ð¹Ñ (Ð½Ð¾Ð»Ñ ÑказÑÐ²Ð°ÐµÑ Ð½Ð°
       ÐºÐ¾Ð½ÐµÑ Ñайла), а pwrite() â колиÑеÑÑво запиÑаннÑÑ
       байÑ.

       ÐамеÑим, ÑÑо Ð´Ð»Ñ ÑÑпеÑного вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ
       ÑÑиÑаеÑÑÑ Ð¾Ñибкой пеÑедаÑа менÑÑего
       колиÑеÑÑва Ð±Ð°Ð¹Ñ Ñем запÑоÑено (ÑмоÑÑиÑе read(2)
       и write(2)).

       ÐÑи оÑибке возвÑаÑаеÑÑÑ -1, а в errno ÑодеÑжиÑÑÑ
       код оÑибки.

ÐШÐÐÐÐ
       ÐÑзов pread() Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²ÐµÑÑиÑÑÑÑ Ð½ÐµÑдаÑно и
       запиÑаÑÑ Ð² errno один из кодов оÑибки,
       опÑеделÑннÑÑ Ð´Ð»Ñ read(2) или lseek(2). ÐÑзов pwrite()
       Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²ÐµÑÑиÑÑÑÑ Ð½ÐµÑдаÑно и запиÑаÑÑ Ð² errno
       один из кодов оÑибки, опÑеделÑннÑÑ Ð´Ð»Ñ
       write(2) или lseek(2).

ÐÐРСÐÐ
       СиÑÑемнÑе вÑÐ·Ð¾Ð²Ñ pread() и pwrite() бÑли внеÑÐµÐ½Ñ Ð²
       ÑдÑо Linux, наÑÐ¸Ð½Ð°Ñ Ñ Ð²ÐµÑÑии 2.1.60; как ÑлеменÑÑ
       ÑаблиÑÑ ÑиÑÑемнÑÑ Ð²Ñзовов i386 бÑли добавленÑ
       в ÑдÑо веÑÑии 2.1.69. ÐоддеÑжка в библиоÑеке С
       (вклÑÑÐ°Ñ ÑмÑлÑÑÐ¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ lseek(2) в ÑÑаÑÑÑ ÑдÑаÑ,
       не имеÑÑÐ¸Ñ ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ ÑиÑÑемнÑÑ Ð²Ñзовов)
       бÑла добавлена в glibc 2.1.

СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       POSIX.1-2001, POSIX.1-2008.

ÐÐÐÐЧÐÐÐЯ
       СиÑÑемнÑе вÑÐ·Ð¾Ð²Ñ pread() и pwrite()  оÑобенно
       Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð² многониÑиевÑÑ Ð¿ÑиложениÑÑ. Ðни
       позволÑÑÑ Ð½ÐµÑколÑким ниÑÑм вÑполнÑÑÑ
       ввод-вÑвод в один ÑайловÑй деÑкÑипÑÐ¾Ñ Ð½Ðµ
       ÑÑиÑÑÐ²Ð°Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ Ñайлового ÑмеÑениÑ,
       Ñделанного дÑÑгими ниÑÑми.

   ÐÑлиÑÐ¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñекой C и ÑдÑом
       Ð Linux нижележаÑие ÑиÑÑемнÑе вÑзовÑ
       пеÑÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ñ Ð² ÑдÑе веÑÑии 2.6: pread() ÑÑал
       назÑваÑÑÑÑ pread64(), а pwrite() — pwrite64(). ÐомеÑа
       ÑиÑÑемнÑÑ Ð²Ñзовов оÑÑалиÑÑ Ð¿Ñежними.
       ÐбÑÑÑоÑнÑе ÑÑнкÑии pread() и pwrite() в glibc ÑкÑÑваÑÑ
       даннÑе пеÑеименование.

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

ÐÐФÐÐТЫ
       СоглаÑно POSIX ÑÑебÑеÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¾ÑкÑÑÑие Ñайла Ñ
       Ñлагом O_APPEND не влиÑло на ÑаÑположение, по
       коÑоÑÐ¾Ð¼Ñ pwrite() запиÑÑÐ²Ð°ÐµÑ Ð´Ð°Ð½Ð½Ñе. Ðднако в
       Linux, еÑли Ñайл оÑкÑÑваеÑÑÑ Ñ Ñлагом O_APPEND,
       pwrite() добавлÑÐµÑ Ð´Ð°Ð½Ð½Ñе в ÐºÐ¾Ð½ÐµÑ Ñайла,
       незавиÑимо Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ offset.

СÐÐТРÐТРТÐÐÐÐ
       lseek(2), read(2), readv(2), write(2)



Linux                             2015-07-23                          PREAD(2)