Лекции по курсу "Системное программирование для UNIX". Литвинов Д.Г. - 5 стр.

UptoLike

Составители: 

5
EIO Для многих устройств или дисковых файлов эта ошибка означает
аппаратный сбой.
Необходимо заметить, что в системе Linux нет функции read64, так как read не
работает со смещениями в файле.
ssize_t pread (int FILEDES, void *BUFFER, size_t SIZE, off_t OFFSET)
Функция идентична read за исключением того, что она считывает данные из
файла не с текущей позиции указателя, а со смещения, указываемого в параметре
OFFSET.
Если компиляция выполнялась с установленным флагом _FILE_OFFSET_BITS
== 64, вместо pread вызывается функция pread64.
Функция возвращает количество реально считанных байтов и –1 в случае
ошибки. Дополнительно к кодам ошибок pread могут возвращаться следующие:
EINVAL Значение OFFSET является отрицательным и, соответственно,
недопустимым;
ESPIPE Файл, ассоциированный с дескриптором, является каналом или FIFO-
файлом и не допускает позиционирования.
ssize_t pread64 (int FILEDES, void *BUFFER, size_t SIZE, off64_t
OFFSET)
Функция идентична pread за исключением того, что работает с 64-битными
файлами.
ssize_t write (int FILEDES, const void *BUFFER, size_t SIZE)
Функция записывает SIZE байтов из буфера BUFFER в файл, заданный
дескриптором FILEDES. Функция возвращает количество реально записанных байтов.
Это значение может быть равно SIZE, однако всегда может быть равно и меньшему
значению. Наилучшим решением проблемы записи в файл является вызовы функции в
цикле до тех пор, пока все данные не будут записаны.
При вызове write данные ставятся в очередь на запись и могут быть немедленно
считаны, однако это не гарантирует того, что данные из временного хранилища были
записаны на диск. Для того, чтобы удостоверится, что все данные были записаны на
диск может быть вызвана функция fsync.
В случае ошибки функция возвращает –1. Значения переменной errno может
принимать следующие значения:
EAGAIN Обычно функция write блокируется до тех пор, пока не закончена
операция записи. Однако, если установлен флаг O_NONBLOCK,
управление возвращается программе немедленно после вызова и
возвращается такой код ошибки. Примером такой ситуации может
служить запись на терминал, который поддерживает потоковое
управление, в случае, если ему послан сигнал STOP остановки работы;
EBADF FILEDES не является дескриптором файла или файл не открыт на
запись;
EFBIG Размер файла при записи может стать больше, чем позволяет
операционная система;
EINTR Операция была прервана сигналом;
EIO Для многих устройств и дисковых файлов означает аппаратный сбой;
ENOSPC Отсутствует свободное пространство на носителе информации,
содержащем файл;
EPIPE Ошибка возникает для каналов и FIFO-файлов, которые не открыты на
чтение ни одним процессом.
EIO             Для многих устройств или дисковых файлов эта ошибка означает
                аппаратный сбой.
        Необходимо заметить, что в системе Linux нет функции read64, так как read не
работает со смещениями в файле.
          ssize_t pread (int FILEDES, void *BUFFER, size_t SIZE, off_t OFFSET)
        Функция идентична read за исключением того, что она считывает данные из
файла не с текущей позиции указателя, а со смещения, указываемого в параметре
OFFSET.
        Если компиляция выполнялась с установленным флагом _FILE_OFFSET_BITS
== 64, вместо pread вызывается функция pread64.
        Функция возвращает количество реально считанных байтов и –1 в случае
ошибки. Дополнительно к кодам ошибок pread могут возвращаться следующие:
EINVAL           Значение OFFSET является отрицательным и, соответственно,
                 недопустимым;
ESPIPE           Файл, ассоциированный с дескриптором, является каналом или FIFO-
                 файлом и не допускает позиционирования.
          ssize_t pread64 (int FILEDES, void *BUFFER, size_t SIZE, off64_t
OFFSET)
       Функция идентична pread за исключением того, что работает с 64-битными
файлами.
          ssize_t write (int FILEDES, const void *BUFFER, size_t SIZE)
        Функция записывает SIZE байтов из буфера BUFFER в файл, заданный
дескриптором FILEDES. Функция возвращает количество реально записанных байтов.
Это значение может быть равно SIZE, однако всегда может быть равно и меньшему
значению. Наилучшим решением проблемы записи в файл является вызовы функции в
цикле до тех пор, пока все данные не будут записаны.
        При вызове write данные ставятся в очередь на запись и могут быть немедленно
считаны, однако это не гарантирует того, что данные из временного хранилища были
записаны на диск. Для того, чтобы удостоверится, что все данные были записаны на
диск может быть вызвана функция fsync.
        В случае ошибки функция возвращает –1. Значения переменной errno может
принимать следующие значения:
EAGAIN           Обычно функция write блокируется до тех пор, пока не закончена
                 операция записи. Однако, если установлен флаг O_NONBLOCK,
                 управление возвращается программе немедленно после вызова и
                 возвращается такой код ошибки. Примером такой ситуации может
                 служить запись на терминал, который поддерживает потоковое
                 управление, в случае, если ему послан сигнал STOP остановки работы;
EBADF            FILEDES не является дескриптором файла или файл не открыт на
                 запись;
EFBIG            Размер файла при записи может стать больше, чем позволяет
                 операционная система;
EINTR            Операция была прервана сигналом;
EIO              Для многих устройств и дисковых файлов означает аппаратный сбой;
ENOSPC           Отсутствует свободное пространство на носителе информации,
                 содержащем файл;
EPIPE            Ошибка возникает для каналов и FIFO-файлов, которые не открыты на
                 чтение ни одним процессом.




                                                                                  5