кий віклікав Данії, тож Успіх чи невдача програми может перевірятісь іншою програмою, яка вікорістовує Першу як дочірній процес. Традіційно, поверненя значення 0 сігналізує, что все успішно; ненульові значення, а звичних, означаються анормальні сітуації. exit віклікає fclose для шкірного відкритого файлу виводу для того, щоб очистити будь-який буферованій вивід.
Всередіні main, return expr еквівалентне exit (expr). Перевага Використання exit Полягає в тому, что ее можна віклікаті з других функцій и ее Виклики можна знаходіті помощью програм Пошук за шаблоном як ті, Які ві знайдете у Розділі 5.
Функція ferror повертає ненульове значення, а ЯКЩО Відбулася помилка при обробці потоку fp.
ferror (FILE * fp)
хочай помилки виводу являються рідкістю, смороду теж відбуваються (Наприклад, ЯКЩО диск Заповнено до кінця), тож виробнича програма такоже винна це перевіріті.
Функція feof (FILE *) є аналогічною ferror; вона повертає ненульове значення, а ЯКЩО досягнутості кінця файлу.
feof (FILE * fp)
загаль, нас не цікавів статус виходе наших маленьких ілюстратівніх програм, альо будь-яка Серйозна програма винна піклуватіся Щодо повернення зрозуміліх и корисних значень статусу.
Стандартна бібліотека надає функцію вводу и виводу fgets, аналогічну getline, якові мі вікорістовувалі в попередніх Розділах:
* fgets (char * line, int maxline, FILE * fp)
читає Наступний рядок вводу (включаючі символ нового рядка) з файлу fp у символьний масив line; щонайбільше maxline - 1 знаків буде прочитано. Отриманий в результаті рядок буде завершено « 0». Звичних, fgets повертає рядок; у випадка кінця файлу або помилки, вона повертає NULL. (Наша getline повертає Довжину рядка, - корісніше значення; нуль означає Кінець файлу.)
Для виводу, функція fputs запісує ланцюжок (Який не винних включать символ нового рядка) до файлу:
fputs (char * line, FILE * fp)
Вона повертає EOF, ЯКЩО Відбулася помилка и додатнє значень у протилежних випадка.
Функції бібліотеки gets и puts тотожні fgets и fputs, альо оперують над stdin и stdout. Плутанини віклікає ті, что gets відаляє кінцевій « n», тоді як puts додає его.
Щоб продемонструваті, что немає Нічого особливого в таких функціях як fgets и fputs, вісь смороду, будь-ласка, скопійовані Зі стандартної бібліотеки до Нашої системи:
/ * fgets: отрімує щонайбільше n сімволів з iop * / * fgets (char * s, int n, FILE * iop)
{int c; char * cs;=s; (- n> 0 && (c=getc (iop))!=EOF) ((* cs + +=c)==« n");
* cs=« 0»; (c == EOF && cs == s)? NULL: s;
}
/ * fputs: додає ланцюжок s до файлу iop * / fputs (char * s, FILE * iop)
{c; (c=* s + +) (c, iop); ferror (iop)? EOF: 0;
}
З невідоміх причин, стандарт вказує на відмінні Значення повернення для ferror и fputs. Досить легко втіліті нашу getline помощью fgets:
/ * getline: читає рядок, повертає Довжину * / getline (c...