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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIXΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 40

Автор РобачСвский АндрСй ΠœΠΈΡ…Π°ΠΉΠ»ΠΎΠ²ΠΈΡ‡

extern FILE *stdin;

extern FILE *stdout;

extern FILE *stderr;

Бвязь ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ дСскрипторами ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Ρ‚Π°Π±Π». 2.9.

Π’Π°Π±Π»ΠΈΡ†Π° 2.9. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈ ΠΈΡ… дСскрипторы

Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор ΠŸΠΎΡ‚ΠΎΠΊ (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ) ОписаниС
0 stdin Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π²Π²ΠΎΠ΄
1 stdout Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄
2 stderr БообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…

Π’Π°Π±Π»ΠΈΡ†Π° 2.10. НаиболСС ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°

Ѐункция НазначСниС
fopen(3S) ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ассоциированный с Π΄Π°Π½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ
fclose(3S) Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ, освобоТдая Π±ΡƒΡ„Π΅Ρ€Ρ‹
fflush(3S) ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Π½Π° запись
getc(3S) Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ символ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°
putc(3S) ЗаписываСт символ Π² ΠΏΠΎΡ‚ΠΎΠΊ
gets(3S) Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ строку ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ°
puts(3S) ЗаписываСт строку Π² ΠΏΠΎΡ‚ΠΎΠΊ
fread(3S) Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ число Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° (Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Π²Π²ΠΎΠ΄)
fwrite(3S) ЗаписываСт ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ число Π±Π°ΠΉΡ‚ΠΎΠ² Π² ΠΏΠΎΡ‚ΠΎΠΊ (Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄)
fseek(3S) ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅
printf(3S) ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄
scanf(3S) ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π²ΠΎΠ΄
fileno(3S) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ функциями интСрфСйса систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ зависит ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Π² частности, стСпСни контроля Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, пСрСносимости ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, простоты. ВзглянитС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ эквивалСнтныС строки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

write (1, "Здравствуй, ΠœΠΈΡ€!\n", 16);

printf("Здравствуй, ΠœΠΈΡ€!\n");

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС сообщСниС выводится с использованиСм систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write(2), Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ printf(3S). Помимо Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ каТСтся Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ, ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ Π΅Ρ‰Π΅ ряд особСнностСй. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор стандартного Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π°Π²Π΅Π½ 1, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ нСсправСдливым для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСм. Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ число символов Π² строкС, Ρ‚.ΠΊ. write(2) Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄Π°, трактуя Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ². Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ wite(2), printf(3S) распознаСт строки, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π½ΡƒΠ»Π΅ΠΌ. Ѐункция printf(3S) Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для прСдставлСния ΠΈΡ… Π² Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΌ Π²ΠΈΠ΄Π΅.

Но основным достоинством Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ являСтся буфСризация Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ число систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² read(2) ΠΈ write(2). ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈ создании ΠΏΠΎΡ‚ΠΎΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ автоматичСски Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±ΡƒΡ„Π΅Ρ€Ρ‹, позволяя ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½Π΅ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Π½ΠΈΡ….

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° прСдоставляСт Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ:

β–‘Β ΠŸΠΎΠ»Π½Π°Ρ буфСризация. Π’ этом случаС опСрация чтСния ΠΈΠ»ΠΈ записи Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ Π±ΡƒΡ„Π΅Ρ€ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°. Π’Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ для дисковых Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ буфСризуСтся. Π‘ΡƒΡ„Π΅Ρ€ размСщаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc(3C) ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΡƒ для чтСния ΠΈΠ»ΠΈ записи ΠΈ заполняСтся систСмными Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ read(2) ΠΈΠ»ΠΈ write(2). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ getc(3S), gets(3S), putc(3S), puts(3S) ΠΈ Ρ‚.Π΄. Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ систСмным функциям, Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ запись ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Π±ΡƒΡ„Π΅Ρ€Π° очищаСтся (Ρ‚.Π΅. Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° дискС) автоматичСски, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fflush(3S).

β–‘Β ΠŸΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Π°Ρ буфСризация. Π’ этом случаС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° выполняСт фактичСский Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ (Ρ‚.Π΅. ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ read(2) ΠΈΠ»ΠΈ write(2)) построчно ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ†Π° строки (символа ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ). Π’Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ассоциированных с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ устройствами ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ стандартныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°.

β–‘Β ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ этом случаС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, фактичСски являясь Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². ΠŸΡ€ΠΈ этом Π΄ΠΎΡΡ‚ΠΈΠ³Π°ΡŽΡ‚ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния ΠΈ записи, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎ для стандартного ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Ρ‹Π²ΠΎΠ΄Π° сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….

Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

#include <stdio.h>

void setbuf(FILE *stream, char *buf);

int setvbuf(FILE *stream, char *buf, int type, size_t size);

Ѐункция setbuf(3S) позволяСт Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ для ΠΏΠΎΡ‚ΠΎΠΊΠ°

stream
. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС
buf
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π±ΡƒΡ„Π΅Ρ€ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ
BUFSIZ
, Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎ
NULL
.

Ѐункция setvbuf(3S) позволяСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, явно указывая, ΠΊΠ°ΠΊΠΎΠΉ Π΅Π΅ Ρ‚ΠΈΠΏ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚

type
, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

_IOFBF
Полная буфСризация
_IOLBF
ΠŸΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Π°Ρ буфСризация
_IONBF
ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π’ случаС ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ»ΠΈ построчной Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚

size
опрСдСляСт Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π°, адрСсованного ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ
buf
.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ прСдставлСн ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° структуру

FILE
, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π½Π° рис.Β 2.9, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ хранится ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π±ΡƒΡ„Π΅Ρ€
_base
, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ символ, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ ΠΈΠ»ΠΈ записи
_ptr
, число Π±Π°ΠΉΡ‚ Π² Π±ΡƒΡ„Π΅Ρ€Π΅
_cnt
, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор
_file
, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ассоциирован Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ„Π»Π°Π³ΠΈ состояния ΠΏΠΎΡ‚ΠΎΠΊΠ°
_flag
. ΠŸΡ€ΠΈ создании Π±ΡƒΡ„Π΅Ρ€Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ этот Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π²Π΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ поля
st_blksize
структуры
stat
, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΉ систСмным Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ stat(2), рассмотрСнный Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ "ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Π°" этой Π³Π»Π°Π²Ρ‹. Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² устройств, выбираСтся стандартноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
BUFSIZ
, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π² Ρ„Π°ΠΉΠ»Π΅ <stdio.h>.