Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс ПЯВУ 2 сем / Лекции 2 сем / Л№36.Библиотека стандартных программ / Лекция № 33. Библиотека стандартые функции.odt
Скачиваний:
15
Добавлен:
17.04.2015
Размер:
54.36 Кб
Скачать

9. Функции ввода/вывода нижнего уровня

Функции нижнего уровня не требуют включения файла stdio.h. Тем не менее, несколько общих констант, определенных в этом файле, могут оказаться полезными (например, признак конца файла EOF). Прототипы функций нижнего уровня содержатся в файле io.h.

В настоящее время низкоуровневый доступ к файлам имеет ограниченное применение, такое как написание системных функций и драйверов для устройств, программируемых на Си.

В табл. 12 кратко перечислены функции для низкоуровневого доступа к файлам.

Таблица 12. Низкоуровневый доступ к файлам

________________________________________________________________________________

Функция Краткое описание

________________________________________________________________________________

close закрыть файл

creat создать файл

dup создать второй дескриптор (handle) для файла

dup2 переназначить дескриптор (handle) для файла

eof проверка на конец файла

lseek позиционирование указателя файла в заданное место

open открыть файл

read читать данные из файла

sopen открыть файл в режиме разделения доступа

tell получить текущую позицию указателя файла

write записать данные в файл

10. Функции ввода/вывода с консольного терминала

Функции ввода/вывода для консоли используют специфические особенности IBM‑совместимого компьютера, такие как наличие специального видеоадаптера, и не являются переносимыми на другие типы компьютеров. Прототипы функций содержатся в файле conio.h. Консольные функции позволяют читать и записывать строки (cgets и cputs), форматированные данные (cscanf и cprintf) и отдельные символы. Функция kbhit определяет, было ли нажатие клавиши и позволяет определить наличие символов для ввода с клавиатуры до попытки чтения.

Во‑первых, существуют функции для работы с окном консоли, аналогичные библиотеке Crt Паскаля. В табл. 13 кратко перечислены основные из них.

Таблица 8.13. Функции для работы с окном консоли

________________________________________________________________________________

Функция Краткое описание

________________________________________________________________________________

window void window(int left, int top, int right, int bottom); Устанавливает текущее окно

консоли по указанным координатам

clrscr void clrscr(void); очищает текущее окно

clreol void clreol(void); очищает текущую строку окна от позиции курсора до

конца

delline void delline(void); удаляет строку окна, в которой установлен курсор

insline void insline(void); вставляет пустую строку в позиции курсора

gotoxy void gotoxy(int x, int y); перемещает курсор в указанные столбец (x) и строку

(y) окна

textbackground void textbackground(int newcolor); устанавливает указанный фоновый

цвет окна. Цвета указываются номерами 0‑15 или названиями,

определенными в conio.h (BLUE, GREEN и т. д.)

textcolor void textcolor(int newcolor); устанавливает указанный цвет вывода текста

в окне. Цвета указываются аналогично функции textbackground

wherex int wherex(void); возвращает номер столбца окна, в котором находится

курсор

wherey int wherey(void); возвращает номер строки окна, в которой находится

курсор

________________________________________________________________________________

Во‑вторых, в файле conio.h описаны прототипы ряда специфичных для Си функций (см. табл. 14).

Таблица 14. Функции ввода/вывода для консоли

________________________________________________________________________________

Функция Краткое описание

________________________________________________________________________________

cgets char *cgets(char *str); чтение строки с консоли до комбинации CR/LF или

достижения максимально возможного числа символов. Если cgets читает

комбинацию CR/LF, она заменяет ее на нулевой байт перед сохранением

строки. Перед вызовом функции str[0] должен быть установлен в максимально

возможное число символов для чтения. В случае успеха str[1] содержит

реально прочитанное число символов, возвращается указатель на str[2]. При

чтении комбинации CR/LF она заменяется нулевым байтом. Нулевой байт

добавляется в конец строки. Таким образом, длина буфера должна быть не

меньше str[0]+2 байт.

cprintf int cprintf(const char *format[, argument, ...]); запись данных на консольный

терминал по формату. Требования к строке формата и последующим

аргументам аналогичны функции fprintf. Не переводит '\n' (символ LF) в пару

символов '\r\n' (CR/LF). В случае успеха вернет число выведенных символов, в

случае ошибки - EOF.

cputs int cputs(const char *str); вывод строки в текущее окно консольного терминала,

определенное по умолчанию или функцией window. Не добавляет символов

новой строки.

getch int getch(void); чтение символа с консоли. Символ не отображается на экране

(нет эхо‑печати). Вернет код символа.

getche int getche(void); чтение символа с консоли с эхо‑печатью. Вернет код символа.

kbhit int kbhit(void); проверка нажатия клавиши на консоли. Пример:

while (!kbhit())

/*до нажатия клавиши */ ;

cprintf("\r\nНажата клавиша...");

putch int putch(int c); Вывод символа на консольный терминал. Не переводит '\n'

(символ LF) в пару символов '\r\n' (CR/LF). В случае успеха вернет символ, в

случае ошибки - EOF

ungetch int ungetch(int ch); возврат последнего прочитанного символа с консольного

символа обратно с тем, чтобы он стал следующим символом для чтения.

Ограничения те же, что для ungetc.

________________________________________________________________________________

Приведенный ниже пример демонстрирует чтение строки с помощью функции cgets.

char buffer[83];

char *p;

/* Место для 80 символов + нулевого байта */

buffer[0] = 81;

printf("Введите строку:");

p = cgets(buffer);

printf("\ncgets прочитала %d \

символов:\"%s\"\n", buffer[1], p);

printf("Возвращен указатель %p, \

buffer[0] содержит %p\n", p, &buffer);

В следующем примере строка текста печатается в центре стандартного окна консоли.

#include <conio.h>

int main(void){

clrscr();

gotoxy(35, 12);

textcolor (RED);

cprintf("Hello world");

getch();

return 0;

}

Наконец, приведенный далее код демонстрирует обработку нажатий клавиш для консольного терминала.

#include <stdio.h>

#include <conio.h>

int main(void) {

int ch;

do {

ch=getch();

if (ch=='\0') { //расширенный код

ch=getch();

switch (ch) {

case 72: printf ("\nUp"); break;

case 80: printf ("\nDown"); break;

case 75: printf ("\nLeft"); break;

case 77: printf ("\nRight"); break;

default: printf

("\nExtended key %2d",ch); break;

}

}

else {

switch (ch) {

case 13: printf ("\nEnter"); break;

case 27: printf ("\nEsc"); break;

default: printf ("\nKey %4d",ch);

break;

}

}

} while (ch!=27);

}