7.6 Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ (stderr ΠΈ exit)
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π² cat Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΈΠ·Π½Π°ΡΡ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ. ΠΠ΅Π΄Π° Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ» ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½, ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΡΡΠΎΠΌ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½ΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π°. ΠΡΠΎ Π½Π°Ρ ΡΡΡΡΠΎΠΈΠ»ΠΎ Π±Ρ, Π΅ΡΠ»ΠΈ Π±Ρ Π²ΡΠ²ΠΎΠ΄ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ»ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠΊΡΠ°Π½, a Π½Π΅ Π² ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. Π§ΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° stdout ΠΏΡΠΈΠ΄Π°Π΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ stderr. ΠΡΠ²ΠΎΠ΄ Π² stderr ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½Π° ΡΠΊΡΠ°Π½, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²ΡΠ²ΠΎΠ΄ stdout ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ Π² Π΄ΡΡΠ³ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ. ΠΠ΅ΡΠ΅ΠΏΠΈΡΠ΅ΠΌ cat ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ»ΠΈΡΡ Π² stderr.
#include βΉstdio.hβΊ
/* cat: ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π²Π΅ΡΡΠΈΡ 2 */
main(int argc, char *argv[])
{
FILE *fp;
void filecopy(FILE *, FILE *);
char *prog = argv[0]; /* ΠΈΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ */
if (argc == 1) /* Π½Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄. Π²Π²ΠΎΠ΄ */
filecopy(stdin, stdout);
else
while (--argc βΊ 0)
if ((fp = fopen(*++argv, "r")) == NULL) {
fprintf(stderr, "%s: Π½Π΅ ΠΌΠΎΠ³Ρ ΠΎΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ» %s\n", prog, *argv);
exit(1);
} else {
filecopy(fp, stdout);
fclose(fp);
}
if (ferror(stdout)) {
fprintf(stderr, "%s: ΠΎΡΠΈΠ±ΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ Π² stdout\n", prog);
exit(2);
}
exit(0);
}
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. ΠΠ΅ΡΠ²ΡΠΉ - ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ fprintf ΠΏΠΎΡΡΠ»Π°Π΅ΡΡΡ Π² stderr Ρ ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΎ ΠΏΠΎΠΏΠ°Π»ΠΎ Π½Π° ΡΠΊΡΠ°Π½, Π° Π½Π΅ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π½Π° ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ΅ ΠΈΠ»ΠΈ Π² Π΄ΡΡΠ³ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π²ΡΠ²ΠΎΠ΄Π°. ΠΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Ρ ΡΠ°Π½ΡΡΠ΅Π΅ΡΡ Π² argv[0], ΠΌΡ Π²ΠΊΠ»ΡΡΠΈΠ»ΠΈ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ Π² ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ, Π±ΡΠ» ΡΡΠ΅Π½ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΡΠΎΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΊΠ°Π·Π°ΡΡ Π½Π° ΠΎΡΠΈΠ±ΠΊΡ - ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ exit, Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ exit Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, Π²ΡΠ·Π²Π°Π²ΡΠ΅ΠΌΡ Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. Π ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠΎ ΠΎΠ±ΡΠ΅ΠΉ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ΅Π½Π½ΠΎΡΡΠΈ Π²ΠΎΠ·Π²ΡΠ°Ρ Π½ΡΠ»Ρ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ° ΠΏΡΠΎΡΠ»Π° Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π½Π΅Π½ΡΠ»Π΅Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ . Π§ΡΠΎΠ±Ρ ΠΎΠΏΠΎΡΠΎΠΆΠ½ΠΈΡΡ Π±ΡΡΠ΅ΡΠ°, Π½Π°ΠΊΠΎΠΏΠΈΠ²ΡΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΡΠΊΡΡΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π²ΡΠ²ΠΎΠ΄Π°, ΡΡΠ½ΠΊΡΠΈΡ exit Π²ΡΠ·ΡΠ²Π°Π΅Ρ fclose.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ return exp Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ main ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Π° ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ exit(exp). ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ exit) ΠΈΠΌΠ΅Π΅Ρ ΡΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ, ΡΡΠΎ ΠΎΠ½ ΠΏΡΠΈΠ³ΠΎΠ΄Π΅Π½ Π΄Π»Ρ Π²ΡΡ ΠΎΠ΄Π° ΠΈ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈ, ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ»ΠΎΠ²ΠΎ exit Π»Π΅Π³ΠΊΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, ΠΏΠΎΡ ΠΎΠΆΠ΅ΠΉ Π½Π° ΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ Π² Π³Π»Π°Π²Π΅ 5. Π€ΡΠ½ΠΊΡΠΈΡ ferror Π²ΡΠ΄Π°Π΅Ρ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π² ΡΠ°ΠΉΠ»Π΅ fp Π±ΡΠ»Π° ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°.
int ferror(FILE *fp)
Π₯ΠΎΡΡ ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ ΡΠ΅Π΄ΠΊΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π²ΡΠ΅ ΠΆΠ΅ ΠΎΠ½ΠΈ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΊΠ°Π·Π°Π»ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΌ Π΄ΠΈΡΠΊ); ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ.
Π€ΡΠ½ΠΊΡΠΈΡ feof(FILE *fp) aΠ½aΠ»oΠ³ΠΈΡΠ½a ΡΡΠ½ΠΊΡΠΈΠΈ ferror; oΠ½a Π²oΠ·Π²paΡaeΡ Π½eΠ½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π²ΡΡΡΠ΅ΡΠΈΠ»ΡΡ ΠΊΠΎΠ½Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ ΡΠ°ΠΉΠ»Π°.
int feof(FILE *fp);
Π Π½Π°ΡΠΈΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΠΌΡ Π½Π΅ Π·Π°Π±ΠΎΡΠΈΠ»ΠΈΡΡ ΠΎ Π²ΡΠ΄Π°ΡΠ΅ ΡΡΠ°ΡΡΡΠ° Π²ΡΡ ΠΎΠ΄Π°, Ρ. Π΅. Π²ΡΠ΄Π°ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°, Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ: ΡΠ°Π±ΠΎΡΠ° Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»Π°ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΡΠ²Π°Π½Π° ΠΈΠ·-Π·Π° ΠΎΡΠΈΠ±ΠΊΠΈ? ΠΡΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ° ΠΏΡΠ΅ΡΠ²Π°Π½Π° Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠΎ ΠΊΠ°ΠΊΠΎΠΉ? ΠΡΠ±Π°Ρ ΡΠ΅ΡΡΠ΅Π·Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ΄Π°Π²Π°ΡΡ ΡΡΠ°ΡΡΡ Π²ΡΡ ΠΎΠ΄Π°.
7.7 ΠΠ²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄ ΡΡΡΠΎΠΊ
Π ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²Π²ΠΎΠ΄Π° fgets, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ getline, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π³Π»Π°Π²Π°Ρ .
char *fgets(char *line, int maxline, FILE *fp)
Π€ΡΠ½ΠΊΡΠΈΡ fgets ΡΠΈΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ Π²Π²ΠΎΠ΄Π° (Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ» Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ) ΠΈΠ· ΡΠ°ΠΉΠ»Π° fp Π² ΠΌΠ°ΡΡΠΈΠ² ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² line, ΠΏΡΠΈΡΠ΅ΠΌ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ MAXLINE-1 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ '\0'. ΠΠ±ΡΡΠ½ΠΎ fgets Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ line, Π° ΠΏΠΎ ΠΈΡΡΠ΅ΡΠΏΠ°Π½ΠΈΠΈ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ - NULL. (ΠΠ°ΡΠ° getline Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»Π° Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ, ΠΈ Π½ΡΠ»Ρ Π² ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠ½ΡΠ° ΡΠ°ΠΉΠ»Π°.)
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° fputs ΠΏΠΈΡΠ΅Ρ ΡΡΡΠΎΠΊΡ (ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ) Π² ΡΠ°ΠΉΠ».
int fputs(char *line, FILE *fp)
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ EOF, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΠΈ Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ gets ΠΈ puts ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌ fgets ΠΈ fputs. ΠΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΠ½ΠΈ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ stdin ΠΈ stdout, ΠΈ ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, gets Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» '\n', a puts Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π½ΠΈΡΠ΅Π³ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΡΡΠ½ΠΊΡΠΈΡΡ Π²ΡΠΎΠ΄Π΅ fgets ΠΈ fputs Π½Π΅Ρ, ΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ ΠΈΡ Π·Π΄Π΅ΡΡ Π² ΡΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π½Π° Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅.
/* fgets: ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ n ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ· iop */
char *fgets(char *s, int n, FILE *iop) {
register int c;
register char *cs;
cs = s;
while (--n βΊ 0 && (Ρ = getc(iop)) != EOF)
if ((*cs++ = c) == '\n')
break;
*cs= '\0';
return (c == EOF && cs == s) ? NULL : s;
}
/* fputs: ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΡΡΡΠΎΠΊΡ s Π² ΡΠ°ΠΉΠ» iop */
int fputs(char *s, FILE *iop)
{
int c;
while (c = *s++)
putc(c, iop);
return ferror(iop) ? EOF : 0;
}
Π‘ΡΠ°Π½Π΄Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ferror Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅; fputs Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ EOF, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ - Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ fgets Π»Π΅Π³ΠΊΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ getline:
/* getline: ΡΠΈΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΅Π΅ Π΄Π»ΠΈΠ½Ρ */
int getline(char *line, int max)
{
if (fgets(line, max, stdin) == NULL)
return 0;
else
return strlen(line);
}
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.6. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Π΄Π²Π° ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ²ΡΡ ΡΡΡΠΎΠΊΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ΠΈ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.7. ΠΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΠΎΠ±ΡΠ°Π·ΡΡ ΠΈΠ· Π³Π»Π°Π²Ρ 5 ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π±ΡΠ°Π»Π° ΡΠ΅ΠΊΡΡ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π° Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ² Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ Π½Π΅Ρ, ΡΠΎ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°. ΠΡΠ΄Π΅Ρ Π»ΠΈ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°ΠΉΠ΄Π΅Π½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°?
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.8. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ, ΠΏΡΠ΅Π΄Π²Π°ΡΡΡΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΡ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ ΡΡΡΠ°Π½ΠΈΡ.
7.8 ΠΡΡΠ³ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
Π ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΠΈΡΠΎΠΊΠΈΠΉ ΡΠΏΠ΅ΠΊΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ°ΡΡΠΎΡΡΠΈΠΉ ΠΏΠ°ΡΠ°Π³ΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΡΠ°ΡΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΈΠ· Π½ΠΈΡ . ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΡΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ B.
7.8.1 ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ
ΠΡ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ strlen, strcpy, strcat ΠΈ strcmp, ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ Π΄Π°Π½Ρ Π² βΉstring.hβΊ. ΠΠ°Π»Π΅Π΅, Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΏΡΠ½ΠΊΡΠ°, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ s ΠΈ t ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ char *, c ΠΈ n - ΡΠΈΠΏ int.
strcat(s,t) - ΠΏΡΠΈΠΏΠΈΡΡΠ²Π°Π΅Ρ t Π² ΠΊΠΎΠ½Π΅Ρ s.
strncat(s,t,n) - ΠΏΡΠΈΠΏΠΈΡΡΠ²Π°Π΅Ρ n ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ· t Π² ΠΊΠΎΠ½Π΅Ρ s.
strcmp(s,t) - Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, Π½ΡΠ»Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π»Ρ s βΉ t, s - t ΠΈΠ»ΠΈ s βΊ t, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
strncmp(s,t,n) - Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ ΠΆΠ΅, ΡΡΠΎ ΠΈ strcmp, Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ n
strcpy(s,t) - ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ t Π² s.
strncpy(s,t,n) - ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ n ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ· t Π² s.
strlen(s) - Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π»ΠΈΠ½Ρ s.
strchr(s,c) - Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° c Π² s ΠΈΠ»ΠΈ, Π΅ΡΠ»ΠΈ c Π½Π΅Ρ Π² s, NULL.
strrchr(s,c) - Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° c Π² s ΠΈΠ»ΠΈ, Π΅ΡΠ»ΠΈ c Π½Π΅Ρ Π² s, NULL.
7.8.2 ΠΠ½Π°Π»ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ βΉctype.hβΊ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠ°Π»Π΅Π΅, Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΏΡΠ½ΠΊΡΠ°, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ c - ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΏΠ° int, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ unsigned, char ΠΈΠ»ΠΈ EOF. ΠΡΠ΅ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° int.