Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 35

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

НС ΠΏΡƒΡ‚Π°ΠΉΡ‚Π΅ эти ΠΏΠΎΡ‚ΠΎΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° Π² языкС Π‘++ ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ STREAMS, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌ взаимодСйствиС процСссов ΠΈ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π² систСмС AT&T UNIX System V Release 3, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ рассматриваСтся Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ срСдствах STREAMS ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ спСцификации X/Open (ΠΏΠΎ адрСсу http://www.opengroup.org) ΠΈ руководству ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ AT&T STREAMS Programming Guide, поставляСмому с систСмой System V.

Π’Ρ€ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ автоматичСски ΠΏΡ€ΠΈ стартС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. К Π½ΠΈΠΌ относятся stdin, stdout ΠΈ stderr. Π­Ρ‚ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅ stdio.h ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²Ρ‹Π²ΠΎΠ΄, Π²Π²ΠΎΠ΄ ΠΈ стандартный ΠΏΠΎΡ‚ΠΎΠΊ ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы 0, 1 ΠΈ 2.

Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

β–‘ fopen, fclose;

β–‘ fread, fwrite;

β–‘ fflush;

β–‘ fseek;

β–‘ fgetc, getc, getchar;

β–‘ fputc, putc, putchar;

β–‘ fgets, gets;

β–‘ printf, fprintf ΠΈ sprintf;

β–‘ scanf, fscanf ΠΈ sscanf;

β–‘ fopen.

fopen

БиблиотСчная функция fopen β€” это Π°Π½Π°Π»ΠΎΠ³ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ систСмного Π²Ρ‹Π·ΠΎΠ²Π° open. Она ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² основном для Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ, Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°. Π’Π°ΠΌ, Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ явноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ устройствами, большС ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты примСнСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² случаС Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°.

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° синтаксичСская запись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

#include <stdio.h>

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

Ѐункция fopen ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ», Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ filename, ΠΈ ассоциируСт с Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ mode описываСт, ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚. Он задаСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… строк:

β–‘ "r" ΠΈΠ»ΠΈ "rb" β€” ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния;

β–‘ "w" ΠΈΠ»ΠΈ "wb" β€” ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ для записи, ΡƒΠΊΠΎΡ€ΠΎΡ‚ΠΈΡ‚ΡŒ Π΄ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹;

β–‘ "Π°" ΠΈΠ»ΠΈ "ab" β€” ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ для записи, Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°;

β–‘ "r+" ΠΈΠ»ΠΈ "rb+" ΠΈΠ»ΠΈ "r+b" β€” ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ для измСнСния (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись);

β–‘ "w+" ΠΈΠ»ΠΈ "wb+" ΠΈΠ»ΠΈ "w+b" β€” ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ для измСнСния, ΡƒΠΊΠΎΡ€ΠΎΡ‚ΠΈΡ‚ΡŒ Π΄ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹;

β–‘ "a+" ΠΈΠ»ΠΈ "ab+" ΠΈΠ»ΠΈ "Π°+b" β€” ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ для измСнСния, Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°. Π‘ΠΈΠΌΠ²ΠΎΠ» b ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ, Π° Π½Π΅ тСкстовый.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ MS-DOS, систСмы UNIX ΠΈ Linux Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ тСкстовыми ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. UNIX ΠΈ Linux ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ с ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Π°ΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ mode Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ строкой, Π° Π½Π΅ символом. ВсСгда примСняйтС Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π° Π½Π΅ апострофы.

Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ функция fopen Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру FILE*. Π’ случаС сбоя ΠΎΠ½Π° Π²Π΅Ρ€Π½Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π² Ρ„Π°ΠΉΠ»Π΅ stdio.h.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ доступных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈ число дСскрипторов Ρ„Π°ΠΉΠ»ΠΎΠ². РСальноС ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ содСрТится Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² Ρ„Π°ΠΉΠ»Π΅ stdio.h константС FOPEN_MAX ΠΈ всСгда Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 8, Π° Π² ОБ Linux ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 16.

fread

БиблиотСчная функция fread примСняСтся для чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π”Π°Π½Π½Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° stream Π² Π±ΡƒΡ„Π΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ptr. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ fread ΠΈ fwrite ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π΅Π»ΠΎ с записями Π΄Π°Π½Π½Ρ‹Ρ…. Записи ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ size ΠΈ количСством ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… записСй nitems. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство записСй (Π° Π½Π΅ Π±Π°ΠΉΡ‚ΠΎΠ²), ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ считанных Π² Π±ΡƒΡ„Π΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ достиТСнии ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ мСньшС записСй, Ρ‡Π΅ΠΌ nitems, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ нуля.

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° синтаксичСская запись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);

Как ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… функциях стандартного Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±ΡƒΡ„Π΅Ρ€, Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ мСсто для Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ошибки Π΄ΠΎΠ»ΠΆΠ΅Π½ программист. Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ferror ΠΈ feof Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅.

fwrite

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fwrite Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ интСрфСйсу Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fread. Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ записи Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ записываСт ΠΈΡ… Π² ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π°. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ записанных записСй.

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° синтаксичСская запись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

#include <stdio.h>

size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fread ΠΈ fwrite Π½Π΅ рСкомСндуСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ со структурированными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Частично ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹, записанныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ fwrite, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ нСпСрСносимыми ΠΌΠ΅ΠΆΠ΄Ρƒ машинами с Ρ€Π°Π·Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ.

fclose

БиблиотСчная функция fclose Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ stream, заставляя Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ всС нСзаписанныС Π΄Π°Π½Π½Ρ‹Π΅. Π’Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fclose, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° stdio Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ для Π΄Π°Π½Π½Ρ‹Ρ…. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½ΡƒΠΆΠ½Π° ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всС Π΄Π°Π½Π½Ρ‹Π΅ записаны, слСдуСт Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ fclose. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ функция fclose вызываСтся автоматичСски для всСх Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всС Π΅Ρ‰Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΏΡ€ΠΈ этом Ρƒ вас, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ возмоТности ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ошибки, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сообщаСт fclose.

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° синтаксичСская запись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

#include <stdio.h>

int fclose(FILE* stream);

fflush

БиблиотСчная функция fflush Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡƒΡŽ запись всСх Π΄Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΆΠ΄ΡƒΡ‰ΠΈΡ… выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ дСлаСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚. Π­Ρ‚Π° функция Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Π°, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π½Π° диск. Π•Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ записываСт Π΄Π°Π½Π½Ρ‹Π΅, Π° Π½Π΅ зависла. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fclose выполняСтся нСявная опСрация fflush, поэтому ΠΏΠ΅Ρ€Π΅Π΄ fclose Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fflush. 

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° синтаксичСская запись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

#include <stdio.h>

int fflush(FILE *stream);

fseek

Ѐункция fseek β€” это эквивалСнт для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° систСмного Π²Ρ‹Π·ΠΎΠ²Π° lseek. Она Π·Π°Π΄Π°Π΅Ρ‚ Π² stream ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния этого ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈΠ»ΠΈ записи Π² Π½Π΅Π³ΠΎ. ЗначСния ΠΈ смысл ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² offset ΠΈ whence Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρƒ Ρ€Π°Π½Π΅Π΅ описанных ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²Π° lseek. Но Ρ‚Π°ΠΌ, Π³Π΄Π΅ lseek Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ off_t, функция fseek Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ число: 0, Ссли Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»Π°ΡΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΈ -1 ΠΏΡ€ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ с ошибкой, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ errno. КакоС ΠΏΠΎΠ»Π΅ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ для стандартизации!

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° синтаксичСская запись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

#include <stdio.h>

int fseek(FILE *stream, long int offset, int whence);

fgetc, getc ΠΈ getchar

Ѐункция fgetc Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π±Π°ΠΉΡ‚ ΠΊΠ°ΠΊ символ. Когда ΠΎΠ½Π° достигаСт ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка, функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ EOF. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΡŒ эти Π΄Π²Π° случая, слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ferror ΠΈΠ»ΠΈ feof.

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° синтаксичСская запись Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

#include <stdio.h>

int fgetc(FILE *stream);

int getc(FILE *stream);

int getchar();

Ѐункция getc эквивалСнтна fgetc Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ макрос. Π’ этом случаС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ stream ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ нСсколько Ρ€Π°Π·, поэтому ΠΎΠ½ лишСн ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅). К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ возмоТности примСнСния адрСса getc ΠΊΠ°ΠΊ указатСля Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Ѐункция getchar эквивалСнтна Π²Ρ‹Π·ΠΎΠ²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getc(stdin) ΠΈ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ символ ΠΈΠ· стандартного Π²Π²ΠΎΠ΄Π°.

fputc, putc ΠΈ putchar

Ѐункция fputc записываСт символ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π°. Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ записанноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ EOF Π² случаС Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ.

#include <stdio.h>

int fputc(int с, FILE *stream); int putc(int c, FILE *stream); int putchar(int c);

Как ΠΈ Π² случаС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ fgetc/getc, функция putc β€” эквивалСнт fputc, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ макрос.

Ѐункция putchar β€” Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² putc(с, stdout), Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ΄ΠΈΠ½ символ Π² стандартный Π²Ρ‹Π²ΠΎΠ΄. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ функция putchar ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚, Π° функция getchar Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ символы ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° int, Π° Π½Π΅ char. Π­Ρ‚ΠΎ позволяСт ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π° (EOF) ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1, Π»Π΅ΠΆΠ°Ρ‰Π΅Π΅ Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΊΠΎΠ΄ΠΎΠ² символов.