Основы работы с Unix
Для выполнения курсовой работы подходит любая версия Unix с установленным компилятором с языка C++, в том числе и эмулятор Cygwin для системы Windows. В последнем случае при инсталляции нужно открыть раздел Devel и изменить для строки “gcc: C, C++, Fortran compilers” режим установки на “Keep”.
При разработке исполняемых программ понадобится знание команд командной строки Windows. Приведем наиболее часто используемые команды.
man
Справка о команде.
Пример.
man cp
ls
Вывод содержимого каталога. Опция -l позволяет вывести более подробную инфпрмацию о содержимом каталога.
cd
Переход в другой каталог.
Примеры.
cd - переход в домашний каталог пользователя.
cd / - переход в корневой каталог.
cd /usr/local/bin - переход в указанный каталог.
cd .. / - переход в родительский каталог.
pwd
Вывод имени текущего каталога.
cp
Копирование файлов и каталогов.
Примеры.
cp file1 file2
cp file1 /archive
cp file1 /archive/newfile
cp file1 file2 /archive - файлы file1, file2 копируются в каталог /archive.
cp -R dir1 /dir2 - рекурсивное копирование каталогов: все содержимое dir1 копируется в новый каталог dir2, если dir2 существует, в нем создается новый каталог dir1.
mkdir
Создание каталога.
Пример.
mkdir dir1
mv
Переименование и перемещение файлов и каталогов.
Примеры.
mv file1 file2 - переименование файла.
mv /dir1 /dir2 - переименование каталога. Если dir2 существует и не пустой, переименования не происходит.
mv file1 /dir2 - перемещение.
mv file1 /dir2/abc - если abc – каталог, file1 перемещается в abc. Если abc не существует, file1 перемещается в dir2 под именем abc.
rm
Удаление файлов и каталогов.
Примеры.
rm file1 - удаление файла.
rm file1 file2 - удаление двух файлов.
rm -R dir1 - удаление каталога dir1 и всего, что в нем находится.
rmdir
Удаление каталогов. Эта команда удаляет лишь пустой каталог. Команда с опцией -p удаляет каталог с пустыми подкаталогами.
touch
Служит двум целям: созданию пустого файла и обновлению даты создания файла.
Пример.
touch file1
find
Поиск файла.
Пример.
find. –nane"lost*" - поиск файлов, имя которых начинается с подстроки “lost”. Поиск выполняется, начиная с текущего каталога. Если поиск нужно начать с корневого каталога, в команде ставится знак “/”.
Редактирование исходных файлов программы
Исходные файлы могут быть подготовлены в любом текстовом редакторе. При этом для символов кириллицы желательно использовать кодировку KOI-8.
Как правило, в любой Unix-системе присутствует текстовый редактор vi. Если за командой vi последует имя файла, файл откроется для редактирования. Если задать имя несуществующего файла, vi будет считать его новым файлом.
Сразу после запуска редактор находится в командном режиме. В этом режиме нажатия клавиш интерпретируются как команды редактору, а не как текст. Чтобы переключиться в режим ввода текста, необходимо нажать одну из клавиш: a, i или o.
Клавиша a означает append (добавить). В этом режиме вводимый текст будет вставлен после символа, на котором находится курсор.
Клавиша i означает insert (вставить). Вводимый текст будет вставлен перед символом, на котором находится курсор.
Клавиша o означает open (открыть).После строки, на которой находится курсор, в текст будет вставлена новая строка, и курсрор перейдет на новую строку. Есть еще команда O, которая добавляет пустую строку над текущей строкой.
Переход из режима ввода текста в командный режим выполняется клавишей Esc.
Команды редактирования текста
D - удаляет текст от позиции курсора до конца строки.
dd - удаляет текущую строку.
число dd - удаляет несколько строк, начиная с текущей.
r символ – заменяет символ в позиции курсора символом, указанным за r.
x - удаляет символ в позиции курсора и сдвигает следующие за ним символы влево.
~ - заменяет букву в позиции курсора той же буквой другого регистра.
J - объединяет текущую строку с предыдущей.
Операции над файлами
: w - сохраняет изменения в текущем файле.
: w имя_файла - сохраняет текст в файле с указанным именем.
: q - осуществляет выход из программы. Если имеются несохраненные изменения, редактор выдает сообщения об этом и программа не закрывается.
: q! - осуществляет выход из программы, даже если имеются несохраненные изменения. Изменения при этом теряются.
: e имя_файла – загружает заданный файл в редактор.
Копирование текста
Для копирования текста в буфер используется команда y. Наиболее часто используются следующие разновидности команды y.
yw - помещает в буфер символы от позиции курсора до конца слова.
y$- помещает в буфер текст от текущей позиции курсора до конца данной строки.
yy - помещает в буфер всю строку.
число yy - помещает в буфер несколько строк, начиная с текущей.
Для вырезания текста используется команда d.
Вставка из буфера в позицию курсора выполняется командой p.
3 Компиляция и запуск программы на C++
Для проверки работы компилятора g++ можно набрать простейшую программу на языке Си.
#include <stdio.h>
int main()
{
printf ("Hello");
}
Сохраним файл под именем a.cpp.
Компиляцию программы выполним командой
g++ a.cpp -o a.out.
Здесь опция –o определяет имя выходного исполняемого файла.
Запуск программы на выполнение выполним командой
./a.out.
Программа должна выдать приветствие Hello.
Файловые функции Unix
Для работы с файловой системой используются следующие функции Unix [2]:
int open (const char* path, int acces_mode, int permission) -прототип функции находится в fcntl.h, path – путь, permission обычно 0.
Флаги режима доступа: O_RDONLY – для чтения, O_WRONLY – для записи, O_RDWR – для чтения и записи.
Существует также модификатор доступа, например O_CREAT – если файл не существует, он создается.
Функция возвращает дескриптор файла или -1 при ошибке.
int creat (const char* path, int acces_mode) – упрощенный вариант создания файла.
long read (int fdesc, void* buf, int size) – читается блок данных из файла.
Прототип находится в unistd.h, fdesc – файловый дескриптор, buf – адрес буфера, содержащего прочитанные данные, size – количество байтов, которое нужно прочитать из файла.
Функция возвращает количество прочитанных байтов.
long write (int fdesc, const void* buf, int size) – записывает блок данных в файл.
Прототип - в unistd.h, параметры как в read.
Функция возвращает количество байтов, успешно записанных в файл.
long lseek (int fdesc, long pos, int whence) – изменяет текущую позицию указателя чтения-записи в файле.
Прототип - в unistd.h, pos – задает смещение в байтах, которое должно быть прибавлено к базовому адресу для получения нового смещения. Параметр whence задает базовый адрес:
SEEK_CUR – текущий адрес указателя в файле;
SEEK_SET – начало файла;
SEEK_END – конец файла.
Функция возвращает смещение.