stdio.h

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Заголовні файли С

stdio.h (від англ. standard input/output header — заголовний файл стандартного введення/виведення) — заголовний файл стандартної бібліотеки мови Сі, що містить визначення макросів, констант та оголошення функцій і типів, призначених для виконання операцій введення і виведення.

C++ заради сумісності також використовує stdio.h поряд зі схожим за функціональністю заголовним файлом cstdio, хоча більшою популярністю користується бібліотека <iostream>.

Стандартна бібліотека вводу/виводу оперує потоками і приховує деталі апаратної реалізації. Потоки асоціюються з файлами, які можуть бути блоками інформації на носіях чи відповідати за фізичні пристрої, наприклад, клавіатуру, дисплей, послідовний або паралельний порт. Як і інші частини стандартної бібліотеки мови Сі, оголошені в stdio.h функції вельми популярні завдяки тому, що гарантують роботу на майже будь-якій платформі, яка підтримує Сі. Втім, програми на окремих платформах можуть мати причини для використання функцій введення/виведення самої платформи замість функцій stdio.h.

Типи даних[ред.ред. код]

В заголовному файлі stdio.h визначено наступні типи даних:

  • FILE — структура, яка містить інформацію про файл (потік), необхідну для виконання операцій введення і виведення, включаючи:
    • файловий дескриптор;
    • поточну позицію в потоці;
    • індикатор кінця файлу;
    • індикатори помилок;
    • вказівник на буфер потоку, якщо такий буфер використовується.
  • fpos_t — тип, призначений для збереження та відновлення інформації про поточну позицію та стан потоку.

Функції стандартного вводу/виводу також використовують тип size_t — беззнакових цілий тип, що є типом результату виконання оператора отримання розміру об'єкта sizeof та визначений у заголовному файлі stddef.h.

Оскільки реалізація потоків залежить від платформи, програміст не повинен працювати безпосередньо з полями об'єктів типів FILE та fpos_t і не повинен робити припущень щодо їх внутрішньої організації. Вказівник на екземпляр структури типу FILE виконує роль унікального ідентифікатора потоку, з яким працюють функції бібліотеки. У файлі stdio.h оголошено три змінних — вказівники на структури типу FILE для стандартних потоків, які відповідають дескрипторам 1, 2 та 3 відповідно:

 extern struct FILE *stdin;   /* Стандартний потік вводу  */
 extern struct FILE *stdout;  /* Стандартний потік виводу */
 extern struct FILE *stderr;  /* Стандартний потік виводу повідомлень про помилки */

Функції[ред.ред. код]

Функції, оголошені в stdio.h, у загальному випадку можуть бути розділені на дві категорії: функції для операцій з файлами і функції для операцій введення-виведення.

Всі функції в мові Сі (і його численних різновидів) оголошуються в заголовних файлах. Таким чином, програмістам слід підключати файл stdio.h до вихідного коду, щоб використовувати функції, оголошені в ньому.

Ім'я Примітка
fclose int fclose (File * stream);

Закриває файл, пов'язаний з потоком і його непричетності. Всі внутрішні буфери, пов'язані з потоком скидаються: зміст будь-якого ненаписані в буфер, що записується і зміст будь-якого непрочитаного буфера відкидається.

fopen FILE * fopen (const char * filename, const char * mode);

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

remove int remove (const char * filename);

Якщо файл був успішно знищений, нульове значення повертається.


Rename int rename (const char * oldname, const char * newname);


rewind void rewind (FILE * stream);

Встановлює індикатор позиції, пов'язані з потоком в початок файлу.


tmpfile FILE * tmpfile (void);

Відкрити тимчасовий файл Створює тимчасовий двійковий файл, відкритий для оновлення ( WB + режиму — див FOPEN детальніше). Файл гарантовано буде відрізнятися від будь-якого іншого існуючого файлу. Тимчасовий файл створюється автоматично видаляється, коли потік закритий ( fclose ) або коли програма завершується нормально. У разі успіху, функція повертає покажчик на потік тимчасовий файл створюється. Якщо файл не може бути створена, NULL повертається.

Функції для операцій введення/виведення


Ім'я Примітка
Clearer void clearerr (FILE * stream);

Скидання як помилки і EOF показників потоку.
Коли потік функція зазнає невдачі або через помилки або тому, що кінець файлу досягнуто,
один з цих внутрішніх показників може бути безліч. Ці показники як і раніше безліч,
поки не буде цього, перемотування назад, FSEEK або fsetpos називається.

Ferror int ferror (FILE * stream);

Перевіряє, індикатор помилки, пов'язані з потоком встановлено,
повертаючи значення, відмінне від нуля, якщо вона є. Цей показник зазвичай встановлюється
на попередній операції на потік, що не вдалося.

Ffplush int fflush (FILE * stream);

Якщо цей потік був відкритий для запису і останньої операції введення/виведення був вихідний операції, будь-які неписані даних у вихідний буфер записується у файл. Якщо вона була відкрита для читання і остання операція була операції введення, поведінка залежить від конкретної реалізації бібліотеки. У деяких реалізаціях це викликає вхідного буфера бути очищені, але це не стандартне поведінку. Якщо аргумент є нульовим покажчиком, всі відкриті файли почервонів. Потік залишається відкритим після цього виклику. При закритті файлу, або через виклик fclose або тому, що програма завершується, всі буфери, пов'язані з його автоматично почервонів.

Fgetpos int fgetpos (FILE * stream, fpos_t * position);

зберігає позицію покажчика файлу потоку, асоційований з його першим аргументом (FILE *), в його другий аргумент (fpos_t *)

fgetc повертає один символ з файлу
fgets отримує рядок з файлу (що закінчується символом переведення рядка або кінця файлу)
fputc записує один символ в файл
fputs записує рядок в файл
ftell возвращает указатель позиции файла, который может быть передан fseek
fseek виробляє зміщення від поточної позиції у файлі на вказану кількість байт, або від його початку або кінця, в вказівкою напрямку.
fsetpos встановлює вказівник позиції файлу потоку, асоційований з його першим аргументом (FILE *), як зберігається в другому його аргументі (fpos_t *)
fread читає дані з файлу
fwrite записує дані у файл
getc зчитує і повертає символ з даного потоку і змінює покажчик позиції файлу, дозволяє використовувати як макрос з тими ж ефектами, що і fgetc, крім того, що може обчислювати потік більше одного разу
getchar має аналогічний ефект, що і ЕОКП (STDIN)
gets зчитує символи зі стандартного введення до символу переведення рядка і зберігає їх у своєму єдиному аргументі
printf, vprintf використовуються для виведення в стандартний потік виведення
fprintf, vfprintf використовуються для виведення в файл
perror записує повідомлення про помилку в стандартний потік помилок
putc записує і повертає символ в потік і змінює покажчик позиції файлу на нього, можна використовувати як макрос з тими ж властивості, що й fputc, крім того, що він може обробляти потік більше одного разу
putchar, fputchar аналогічні putc (стандартний висновок)
scanf, vscanf використовуються для введення зі стандартного потоку введення
fscanf, vfscanf використовуються для введення з файлу
sscanf, vsscanf використовуються для введення з масиву символів (тобто Рядок у мові Сі)
setvbuf встановлює режим буферизації для даного потоку
tmpnam створює ім'я тимчасового файлу
ungetc поміщає символ назад в потік
puts виводить символьну рядок у стандартний вивід

Приклад використання[ред.ред. код]

#include <stdio.h>
 
int main(void)
{
    int ch;
    while ((ch = getchar()) != EOF)
        putchar(ch);
    putchar('\n');
    return 0;
}

Наведена вище програма зчитує всю вхідну інформацію зі стандартного потоку введення і виводить її побайтово на стандартний потік виведення, додаючи символ переходу на новий рядок в кінці.

Див. також[ред.ред. код]

Посилання[ред.ред. код]