Stdin, stdout, stderr - стандартні потоки i
НАЗВА
stdin, stdout, stderr - стандартні потоки I / O
СИНТАКСИС
#include
extern FILE * stdin;
extern FILE * stdout;
extern FILE * stderr;
ОПИС
У звичайних умовах будь-яка програма в Unix має три потоки, відкритих для
неї при запуску: один для виведення, інший для введення і один для виведення
діагностики або повідомлень про помилки. Зазвичай вони прикріплені до
призначеного для користувача терміналу (див. tty (4)), але можуть посилатися і на
інші файли або пристрої в залежності від того, що встановлено
батьківським процесом (прочитайте розділ # 96; # 96; Перенаправлення вводу / виводу
(Redirection) '' в sh (1)).
Потік введення називається # 96; # 96; стандартним вводом (standard input) ''; потік
виведення називається # 96; # 96; стандартним висновком (standard output) ''; а потік
повідомлень про помилки називається # 96; # 96; стандартними помилками (standard
error) ''. Ці терміни були скорочені у імені файлу, на які
вказують посилання, а саме: stdin, stdout і stderr.
Кожен з цих термінів є макросом stdio (3), що вказує на FILE;
можливо їх використання з такими функціями, як fprintf (3) або
fread (3).
Змінні типу FILE є буферізіруемимі оболонками описателей
файлів Unix. Доступ до цих файлів можна здійснити також за допомогою
низкоуровнего інтерфейсу для роботи з файлами і з використанням таких
функцій, як read (2) і lseek (2). Цілі описатели файлів, асоційованих
з потоками stdin, stdout і stderr, будуть відповідно рівні 0, 1 і 2.
Константи STDIN_FILENO, STDOUT_FILENO і STDERR_FILENO визначені цими
значеннями в.
Зауважте, що спільне використання FILE і описателей низького рівня
може привести до непередбачених наслідків, цього слід уникати при
будь-якому зручному випадку. Для "мазохістів": POSIX.1, розділ 8.2.3, детально
описує, як визначається така спільна робота. загальне правило
свідчить, що описатели підтримуються ядром, а stdio всього лише
бібліотека. Це означає, наприклад, що після виконання операції
дочірній процес успадковує всі описатели відкритих файлів, але всі старі
потоки стають недоступними.
Так як stdin, stdout і stderr визначені як макроси, то успадковувати їх
не можна. Стандартні потоки можуть посилатися на інші файли за допомогою
бібліотечної функції freopen (3), спеціально розробленої для можливості
успадкування stdin, stdout і stderr. Стандартні потоки можна закрити
викликом exit (3) і при звичайному завершенні програми.
МІРКУВАННЯ
Потік stderr НЕ буферизується. Потік stdout буферизується через підрядник при
зверненні до терміналу. Неповні рядка не з'являться або до викликів
fflush (3) або exit (3), або поки не буде надрукована нова рядок. це
може привести до непередбачуваних наслідків, особливо при виведенні звіту
про налагодження. Режим буферизації стандартних потоків (або будь-яких інших)
може бути змінений викликами setbuf (3) або setvbuf (3). Зауважте, що в
цьому випадку stdin асоціюється з терміналом, при цьому можлива
буферизация введення драйвером терміналу, який не співвідноситься з
буферизацией введення / виведення. Насправді, введення з терміналу через підрядник
буферизується в ядрі. Обробка вводиться ядром інформації може бути
змінена за допомогою викликів типу tcsetattr (3); см. також stty (1) і
termios (3). Макроси stdin, stdout і stderr відповідають стандарту ANSI
X3.159-1989 (# 96; # 96; ANSI C ''), де обмовляється, що ці три потоки повинні
відкриватися під час запуску програми.
Оффтоп
>>> Після п'яти місяців розробки побачив світло реліз десктоп-оточення MATE 1.12, в рамках якого продовжено розвиток кодової бази GNOME 2.32 із збереженням класичної концепції формування робочого столу. Установчі пакети з MATE 1.12 найближчим часом будуть підготовлені для Arch Linux. Linux Mint, Debian, Ubuntu, Fedora, Mageia, Slackware і openSUSE. MATE 1.12 увійде до складу найближчого випуску Linux Mint 17.3, а також буде доступний через репозиторій для користувачів Ubuntu MATE.
>>> Кес Кук (Kees Cook), колишній головний сисадмін kernel.org і лідер Ubuntu Security Team, який нині працює в компанії Google над забезпеченням захисту ChromeOS, оголосив про створення проекту Kernel Self Protection Project, в рамках якого планується сформувати співтовариство для розвитку і просування в основне ядро Linux технологій активного захисту, більшість з яких вже підготовлені в рамках проектів PaX і Grsecurity. Фінансування та ресурси для проведення робіт будуть надані організацією Linux Foundation і учасниками програми Core Infrastructure Initiative.
>>> Відбувся реліз Linux -дістрібутіва Ubuntu 15.10 "Wily Werewolf". Готові установчі образи створені для Ubuntu Desktop, Ubuntu Server і Ubuntu Core (для них на попередніх етапах тестування пропонувалися тільки щоденні збірки), а також для Kubuntu, Lubuntu, Ubuntu MATE, Ubuntu Cloud, Ubuntu GNOME і Xubuntu.