Операционные системы. Программирование в операционной среде Windows
42 3.2. Для чтения из файла предназначен вызов функции ReadFile. Прочитанный из файла блок символов записывается в буфер Buff, фактическая длина блока сохраняется в переменной dwRead: DWORD dwRead; char Buff[80] ; ReadFile(hFile, Buff, strlen(Buff), &dwRead, NULL); Первый параметр определяет описатель ОЯ «файл», параметр Buff указывет на буфер, в который будет помещен блок прочитанных символов, следующий параметр задает размер буфера в символах, следующий параметр содержит указатель на фактическое количество прочитанных символов. 3.3. Прочитанный из файла блок символов вывести на консоль посимвольно, или, добавив в конце блока нулевой символ, как строку. 3.4. Организовать цикл чтения до конца файла: до получения нулевого значения функции ReadFile, или нулевого значения переменной dwRead. 4. В родительском процессе создать именованный ОЯ «событие» с автосбросом. Получить доступ к данному объекту из дочернего процесса. 5. В дочернем процессе создать поток, который будет ожидать установки (освобождения) события. Данный поток должен записывать в открытый файл строку «Событие»+ имя события. Для записи в файл предназначен вызов функции WriteFile. Блок символов из буфера Buff записывается в файл. DWORD dwWritten; char Buff[80] ; WriteFile(hFile, Buff, strlen(Buff), &dwWritten, NULL); 6. В родительском процессе создать именованный ОЯ «семафор» со счетчиком равным двум. Получить доступ к нему из дочернего процесса 7. В родительском процессе создать поток. В дочернем процессе создать три потока. 8. Каждый вновь созданный поток в обоих процессах будет пытаться захватить ресурс, защищенный семафором. 8.1. При удачном захвате ресурса поток записывает в файл «Поток N _ допущен к ресурсу» (указать номер потока). Далее следует задержка на 1 секунду с помощью вызова функции Sleep (эмуляция обработки данных). 8.2. В случае неудачной попытки захватить ресурс (истекает время таймаута - 0,5 сек), поток записывает в файл "Отказано в доступе. Поток N " (указать номер потока). 9. Для разделения общего ресурса - файла, в который все потоки заносят информацию, использовать именованный ОЯ «мьютекс», который необходимо создать в родительском потоке и получить доступ к нему в дочернем процессе.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy