CodeNet / Языки программирования / C / C++ / Linux/Unix / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник С/C++ для UNIX - Список функций
write
WRITE #include<io.h> требуется только для объявления функции int write (handle, buffer, count); int handle; handle-р, ссылающийся на открытый файл char *buffer; записываемые данные unsigned int count; число байтов Описание. Функция write записывает байты count из буфера buffer в файл, связанный с handle. Операции write начинаются с текущей по- зиции указателя на файл (указатель ассоциирован с заданным фай- лом). Если файл открыт для добавления, операции выполняются в ко- нец файла. После осуществления операций записи указатель на файл (если он есть) увеличивается на количество действительно записан- ных байтов. Возвращаемое значение. Функция write возвращает число действительно записанных байтов. Возвращаемое значение должно быть положительным, но мень- ше числа count (например, когда размер для записи count байтов выходит за пределы пространства на диске). Возвращаемое значение -1 указывает на ошибку; errno устанавливается в одно из следующих значений: ЗНАЧЕНИЕ ЕГО СМЫСЛ EACCES файл открыт для чтения или закрыт для записи EBADF неверный handle-р файла ENOSPC на устройстве нет свободного места Если в файл записано более 32К (максимальный размер для типа int), возвращаемое значение будет иметь тип unsigned int (см.нижеследующий пример). Однако, максимальное число записывае- мых байтов в файл равно 65534; поскольку число 65535 является не- отличимым от -1, то возвращается ошибка. Если заданный файл отк- рыт в текстовом режиме, каждый символ "Перевод строки" на выходе заменяется парой "Возврат каретки-Перевод строки". Эта замена не влияет на возвращаемое значение. См.также fwrite, open, read. Замечание. При записи в файл, открытый в текстовом режиме, символ трактуется как логический конец файла. При записи на уст- ройство символ в буфере влияет на окончание #include<io.h>. #include<stdio.h> #include<fcntl.h> char buffer [60000]; main () { int fh; unsigned int nbytes = 60000, byteswritten; if ((fh=open("c:/data/conf.dat",O_WRONLY))==-1) { perror("open failed on output file"); exit (1); } if ((byteswritten=write(fh,buffer,nbytes))==-1) perror (""); else printf("Wrote %u bytes to file\n",byteswritten); . . . } . - 260 - П Р И Л О Ж Е Н И Е Сообщения об ошибках 1. Введение В этом приложении содержится список и описание значений, в которые устанавливается переменная errno, если при вызове библио- течной процедуры возникает ошибка. Заметим, что некоторые проце- дуры сами устанавливают переменную errno. Сообщения об ошибках связаны с каждым значением errno. Эти сообщения и сообщения, пос- тавляемые пользователями, печатаются посредством применения функ- ции perror. Значение errno отражает соответствующее значение ошибки для того вызова, в котором установлено errno. Значение errno автома- тически не убирается. Поэтому, чтобы получить правильные резуль- таты работы программы, нужно сразу же после вызова этой программы проверять ее на ошибки и печатать соответствующие сообщения об ошибках . Include-файл <erno.h> содержит объявления значений errno. Однако в MS DOS используются не все объявления, заданные в <errno.h>. Include-файл содержит также полное множество значений, которое обеспечивает поддержку совместимости с XENIX и UNIX include-файлами, имеющими аналогичное имя. В этом приложении при- водится список значений errno, используемых в MS DOS. Полный спи- сок значений errno приведен в include-файле <errno.h>. Здесь со- держится также список ошибок, возникающих при выполнении матема- тических процедур. Эти ошибки соответствуют таким типам ошибок, которые объявлены в <math.h> и при возникновении математической ошибки возвращаются функцией matherr. 2. Значения errno В таблице А.1 заданы значения errno, используемые в MS DOS, системные сообщения об ошибках, соответствующие каждому значению, а также краткое описание случаев, повлекших ошибку. Таблица А.1 Значения errno и их описания Значение Сообщение Описание E2BIG Список аргументов Список аргументов превышает очень длинный. 128К или пространство, требуемое для информации окружения, превышает 32К. EACCES Доступ Доступ запрещен: разрешение, запрещен установленное для файла, не задает требуемый доступ. Эта ошибка возникает в тех случаях, когда сделана попытка доступа к файлу путем, который несовместим с атрибутами файла. Например, ошибка возникла при чтении из файла, кото- рый не является открытым; при записи в открытый файл, предназначенный только для чтения; при открытии директория вместо файла. В версиях MS DOS 3.0 и старших EACCES может указы- вать на нарушение блокиров- ки или режима разделения. Ошибка возникает также при переименовании файла или оглавления; при уничтожении существующего директория. EBADF Неверное файловое Значение handle для файла число. не является правильным,либо оно не ссылается на откры- тый файл; либо сделана попытка записи в файл или на устройство, открытые только для чтения (и наобо- рот). EDEADLOCK Может возникнуть Принудительная блокировка: зависание файл не может быть (тупик) блокирован после 10 попыток (для версии MS DOS 3.0 и последующих). EDOM Математический Аргумент для математической аргумент. функции не принадлежит области определения этой функции. EEXIST Файл существует. Флаги O_CREATE и O_EXCL определены при открытии файла, но файл с заданным именем уже существует. EINVAL Неверный Задан неверный аргумент для аргумент. одного из аргументов функции. Например, значение для origin (адрес начала программы), задается, когда указатель на файл находится перед началом файла. EMFILE Много открытых Другие handle-ры для файла недоступны, так как нельзя больше открыть другие файлы. ENOENT Нет данного файла Заданный файл или или директория. директорий не существует или не может быть найден. Это сообщение возникает, если заданный файл не су- ществует или в существующем директории не определена компонента path-имени. ENOEXEC Ошибка .EXE- Сделана попытка создать формата. файл, который не является выполнимым или который имеет неверный .EXE-формат. ENOMEM Памяти недоста- Доступно недостаточно точно. памяти. Это сообщение может возникать, когда для выполнения child-процесса памяти недостаточно, или когда для памяти невозможно обеспечить такое расположе- ние, которое требуется при вызовах sbrk или getcwd. ENOSPC На устройстве не Свободного пространства на осталось свобод- устройстве недостаточно, ного места чтобы произвести запись, (например, диск полон). ERANGE Результат очень Аргумент для математической большой. функции очень большой, по- этому происходит частичная или полная потеря значимос- ти результата. Эта ошибка также может возникнуть в других функциях, когда аргумент больше, чем предполагается. (Например, когда аргумент path-имени для функции getcwd больше, чем предполагается). EXDEV Перекрестная связь Сделана попытка перемещения с устройством. файла на другое устройство (используется ф-я rename). 3. Математические ошибки Ошибки, приведенные ниже, порождаются математическими про- цедурами библиотеки Си. Эти ошибки соответствуют только тем типам ошибок, которые объявлены в <math.h>, и возвращаются функцией matherr. Более подробно обо всех ошибках приведено в описании функции matherr в части 2 данного руководства. Ошибка Описание DOMAIN Аргумент для функции находится вне области определения функции. OVERFLOW Результат очень большой для предостав- ления его в возвращаемом значении. PLOSS Возникла частичная потеря значимости. SING Особенность аргумента: аргумент для функции имеет неверное значение (например, пересылается значения 0 к той функции, которая требует ненулевого значения). TLOSS Возникла общая потеря значимости. UNDERFLOW Результат очень маленький для предоста- вления его в возвращаемом значении.