Разработка программ на языке C/C++ в ОС Linux

Лабораторная работа по курсу "Операционные системы"

Разработка программ на языке C/C++ в ОС Linux

Цель работы: освоить процесс разработки программ на языке С/С++ в ОС Linux; научиться работать с параметрами командной строки и переменными окружения в программах на С/С++, выполнять системные вызовы и обрабатывать ошибочные ситуации.

 

1. Этапы создания программы на языке С/С++

На рис. 1 представлена последовательность разработки программы на языке С. В ОС Linux один из популярных наборов компиляторов - GNU Compiler Collection, или GCC. Он включает компиляторы с языков C, C++, Java, Fortran и др. Имя компилятора языка С - gcc, языка С++ - g++. Для языка С также можно использовать компилятор cc, имеющийся во многих ОС семейства UNIX. Для языка С расширения исходных файлов - .c и .h, для языка С++ - .cpp, .hpp, .cxx, .hxx, .C и .H. Расширение объектных файлов - .o, библиотек объектных файлов - a. Исполняемые файлы в Linux обычно не имеют расширения.

 

 

Задание 1. Введите команду $man gcc (или $info gcc) и запишите назначение основных опций компилятора gcc: -c, -S, -E, -o.

Последовательность команд для создания программы.

  2. Программа состоит из нескольких исходных файлов (module1.c, module2.c,…  

Использование утилиты Make

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

Доступ к параметрам командной строки

  Задание 4. Выполните следующие три примера, протестируйте их с параметрами,…

4.1.

/* Ex4_1.c Печать параметров командной строки*/

#include <stdio.h>

main ( int argc, char *argv[] )

{ if ( argc < 2 )

{ printf( “Usage : %s parametern”, argv[0] ) ;

exit ( 1 ) ;

}

printf("Starting program %s n", argv[0] ) ;

printf("with %d parameter(s)n", argc-1 ) ;

printf("First parameter is %sn", argv[1] ) ;

exit ( 0 ) ;

}

4.2.Измените предыдущий пример в Ex4_2.c, в котором задается пераметр целого типа. Для преобразования строки в целое число используйте функцию atoi.

ПРИМЕЧАНИЕ. Получить информацию о стандартных функциях С можно по команде $info libc.

4.3.

/* Ex4_3.c Печать произвольного числа параметров */

#include <stdio.h>

main(int argc, char *argv[])

{ for ( ; *argv ; ++argv )

printf("%sn", *argv ) ;

}

 

 
 

Соглашение Linux о параметрах командной строки.Стандартные программы обычно придерживаются следующих соглашений. Все параметры командной строки делятся на опции, или флаги, ипрочие параметры. Опции модифицируют работу программы, в то время как прочие параметры служат для передачи входных данных. В свою очередь, опции могут быть двух видов:

- Короткие опции состоят из одного знака 'минус' и одного символа. Короткие опции легче набирать.

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

Обычно программы поддерживают обе формы опций, например, -h и --help.

 

Переменные окружения

В программе можно получить значение переменной окружения при помощи функции getenv из <stdlib.h>. Эта функция принимает имя переменной и…   Задание 5. Выполните следующие два примера, запишите в отчет текст примеров и результаты их тестирования.

5.1.

/* Ex5_1.c Печать переменных окружения */

#include <stdio.h>

extern char** environ;

int main ()

{

char** var;

for (var = environ; *var != NULL; ++var)

printf ("%sn", *var);

return 0;

}

5.2.Данный пример является частью коммуникационной программы. Имя сервера задается в переменной окружения SERVER_NAME. Если эта переменная не установлена, то будет использован сервер по умолчанию. Выполните эту программу для обоих вариантов запуска:

a) Переменная SERVER_NAME отсутствут в окружении;

b) Перед запуском программы экспортируйте в окружение переменную SERVER_NAME (см. лабораторную работу 1).

 

/* Ex5_2.c Доступ к переменной окружения */

#include <stdio.h>

#include <stdlib.h>

int main ()

{

char* server_name = getenv ("SERVER_NAME");

if (server_name == NULL)

/* Переменная окружения SERVER_NAME не установлена,

использовать значение по умолчанию */

server_name = "server.my-company.com";

printf ("accessing server %sn", server_name);

/* Далее - доступ к серверу... */

return 0;

}

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

Получить в программе текстовое сообщение об ошибке можно двумя способами: 1) При помощи функции strerror из <string.h>; функция принимает errno и… 2) При помощи функции perror из <stdio.h>; функция принимает строку, которую она выводит в качестве префикса…

Порядок выполнения лабораторной работы

1. Выполните задания 1-6.

2. Занесите в отчет описание заданий со всеми требуемыми пояснениями.

 

Требования

1. При подготовке к лабораторной работе (дома) выполните задания 2-6. Занесите в отчет тексты программ, пояснения и предполагаемые результаты выполнения.

2. Студент должен знать ответы на следующие вопросы:

 

Вопросы

2. Как создать программу из нескольких модулей? 3. Как добавить в программу библиотеку объектных модулей? 4. Как использовать утилиту Make для создания программ?