The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by , 2017-02-23 10:15:38

Secure_Coding

Secure_Coding

8.2. И нтерфейсы файлового ввода-вывода 377

Для символьных данных из ограниченного набора символов используются байтовые
символы, или тип char. Функции ввода входных данных в байтовые символы и байтовые
строки включают fgetc ( ) , fgets ( ) , ge tc ( ) , ge tchar ( ) , fscan f ( ) , scan f ( ) , vfs can f ( )
и vscanf ( ) .

Функции вывода из байтовых символов и байтовых строк включают fputc ( ) , fputs ( ) ,
putc ( ) , putcha r ( ) , fpr in t f ( ) , fpr in t f ( ) , vfprint f ( ) и vprintf ( ) .

Функции байтового ввода-вывода представляют собой объединение функции ungetc ( ) ,
функций байтового ввода и байтового вывода.

Для символьных данных естественных языков используются широкие символы, или
тип wchar t.

Широкосимвольные функции ввода выполняют ввод входных данных в широкие
символы и широкие строки: fgetwc ( ) , fgetws ( ) , getwc ( ) , getwchar ( ) , fws canf ( ) ,
ws can f ( ) , vfws canf ( ) и vws can f ( ) .

Широкосимвольные функции вывода выполняют вывод выходных данных из широ­
ких символов и широких строк: fputwc ( ) , fputws ( ) , putwc ( ) , putwchar ( ) , fwprint f ( ) ,
wp rint f ( ) , vfwpri n t f ( ) и vwprint f ( ) .

Широкосимвольные функции ввода-вывода представляют собой объединение функции
unge twc ( ) , широкосимвольных функций ввода и широкосимвольных функций вывода.
Поскольку широкосимвольные функции ввода-вывода являются более новыми, при их
разработке внесены определенные усовершенствования по сравнению с байтовыми фун­
кциями ввода-вывода.

Потоки даннъrх

Входные и выходные данные отображаются на потоки логических данных, свойства
которых более однородны , чем свойства реальных физических устройств, к которым они
присоединены, таких как терминалы и файлы, поддерживаемые структурированными ус­
тройствами хранения.

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

Файлы, обращение к которым осуществляется посредством механизма FILE, предостав­
ленного заголовочным файлом <s tdio . h>, известны как файлы потоков (stream files) .

При инициализации программы открываются три предопределенных потока, которые
в результате не требуется открывать явно.

• s tdin: стандартный ввод (для чтения обычного ввода)

• s tdout: стандартный вывод (для записи обычного вывода)

• s tde rr: стандартные сообщения об ошибках (для записи диагностического вывода)

Текстовые потоки s tdin, s tdout и s tde r r являются выражениями типа указателя на
F I LE. При начальном открытии стандартный поток сообщений об ошибках не является
буферизованным, в отличие от потоков стандартного ввода и вывода, которые являются
полностью буферизованными, если только поток не является интерактивным устройством.

1378 Файловый ввод-вывод

Открытие и закрытие файлов

Функция fopen ( ) открывает файл, имя которого представляет собой строку, на кото­
рую указывает аргумент функции, и связывает с ним поток. Функция fopen ( ) имеет сле­
дующую сигнатуру.

1 FILE * fopen (

2 const char * re s t rict fi lename ,
3 const cha� * res t rict mode
4 );

Аргумент mode указывает на строку. Если это корректная строка, файл открывается в
указанном режиме; в противном случае поведение функции не определено.

С99 поддерживает следующие режимы.

• r: открытие текстового файла для чтения

• w: усечение текстового файла до нулевого размера или создание текстового файла
для записи

• а: добавление; открытие или создание текстового файла для записи в его конец

• rb: открытие бинарного файла для чтения

11 wb: усечение бинарного файла до нулевого размера или создание бинарного файла
для записи

11 аЬ: добавление; открытие или создание бинарного файла для записи в его конец

• r+: открытие текстового файла для обновления (чтения и записи)

• w+: усечение текстового файла до нулевого размера или создание текстового файла
для обновления

• а+: добавление; открытие или создание текстового файла для обновления путем за­
писи в его конец

• r+b или rb+: открытие бинарного файла для обновления ( чтения и записи)

• w+b или wb+: усечение бинарного файла до нулевого размера или создание бинарно­
го файла для обновления

11 а+Ь или аЬ+: добавление; открытие или создание бинарнш'о файла для обновления
путем записи в его конец

CERT предложил, а WG 1 4 принял дополнение эксклюзивного режима в C l 1 . Открытие
файла в эксклюзивном (исключительном) режиме (последний символ аргумента режима х)
завершается неудачей, если файл уже существует или не может быть создан. В противном
случае файл создается для эксклюзивного ( известного также как монопольн ый) доступа
к пространству, для которого операционная система поддерживает эксклюзивный доступ.

11 wx: создание текстового файла в эксклюзивном режиме для записи

11 wbx: создание бинарного файла в эксклюзивном режиме для записи

11 w+ x: создание текстового файла в эксклюзивном режиме для обновления

• w+bx или wb+x: создание бинарного файла в эксклюзивном режиме для обновления




















































Click to View FlipBook Version