Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Тема 13. Стандартные библиотеки языка Си 4 страница



 

 

ПРИМЕЧАНИЕ

Помните, что перенаправление потоков stdin и stdout – это возможность операционной системы, а не самого языка Си. Тем не менее, это еще одно свидетельство гибкости и удобства потоков ввода-вывода. Более подробную информацию о перенаправлении можно найти в документации операционной системы.

 

 

Пример:

#include <stdio.h>

#include <io.h>

#include <fcntl.h>

main ()

{

int e;

e=open (“file.out”, O_CREAT | O_WRONLY);

dup2 (e, 1); // переназначит стандартный вывод с дескриптором 1 (stdin) в «file.out»

printf (“Пример\n”);

}

Результат: слово “Пример” в файле «file.out»без вывода на экран

 

 

13.8. функции чтения и записи данных

 

К функциям чтения и записи данных относятся две функции read() и write() из библиотеки «io.h».

 

Формат:

int read (int дескриптор, void * имя_указателя, unsigned колич );

 

Данная функция выполняет чтение колич -байт из открытого файла с дескриптором дескриптор и размещенного по адресу, на который ссылается указатель * имя_указателя. В случае успеха функция возвращает прочитанное число байтов, а при ошибке – «-1».

 

Формат:

int write (int дескриптор, void * имя_указателя, unsigned колич );

 

Данная функция выполняет запись колич -байт в открытый файл с дескриптором дескриптор и размещенного по адресу, на который ссылается указатель * имя_указателя. В случае успеха функция возвращает записанное число байтов, а при ошибке – «-1».

 

Функция lseek() позволяет установить текущий указатель чтения/записи. Функция tell() позволяет определить текущую позицию указателя.

 

 

ВНИМАНИЕ

Функции lseek() и tell() нельзя применять к устройствам.

 

 

Пример:

char string[512]=”Тестовая строка”;

...

handle=creat (“DATA”, S_IREAD | S_IWRITE); // S_IREAD и S_IWRITE находятся в «sys\stat.h »

write (handle, string, sizeof (string));

read (handle, string, 512);

...

close (handle);

 

 

13.9. Ввод-вывод для консоли и портов

 

С помощью функций, прототипы которых находятся в библиотеке «stdio.h», нельзя выполнить неотображенный на экран ввод символов, определить нажатие специальной клавиши и т.д. Для выполнения таких действий используются функции ввода-вывода для консоли ипортов, прототипы которых находятся в библиотеке «conio.h».

 

Функции для работы с консолью:

· cgets ()вводит строку с консоли

· cputs ()выводит строку в консоль

· cscanf ()вводит форматированные данные с консоли

· cprintf ()выводит форматированные данные в консоль

· getch ()вводит символ с консоль

· getc ()выводит символ с консоли и отображает его на экране



· ungetch () – «возвращает» прочитанный символ на консоль (записывает непосредственно в буфер клавиатуры символ, который будет прочитан при выполнении следующей операции чтения)

· putch ()выводит символ на консоль

· kbhit ()проверяет, была ли нажата клавиша на клавиатуре

 

Функции для работы с портами:

· inp ()читает один байт из порта

· inpw ()читает два байта из порта

· outp ()записывает один байт в порт

· outpw ()записывает два байта в порт

 

 

ВНИМАНИЕ

Для консоли и порта нет функций открывающих или закрывающих, т.к. консоль и порты не закрываются и не открываются во время ввода-вывода.

 

 

Для организации интерфейса с пользователем, при котором нажатие клавиши вызывает мгновенную реакцию программы без отображения введенного символа на экране, полезна функция getch().

 

Формат:

int getch (void);

 

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

 

 

ПРИМЕЧАНИЕ

Для чтения функциональных клавиш функция должна вызываться дважды; в этом случае первый вызов возвращает ноль, а второй – код нажатой клавиши.

 

 

Пример:

#include <stdio.h>

#include <conio.h>

main ()

{

int ch;

do

{

puts (“Нажмите клавишу\n”);

if (!(ch=getch()))

{

ch=getch();

printf (“Специальная клавиша (Код %u)\n”, ch);

}

else printf (“Символьная клавиша %c (Код %u)\n”, ch, ch);

puts (“Продолжить? (y/n)”);

}

while ((ch=getch())==’y’ || ch==’n’);

return 0;

}

 

Результат:

Нажмите клавишу

// нажат 0

Символьная клавиша 0 (Код 48)

Продолжить? (y/n)

Нажмите клавишу

// нажат F1

Символьная клавиша (Код 59)

Продолжить? (y/n)

 


Дата добавления: 2015-08-29; просмотров: 18 | Нарушение авторских прав







mybiblioteka.su - 2015-2024 год. (0.011 сек.)







<== предыдущая лекция | следующая лекция ==>