Функция Write() на языке C

Funkcia Write Na Azyke C



Управление файлами в программировании — это задача, в которой программист должен хорошо разбираться. Знание различных функций открытия, чтения и записи имеет важное значение, поскольку они всегда нужны нам для хранения или удаления информации, хранящейся в файлах.

В этой статье Linux Hint вы узнаете, как использовать функцию write() для записи файлов.







Мы объясним все об этой элле, ее синтаксисе, методе вызова, входных и выходных аргументах, типах данных, которые она принимает в каждом случае, и как ее правильно объявить.



Затем мы применяем то, что узнали, поместив использование этой функции в практические примеры, которые мы подготовили для вас с фрагментами кода и изображениями, демонстрирующими использование write() в языке C.



Для того, чтобы вы имели исчерпывающие знания об использовании функции write(), мы добавили специальный раздел, в котором описаны отдельные ошибки, которые могут возникнуть при использовании этой функции, а также их обнаружение и идентификация, чтобы у вас была необходимые приемы для быстрого решения в случае их возникновения.





Синтаксис функции Write() в языке C

инт писать ( инт фд , пустота * буф , size_t н ) ;

Описание функции Write() на языке C

Функция write() записывает в открытый файл. Эта функция записывает содержимое буфера, на который указывает «buf», в файл, указанный его дескриптором во входном аргументе «fd». Размер блока, который будет записан в файл, должен быть указан во входном аргументе «n».

Чтобы иметь возможность писать с помощью функции write(), файл должен быть открыт с помощью функции open() и указан в атрибутах O_RDONLY или O_RDWR. В противном случае эта функция не действует.



Если вызов успешен, он возвращает количество введенных символов. Если при записи возникает ошибка, он возвращает результат, равный -1. Идентификационный код, указывающий на ошибку, можно получить из глобальной переменной errno, которая определена в заголовке «errno.h».

Позже вы найдете раздел, в котором мы объясним, как обнаруживать и идентифицировать наиболее распространенные ошибки этой функции.

Функция write() определена в заголовке unistd.h. Флаги, определяющие атрибуты и режим открытия файла, определены в «fcntl.h». Чтобы использовать функции open() и write(), вы должны включить эти заголовки в свой код следующим образом:

#include

#include

Как записать в файл с помощью функции Write() на языке C

В этом примере мы записываем пустой текстовый файл с именем «example.txt», который мы создали ранее в каталоге «Документы».

Первый шаг — вставить необходимые заголовки. Внутри функции main() откройте файл с помощью функции open(). Для этого нам нужно объявить целое число «fd», которое служит файловым дескриптором, и 1024-символьный буферный массив «buf», содержащий текст, который мы хотим записать в файл. В этом буфере мы храним первый абзац справочной страницы GCC, чтобы записать его в файл «example.txt».

После открытия файла с помощью функции open() в режиме чтения/записи мы записываем в файл, вызывая функцию write() и передавая файловый дескриптор «fd» в качестве первого входного аргумента, указатель «buf» в качестве второго аргумент, а размер строки, содержащейся в массиве, в качестве третьего аргумента, который мы получаем с помощью функции strlen(). Вот код для этого примера:

#include

#include

#include

#include

#include

#include

#include

пустота основной ( )

{

инт фд ;

уголь буфер [ 1024 ] '=' «Когда вы вызываете GCC, он обычно выполняет предварительную обработку, компиляцию, сборку и компоновку. Общие параметры позволяют вам остановить этот процесс на промежуточном этапе. Например, параметр -c говорит не запускать компоновщик. объектные файлы, выводимые ассемблером». ;

фд '=' открыть ( 'Документы/пример.txt' , O_RDWR ) ;

писать ( фд , & буфер , стрлен ( буфер ) ) ;

закрывать ( фд ) ;

}

На следующем рисунке мы видим компиляцию и выполнение этого кода вместе с открытым файлом, который записывается функцией write():

Как добавить текст в конец файла с помощью функции Write() на языке C

Когда файл открывается с указанием флагов O_WRONLY или O_RDWR, курсор переходит на первую позицию и начинает запись оттуда.

Чтобы добавить текст в конец файла, он должен быть указан с помощью логической операции ИЛИ между флагами O_WRONLY или O_RDWR и флагом O_ APPEND во входном аргументе flags функции open() при открытии файла. Таким образом, курсор помещается в конец файла, и запись начинается оттуда. Кроме того, атрибуты и режим записи можно изменить после открытия файла с помощью функции fcntl().

На следующем рисунке вы можете увидеть код, который добавляет текст в конец файла, который мы написали в предыдущем примере:

#include

#include

#include

#include

#include

#include

#include

пустота основной ( )

{

инт фд ;

уголь буфер [ 1024 ] '=' «Этот текст добавлен. Этот текст добавлен». ;

фд '=' открыть ( 'Документы/пример.txt' , O_RDWR | O_APPEND ) ;

писать ( фд , & буфер , стрлен ( буфер ) ) ;

закрывать ( фд ) ;

}

На следующем изображении показан добавленный текст. Как видите, при таком методе открытия функция write() начинает запись с позиции последнего символа, записанного в файл:

Как обнаружить и идентифицировать ошибки, которые могут возникнуть при использовании функции Write() в языке C

Использование write() может генерировать различные ошибки. Когда это происходит, эта функция возвращает результат, равный -1.

Самый простой способ определить, произошла ли ошибка, — использовать условие «если», где условием является возвращаемое значение -1. Теперь давайте посмотрим, как вы можете использовать этот метод, чтобы определить, произошла ли ошибка:

инт н ;

н '=' писать ( фд , & буфер , стрлен ( буфер ) ) ;

если ( н == - 1 ) {

printf ( 'Произошла ошибка при попытке записи файла.' ) ;

}

Если функция write() возвращается с ошибкой, она переходит к оператору «if» и печатает сообщение « Произошла ошибка при попытке записи файла “.

При возникновении ошибки числовой код автоматически сохраняется в глобальной переменной errno, которая определена в заголовке «errno.h». Этот код можно использовать для идентификации возникшей ошибки.

Ниже приведен отрывок с ошибками, которые может генерировать функция write() и которые определены в заголовке «errno.h», а также краткое описание каждой ошибки и соответствующее целочисленное значение:

Определение Значение в ошибке Ошибка
СНОВА одиннадцать Попробуйте еще раз.
ЭБАДФ 9 Неверный номер файла.
ЭДЕСТАДДРРЕК 89 Требуется адрес назначения.
ЭДКО 122 Превышена квота.
НЕИСПРАВНОСТЬ 14 Неверный адрес.
ЭФБИГ 27 Файл слишком большой.
EINTR 4 Системный вызов прерван.
ОДИН ВЫБОР 22 Недействительным аргумент.
ЭИО 5 Ошибка ввода-вывода.
ENOSPC 28 На устройстве не осталось свободного места.
Верхний 1 Операция запрещена.

Самый простой способ идентифицировать ошибку — разомкнуть переключатель, где переменная errno — это условие перехода, а каждый случай — определение ошибки.

Далее рассмотрим пример, в котором мы пытаемся ввести дескриптор с отрицательным знаком, что приводит к ошибке. Чтобы определить ошибку, мы используем условие «если», которое мы видели в предыдущем фрагменте. Для ее выявления вскрываем переключатель с тремя наиболее распространенными ошибками, которые может выдавать эта функция.

#include

#include

#include

#include

#include

#include

#include <ошибка.h>

пустота основной ( )

{

инт фд ;

инт н ;

уголь буфер [ 1024 ] '=' 'Привет, мир' ;

фд '=' открыть ( 'Документы/пример.txt' , O_RDWR ) ;

н '=' писать ( - 2 , & буфер , стрлен ( буфер ) ) ;

если ( н == - 1 ) {

выключатель ( ошибаться ) {

случай ЭБАДФ : {

printf ( «Неверный номер файла. Ошибка: %i \n ' , ошибаться ) ;

перерыв ; }

случай ОДИН ВЫБОР : {

printf ( 'Недопустимый аргумент. Ошибка: %i \n ' , ошибаться ) ;

перерыв ; }

случай ЭИО : {

printf ( 'Ошибка ввода/вывода. Ошибка: %i \n ' , ошибаться ) ;

перерыв ; }

}

}

}

Как мы видим на следующем рисунке, функция write() возвращает ошибку, когда в качестве входного аргумента передается недопустимый дескриптор. Значение, полученное из переменной errno, используется в качестве условия перехода, которое позволяет нам идентифицировать ошибку при входе в случай EBADF.

Заключение

В этой статье Linux Hint мы показали вам, как использовать функцию write() для записи в файлы. Мы показали вам синтаксис и теоретическое описание этой функции. Мы также объяснили методы обнаружения и идентификации ошибок, чтобы у вас были необходимые инструменты и методы для быстрого решения этих проблем.

Чтобы помочь вам понять, как работает write(), мы реализовали использование этой функции в практических примерах с кодами и изображениями, которые показывают использование этой и других функций обработки файлов.

Мы также показали вам, как выбрать режим открытия файла, чтобы вставить текст в начало или в конец файла, и какие функции доступны для изменения этих атрибутов.