Особенности разработки программ в базовых ОС


Имея в виду учебный характер данного пособия, познакомим читателя с простейшими типовыми приемами разработки программ на языке Си для базовых операционных систем. Эти приемы основываются на вызове средств программирования в режиме командной строки. При таком программировании используется текстовое окно, часто размером во весь экран, на котором отображается все, что непосредственно вводится с клавиатуры. Программист набирает команды управления операционной системой или вызова служебных программ нажатием клавиш клавиатуры и нажимает клавишу Enter.

Как это ни странно, отказ от полноэкранных систем программирования и графического интерфейса значительно ускоряет разработку простейших программ, нужно лишь обладать необходимым минимумом знаний, чтобы командовать компьютером на этом уровне управления. Более сложные и громоздкие средства разработки на самом деле эффективны только для достаточно больших и сложных программ, а также для малоквалифицированных программистов, которым они в диалоговом режиме помогают разобраться в ряде типовых ситуаций. Лишь отладка программ с помощью специализированных отладчиков требует более мощных и громоздких средств.

Для программирования в операционной системе Windows основными современными средствами программирования на языке Си являются соответствующие программные продукты фирм Borland (более современное название Inprise Inc.) и Microsoft. Современные компиляторы первой из них называются BCC32.EXE, а второй – CL.EXE Исходный текст программы на языке Си может быть подготовлен в любом текстовом редакторе, формирующем чистый текст без всяких атрибутов и стилей. В Windows для этого подойдет редактор "Блокнот" (Notepad.exe), но лучше использовать файловую инструментальную оболочку типа FAR manager или подобную ей. Рекомендуется для простейших программ, использующих программные функции операционной системы, задавать расширение исходных файлов программ, обозначаемое буквой "с", так что типовой пример может быть наименован как prim.c. Создание исполняемой программы с помощью программы BCC32.EXE запишется в командной строке как

bcc32 prim.c

а с помощью программы CL.EXE запишется в командной строке как

cl prim.c

Если использовать систему программирования Watcom фирмы Sybase, приказ на создание исполняемой программы запишется в командной строке как

wcl386 prim.c

Читатель, видимо, уловил правило приказов на создание исполняемых программ: в командной строке записывается имя основной программы системы разработки, за которым через пробел (пробелы) записывается имя исходной программы. При повторных вызовах программ, уже вызывавшихся из командной строки, достаточно один (или более) раз нажать на клавишу ­ клавиатуры (что вызывает в командную строку предыдущую или более раннюю использованную команду), затем следует нажать клавишу Enter (в командных оболочках для вызова предыдущей выполненной команды может использоваться другая управляющая клавиша).

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

>имяфайладляошибок

Например, вызов компилятора BCC32 с помещением информации об ошибках в файл myerrs.lst для исходного текста программы prima.c запишется как

bcc32 prima.c >myerrs.lst

Для использования отладчика подготовительные действия несколько усложняются. Вызов компилятора BCC32.EXE должен содержать опцию (ключ) v, которой должен предшествовать символ дефиса или наклонной черты (символ - или /), так что наш пример приобретает вид

bcc32 -v prim.c

В системе разработки Microsoft отсутствует отладчик, отделенный от интегрированной системы разработки Visual Studio, поэтому желающие могут использовать всю эту систему.

В системе разработки Watcom опцией задания отладочной информации служит буквосочетание d2, поэтому соответствующий вызов компилятора должен иметь вид

wcl386 -d2 prim.c

Для разработок программ в операционной системе Linux служит свободно распространяемый компилятор с общим именем gcc. Его вызов для компиляции исходной программы prim.c задается в командной строке в виде

gcc prim.c

Неожиданностью для программистов, начинающих разработки под Unix, является отсутствие исполняемого файла вида prim.exe. Дело в том, что расширение exe для исполняемых файлов в этой системе не является употребительным, хотя никак и не запрещается. Более того, автоматически создаваемый компилятором исполняемый файл имеет имя a.out (достаточно непривычно для типовых пользователей операционных систем от MS). Чтобы задать любое желаемое имя исполняемого файла, следует воспользоваться опцией -o, которая призвана определять имя выходного (output) файла и за которой через пробел (пробелы) должно следовать это имя. В нашем примере следует набрать командный текст

gcc -o prim.exe prim.c

В стандартной настройке ОС Unix для запуска программы, как правило, недостаточно набрать в командной строке ее имя. Обычно вызов программы из текущего оглавления задается в виде

./имяпрограммы

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

Для последующего использования отладчика в вызове компилятора следует задать опцию -g, так что общий вызов будет иметь вид

gcc -o prim.exe -g prim.c

Сам отладчик имеет в этой системе имя gdb, а вызов на выполнение программы под управлением отладчика будет записываться в виде

gdb prim.exe

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

Все разработки в операционной системе Windows требуют подключения заголовочного файла windows.h, в операционной системе Unix в простейших случаях бывает достаточно ограничиться подключением заголовочного файла stdio.h или unistd.h – в современных версиях этих операционных систем.

Более детальная информация будет даваться при рассмотрении примеров.