Распределение программ по главам
Распределение программ по главам
В каталоге каждой главы содержатся все программы, относящиеся к данной главе (за исключением тех, которые были помещены в каталог Utility), а также всевозможные дополнительные программы. Соответствующий их перечень, сопровождаемый кратким описанием служебных программ, представлен ниже. В названиях некоторых программ присутствует суффикс "x"; в эти программы намеренно внесены дефекты, чтобы проиллюстрировать распространенные ошибки программирования.
Примечание
Имена многих программ, например, программ tail и touch, которые рассматривались в главе 7, совпадают с названиями утилит UNIX, работу которых они имитируют. Во избежание путаницы вы можете дать этим программам другие имена. Некоторые программы уже переименованы таким образом; в качестве примера можно указать программы lsW и cpW.
Глава 1
• срС.с — программа 1.1.
• cpW.c — программа 1.2; cpwFA.c — ее модифицированный вариант, обеспечивающий лучшую производительность. См. результаты в приложении В.
• cpCF.с — программа 1.3.
• К числу других программ относятся UNIX-версия этой программы (cpU.с), а также программа (cpUC.c), скомпонованная с использованием библиотеки совместимости UNIX, предоставляемой Visual C++. CpwFA.с — вариант Cpw.c, обеспечивающий повышенное быстродействие за счет использования буферов большого размера, флагов последовательного просмотра и других методик, введенных в главе 2.
Глава 2
• Программы 2.1 и 2.2 находятся в упомянутом ранее каталоге Utility.
• cat.с — программа 2.3.
• atou.с — программа 2.4.
• Asc2Un.c — программа 2.5; Asc2UnFA.c и Asc2UnNB.c — ее версии, обеспечивающие лучшую производительность. Все три файла реализуют функцию Asc2Un, которая вызывается программой 2.5.
• pwd.c — программа 2.6; pwda.c — модифицированный вариант, обеспечивающий выделение необходимого объема памяти для размещения пути доступа.
• cd.c — реализация команды UNIX, осуществляющей переход к другому каталогу; эта программа не совпадает с той, которая используется в главе 2.
Глава 3
• RandomAccess.с — программа 3.1.
• lsW.c — программа 3.2. rmW.c — аналогичная программа, предназначенная для удаления файлов.
• touch.с — программа 3.3.
• getn.c — дополнительная программа для чтения записей фиксированной длины, иллюстрирующая доступ к файлам и вычисление позиции в файле.
• lsReg.с — программа 3.4.
• FileSize.с — приведенное в учебных целях решение, позволяющее определить, является ли выделенное для файла пространство разреженным.
• TestLock.с — осуществляет блокирование файла.
• tail.с — требуется как часть упражнения 3.3.
Глава 4
• Программа 4.1 включена в файл ReprtErr.c, находящийся в каталоге Utulity.
• toupper.c — программа 4.2. toupperX.c содержит преднамеренно внесенные ошибки; их устранение послужит для вас хорошим упражнением.
• Exception.с — программа 4.3, а также функция фильтра — программа 4.4.
• Ctrlc.с — программа 4.5.
Глава 5
• sortBT.c — представляет программы 5.1 и 5.2; sortBTSR.c — вариант, в котором отсутствует опция отказа от сериализации при вызове функций управления памятью, что используется для выяснения влияния этого фактора на производительность в случае простых приложений. Читатель может самостоятельно убедиться в том, что наблюдаемый эффект является весьма незначительным.
• Asc2UnMM.с — функция для программы 5.3.
• sortFL.с — программа 5.4, a sortHP.с — аналогичная программа, за исключением того, что вместо отображения файлов используется их считывание в буфер, выделяемый в памяти.
• sortMM.с — программы 5.5 и 5.6.
• atouEL.c — программа 5.7, a Asc2UnDll.c и Asc2UnmmDLL.c — исходные файлы для требуемых библиотек DLL. Asc2Unmmfl.c — еще один вариант, очищающий память при завершении выполнения, что может приводить к общему замедлению программы, но оставляет систему в безопасном состоянии.
• HeapNoSr.c — тестовая программа для количественной оценки эффекта использования флага HEAP_NO_SERIALIZE при распределении памяти. Эту программу можно использовать при выполнении упражнения 5.1.
• RandFile.c — генерирует текстовые файлы заданного размера со случайными ключами; такие файлы удобны для тестирования функций сортировки и используются для генерирования текстовых файлов большого размера во многих тестах с целью определения временных характеристик выполнения программ.
• clear.с — простая программа, выделяющая и инициализирующая память крупными блоками до наступления сбоя. Эта программа используется в перерывах между тестами синхронизации для гарантии того, что данные не кэшируются в памяти, ибо это могло бы искажать результаты тестов.
Глава 6
• grepMP.c — программа 6.1. grep.с — исходный файл программы поиска заданных символьных шаблонов, которая вызывается как процесс программой grepMP.c.
• timep.с — программа 6.2.
• JobShell.c — программа 6.3, a JobMgt.c предоставляет функции поддержки программ 6.4, 6.5 и 6.6.
• catHA.c и grepMPha.c — модифицированные версии других программ, предназначенных для демонстрации передачи дескриптора в командной строке, что используется при решении упражнения 6.2.
• version.с — получает сведения об операционной системе, включая номер ее версии.
Глава 7
• grepMT.c — программа 7.1. grepMTx.c — ее вариант с преднамеренно введенными дефектами; устранение этих дефектов предлагается в упражнении 7.7.
• sortMT.c — программа 7.2. sortMTx.c — ее вариант с преднамеренно введенными дефектами.
• wcMT.с — решение упражнения 7.6. Имеются также две версии с преднамеренно введенными дефектами и еще одна версия, сериализующая обработку файла, которая предусмотрена для анализа временных характеристик выполнения программ.
• Во всех соответствующих проектах используется библиотека С с многопоточной поддержкой, о чем говорится в тексте главы.
Глава 8
• simplePC.с — программа 8.1.
• eventPC.с — программа 8.2.
Глава 9
• statsMX.c — программа 9.1. Ее различными вариантами являются statsNS.c, statsCS.cn statsIN.c.
• TimedMutualExclusion.c — используется для исследования временных характеристик, предлагаемого в тексте главы и упражнениях.
Глава 10
• В программе 10.1 содержится часть файла SynchObj.h, находящегося в каталоге Include. Остальная часть указанного файла содержится в программе 10.3.
• ThbObject.c — программа 10.2. testTHB — соответствующая тестовая программа.
• QueueObj.с — программа 10.4, различными вариантами которой являются программы QueueObjCS.c (используется объект CRITICAL_SECTION), QueueObjSOAW.c (используется функция SignalObjectAndWait) и версия, использующая сигнальную модель.
• ThreeStage.c — программа 10.5, для проекта которой требуются файлы Messages.с и QueueObj.c.
• QueueObjCancel.с — программа 10.6, которая работает в сочетании с программой ThreeStageCancel.c.
• MultiSem.c — вместе с тестовой программой TestMultiSem.c образует решение упражнения 10.11.
• MultiPCav.c — использует Pthreads; будет очень неплохо, если в качестве упражнения вы попытаетесь преобразовать эту программу к форме, использующей Windows API или библиотеку Pthreads с открытым исходным кодом.
Глава 11
• pipe.с — программа 11.1. Для демонстрации работы этой программы удобно использовать команду wc.с. pipeNP.с — вариант, использующий именованный канал.
• clientNP.с — программа 11.2.
• serverNP.с — программа 11.3.
• SrvrBcst.c — программа 11.4.
• LocSrver.с — программа 11.5.
Глава 12
• clientSK.с — программа 12.1.
• serverSK.c — программа 12.2.
• command. с — программа 12.3.
• SendReceiveSKST.c — программа 12.4, a serverSKST.c и clientSKST.c — соответствующие варианты программ serverSK.c и clientSK.с, незначительно модифицированных для обеспечения потокового ввода/вывода. Программу SendReceiveSKST.c следует компоновать как библиотеку DLL, которая должна неявно связываться с проектами сервера и клиента.
• SendReceiveSKHA.c — программа 12.5, a serverSKHA.c — соответствующий сервер, который использует DLL. Программа clientSKST.c будет работать с этим сервером.
Глава 13
• SimpleService.c — программа 13.2; дополнительно включает все, что требуется для программы 13.1.
• ServiceShell.с — программа 13.3.
• ServiceSK.с — это программа serverSK (программа 12.2), преобразованная в службу.
Глава 14
• atouOV. с — программа 14.1.
• atouEX.c — программа 14.2, выполняющая ту же задачу с использованием расширенного ввода/вывода.
• atouMT.с — выполняет ту же задачу с использованием многопоточного режима вместо асинхронного ввода/вывода Win32. atouMT_dh.с — неправильная версия, включенная для иллюстрации одной интересной, хотя и сопряженной с определенными рисками возможности дублирования дескрипторов.
• atouMTCP.с — использует порты завершения ввода/вывода.
• TimeBeep.с — программа 14.3.
• serverCP.c — программа 14.4, представляющая собой версию программы serverMT, в которой используются порты завершения ввода/вывода и перекрывающийся ввод/вывод.
Глава 15
• chmodW.с — программа 15.1, в которую добавлены возможности различения элементов АСЕ, предоставляющих и отменяющих разрешения доступа (как описано в тексте). chmodBSD.c — видоизмененный вариант программы, в котором используется функция BuildSecurityDescriptor.
• lsFP.с — программа 15.2.
• InitUnFp.c — код для программ 15.3, 15.4 и 15.5. Эти функции нужны программам 15.1 и 15.2. Кроме того, в исходном модуле содержится код, показывающий, как получить имя группы-владельца, что вам предлагается самостоятельно сделать в упражнении 15.12.
• TestFp.c — дополнительная тестовая программа, которая оказалась полезной в процессе тестирования.
• serverNP_secure.с — программа 15.6.
• JobShell_secure.c и JobMgt_secure.с — усовершенствованные варианты программ для системы управления заданиями, которая рассматривается в главе 6.
Глава 16
Для этой главы предусмотрен только один файл с исходным кодом, а именно, sortMM64.c, который представляет собой программу sortMM.c из главы 5, усовершенствованную таким образом, чтобы она могла выполняться на обеих платформах Win32 и Win64.