- •050201 «Системная инженерия»
- •1. Цель работы
- •2. Постановка задачи
- •3. Краткие теоретические сведения
- •3.1. Компиляция программ с помощью gcc
- •3.2. Анализ параметров вызывающей командной строки
- •3.3. Поразрядные операции
- •4. Пример программы
- •4.1. Функция упаковки
- •4.2. 4.2. Функция распаковки
- •Приложение а (справочное) Текст программы
3. Краткие теоретические сведения
3.1. Компиляция программ с помощью gcc
Программа на языке С — это один или несколько текстовых файлов, которые называются исходными. Чтобы запустить программу, ее исходные файлы необходимо скомпилировать, т.е. создать исполняемый файл, содержащий в себе инструкции процессора и пригодный для запуска на компьютере.
При выполнении лабораторных работ мы будем использовать компилятор GNU Compiler Collection (GCC).
GCC - основной компилятор проекта GNU. Он поддерживает набор всех наиболее используемых языков программирования и обеспечивает перенос программ на десятки аппаратных платформ. Все свободно распространяемое программное обеспечение, включая и компиляторы, на том или ином уровне основывается на GCC.
Для того чтобы GCC нормально работал, необходимо, чтобы исходные файлы, содержащие текст программы, имели имена, заканчивающиеся на .c.
В простейшем случае откомпилировать программу можно, запуская компилятор командой
gcc имя_исходного_файла
Если программа была написана без ошибок, то компилятор создаст исполняемый файл с именем a.out. Изменить имя создаваемого исполняемого файла можно, задав его с помощью опции -o:
gcc имя_исходного_файла -o имя_исполняемого_файла
Например, если программа состоит из одного исходного файла hello.c, то для его компиляции компилятором GNU С достаточно выполнить команду:
$ gcc hello.c -o hello
В результате получится файл hello, имя которого указано в опции -o. Этот файл является исполняемым и его можно запускать при помощи команды:
$ ./hello
Пара символов ./ перед hello означает «искать исполняемый файл hello в текущей директории».
Компилятор gcc имеет несколько сотен возможных опций. Подробную информацию об опциях компилятора gcc можно получить, если набрать
$ man gcc
или
$ info gcc
Чтобы создать исполняемый под Linux файл программы, Вам предварительно необходимо скопировать файл с текстом программы в папку /home/user. Вы имеете право запускать на исполнение файлы, расположенные в этой папке. Для передачи данных между основным компьютером и виртуальной машиной воспользуйтесь общей папкой share*.
Для редактирования текста программы можно воспользоваться, например, текстовым редактором gedit или встроенным редактором файлового менеджера Midnight Commander (mc).
Чтобы открыть текст с помощью gedit можно, например, набрать в командной строке
gedit имя_файла
Можно открыть в «Обозревателе файлов» Nautilus рабочую папку (например, дважды щелкнув по иконке «Домашняя папка пользователя user») и двойным щелчком открыть файл с текстом программы. Если файл имеет расширение .с, в gedit будет автоматически включена подсветка синтаксиса. В противном случае нужно выбрать пункт меню «Вид»-> «Режим подсветки синтаксиса»-> «Исходные тексты»-> «С».
Чтобы запустить файловый менеджер Midnight Commander наберите в командной строке
mc
Далее выберите текстовый файл для редактирования и нажмите F4.
3.2. Анализ параметров вызывающей командной строки
Если исполняемый файл, полученный в результате компиляции и компоновки программы, написанной на языке С, вызывается на выполнение вводом с терминала его имени, то параметры этой командной строки могут быть переданы указанной программе в качестве аргументов функции main():
int main(int argc, char *argv[]) {…}
При этом значение переменной argc равно числу параметров введенной командной строки, а аргумент argv представляет собой массив указателей на строки, являющиеся параметрами введенной командной строки []. Первая строка – argv[0] – это имя программы. Строка argv[i], i=1,…, argc-1 представляет собой i-й аргумент программы.
Следующая небольшая программа выводит параметры командной строки, с помощью которой она была вызвана на выполнение. Фактически, эта программа представляет собой простейшую версию команды ОС Linux echo.
#include <stdio.h>
int main(int argc, char *argv[])
{
int i;
for (i=1; i<argc; i++)
printf("%s%c", argv[i], (i<argc-1)?’ ’:’\n’);
return 0;
}
В соответствии с принятыми в ОС Linux соглашениями параметры командной строки, начинающиеся с символа “-“ , являются флагами вызываемой на выполнение команды. Если следовать этим правилам при разработке программ, то, очевидно, разрабатываемые программы должны осуществлять разбор командной строки с целью распознавания флагов и аргументов команды.
