
- •1. Понятие операционной системы (ос), ее отношение к аппаратному и программному обеспечению
- •2. Состав и основные функции ос
- •3. Классификация ос
- •4. Понятие дескрипторов и хэндлов
- •5. Ввод и вывод в стандартные файлы
- •6. Базовые средства использования файловой системы
- •Int open(char* filename, int access_mode, mode_t permission)
- •Int open(char* filename, int access_mode, mode_t permission)
- •9. Многопользовательская блокировка файлов
- •Int fcntl(int handle, int cmd, struct flock *ldata)
- •10. Функции управления курсором.
- •11. Многократный вывод символов и атрибутов.
- •12. Вывод в произвольную позицию экрана
- •13. Событийное программирование и его использование в функциях ввода.
- •14. Средства чтения содержимого экрана в Windows.
- •15. Средства чтения содержимого экрана в Unix.
- •Int hscreen;
- •18. Программные средства использования мыши в текстовом режиме Linux
- •Int Gpm_Open (Gpm_Connect *conn, int flag)
- •Int Gpm_GetEvent (Gpm_Event *event)
- •Int clicks;
- •19. Понятие процесса; параллельные и последовательные процессы
- •20. Состояния процесса, диспетчеризация процессов
14. Средства чтения содержимого экрана в Windows.
BOOL ReadConsoleOutputCharacter(HANDLE hConsOut, STR* buffer, DWORD len, COORD dwReadCoord, DWORD *len)
BOOL ReadConsoleOutput(HANDLE hConsOut, CHAR_INFO* cells, COORD dwBufferSize, COORD dwBufferCoord, SMALL_RECT* rect)
BOOL ReadConsoleOutputAttribute(HANDLE hConsOut, WORD* attribs, DWORD len, COORD pos, DWORD* actlen)
ReadConsoleOutputCharacter – функция выполняет чтение символа на экране и переносит в массив buffer.
ReadConsoleOutput – функция чтения символов с их атрибутами на экране. При этом функция читает информацию из прямоугольник rect и переносит её в двумерный массив cells. Также dwBufferCoord – позиция того элемента массива с котрого используется массив а dwBufferSize – размер массива
ReadConsoleOutputAttribute – функция выполняет чтение только аттрибутов и переносит в массив слов attribs.
Число читаемых при этом символов или атрибутов задаётся параметром len, чтение выполняется с позиции экрана задаваемой идентификатором pos, а действительное число прочитанных символов или аттрибутов возвращается с помощью параметра actlen.
15. Средства чтения содержимого экрана в Unix.
В операционной системе Unix отсутствуют стандартные средства чтения символов с экрана. Это объясняется тем, что основные принципы работы с Unix формировались еще в то время, когда основным средством вывода информации для отдельного пользователя интерактивной ОС были телетайпы, осуществляющие вывод на бумажную ленту, считывать информацию с которой было невозможно по техническим причинам.
Одним из устройств, которое позволяет считывать информацию, является "виртуальный экран консоли", обозначаемый в файловой системе Unix как vcs (сокращение от virtual console screen). Заметим, что специальные файлы устройств стандартным образом размещаются в каталоге /dev, поэтому полное наименование устройства виртуального экрана консоли следует задавать в виде /dev/vcs.
Int hscreen;
hscreen = open("/dev/vcs", O_RDONLY, 0600);
Далее можно производить чтение с экрана с помощью функции:
read(hscreen, &buffer, 100)
buffer - массив, в котрый считываются символы
Последний атрибут – сколько байт нужно прочитать
16. Перенастройка консоли Unix для немедленного ввода нажатий отдельных клавиш
Для доступа с клавиатуры нужно открыть специальное виртуальное устройство dev/tty.
hcons = open(“/dev/tty”, O_RDONLY)
По причине того что вводимые символы поступают только после нажатия клавиши Enter необходимо отменить стандартный режим работы консоли.
int tcgetattr(int htty, struct termios *tsave)
int tcsetattr(int htty, int action, srtuct termios *tnew) – установить новые режимы
struct termios sterm, term;
int htty;
htty = open(“/dev/tty”, O_RDONLY);
tcgetattr(htty, &sterm);
tcgetattr(htty, &term);
term.c_lfkag &= ~(ICANON|ECHO);
term.c_cc[VMIN]=1;
term.c_cc[VTIME]=0;
tcsetattr(htty, TCSAFLUSH, &sterm);
17. Программные средства использования мыши в текстовом режиме Windows
В операционной системе Windows информация от мыши получается в результате универсального запроса событий для текстовой консоли посредством вызова функции ReadConsoleInput. При получении указанной функцией сообщения от мыши, поле EventType этого сообщения оказывается равным константе MOUSE_EVENT, а комбинированный компонент Event является записью типа MOUSE_EVENT_RECORD, который определяется в заголовочном файле описанием
typedef struct _MOUSE_EVENT_RECORD {
COORD dwMousePosition;
DWORD dwButtonState;
DWORD dwControlKeyState;
DWORD dwEventFlags;
} MOUSE_EVENT_RECORD, *PMOUSE_EVENT_RECORD;
Компонент dwMousePosition этой структуры дает текущую позицию мыши. Поле dwButtonState выдает код нажатия клавиш мыши и может быть произвольной комбинацией следующих битовых значений:
#define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001
#define RIGHTMOST_BUTTON_PRESSED 0x0002
#define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004
#define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008
#define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010
Поле dwEventFlags позволяет определить двойное нажатие мыши и двигалась ли мышь в момент формирования сообщения.
#define MOUSE_MOVED 0x0001
#define DOUBLE_CLICK 0x0002
Поле dwControlKeyState совпадает по названию и назначению с соответствующим полем в записи события от клавиатуры и содержит комбинацию битов, отражающих текущее состояние отдельных управляющих клавиш.