Консольного термінала та порту
Функції введення–виведення консольного термінала та порту розширюють свої можливості для цього класу пристроїв, безпосередньо використовуючи їх специфіку (відеоадаптер тощо). Функції роботи з портом читають і записують дані побайтно. Деякі додаткові режими встановлюються відповідними функціями для консолі, наприклад введення з ехо-друком чи без, і специфічні для IBM PC. Розглянемо деякі функції:
a cgets() – читання рядка з консолі;
a cprintf() – аналог printf;
a cputs() – запис рядка на консоль;
a getch() – читання символу;
a getche() – читання символу з ехо-друком;
a kbhit() – перевірка натискання клавіші;
a putch() – запис символу на консоль;
a ungetch() – повернення останнього прочитаного символу з консолі для того, щоб він став наступним для читання;
a cscanf() – аналог scanf;
a getpass() – введення з термінала пароля без ехо-друку.
Консольний термінал і порт не можуть бути відкриті чи закриті перед виконанням введення-виведення, тому fopen та fclose не використовуються. Наприклад:
|
|
#include <conio.h>
Int main(void)
{
char*password;
password=getpass("Input a password:");
cprintf("The password is: %s\r\n",password);
return 0;
}
Функції введення–виведення нижнього рівня
Функції введення–виведення нижнього рівня не працюють із буферизованими чи форматованими даними. При роботі з файлами вони використовують дескриптори файлів. Основні функції:
a close() – закриття файла;
a creat() – створення;
a dup() – створює другий дескриптор файла;
a dup2() – перепризначує дескриптор файла;
a eof() – перевірка на кінець файла;
a lseek() – позиціювання файлового покажчика;
a open() – відкривання;
a read() – читання;
a sopen() – відкривання файла в режимі розділення;
a tell() – повертає поточну позицію покажчика;
a write() – запис.
Розглянемо програму:
#include <sys\stat.h>
#include <string.h>
#include <fcntl.h>
#include <io.h>
Int main(void)
{
int handle;
char buf[11]="0123456789";
/*змінює режим відкривання файла з текстового на бінарний*/
_fmode=O_BINARY;
/*створює двійковий файл для читання та запису*/
handle=creat("DUMMY.FIL",S_IREAD |S_IWRITE);
/*записує 10 байтів у файл*/
write(handle,buf,strlen(buf));
/*закриває файл*/
close(handle);
return 0;
}
Розглянемо приклади розв'язання задач.
1. Написати програму, яка друкує номер і код введеного символу у вісімковому та шістнадцятковому вигляді.
#include <stdio.h>
Void main(void)
{char c;
printf("введіть символ\n');
scanf("%c',&c);
printf("номер десятковий:');
printf("%d\n',c-'0');
printf("номер вісімковий:');
printf("%o\n',c-'0');
printf("номер шістнадцятковий:');
printf("%x\n',c-'0');
printf("код десятковий:');
printf("%d\n',c);
printf("код вісімковий:');
printf("%o\n',c);
printf("код шістнадцятковий:');
printf("%x\n',c);
}