Модуль 2. Вывод описания ошибки



Рассмотрим код функции, позволяющей узнать описание последней ошибки.

#include <iostream>

#include <errno.h>

#include <string.h>

#include "err1.h"

using namespace std;

void err1()

{

cout<<"Error: "<<strerror(errno)<<"\n"; return;

}

Структура модуля вполне классическая, сначала идёт подключение необходимых для работы функций библиотек, потом уже описание самой функции.

В данном модуле нет ничего особенного, но стоит отдельно рассмотреть

Строку cout<<"Error:"<<strerror(errno)<<"\n";

Она выводит сообщение с ошибкой, которое получает от функции strerror. Данная функция по номеру ошибки возвращает строковое описание ошибки. А номер ошибки она получает из функции errno, которая возвращает номер последней ошибки.

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

 

 

Модуль 3. Открытие файла

# include < cstdlib >

#include <iostream>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include "err1.h"

#include "of.h"

using namespace std;

void openfile(char *path)

{

int fd;

if(fd=open(path,О_CREAT, S_IRWXU)==-1)

err1();

else cout<<"File opening/creation succesfull\n";

}

Обратим внимание, что оператор open в качестве параметров использует переменную path (ту самую, которую мы задавали в основном модуле), а также так называемые флаги (О_ CREAT , S _ IRWXU). Последние определяют права, при которых открыт файл, имя которого задано переменной path. Подробнее про флаги, а также права, с которыми может быть открыт файл, следует обязательно прочитать где-нибудь. Например, в сети интернет или книге под названием типа "Программирование на Си для Linux».

Стоит также сказать пару слов про подключаемые библиотеки. Нас интересуют

# include " err 1. h "

# include " of . h "

Первая строчка подключает заголовочный файл процедуры вывода ошибки, чтобы мы могли использовать её. Вторая же содержит прототип процедуры, которую мы описываем. Подробная информация про заголовочные файлы находится в Приложении 2.

Рассмотрим теперь саму процедуру открытия файла. Наибольший интерес вызывает строчка

if ( fd = open ( p а th , О_ CREAT , S _ IRWXU )==-1)

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

С помощью функции open происходит попытка открытия файла. В данном случае используется связка флагов О_ CREAT , S _ IRWXU, которая указывает функции, что, в случае, если файл не обнаружен, то необходимо его создать (первый флаг). Далее этому файлу присваиваются права доступа: для записи, для чтения. Далее функция open передаёт значение в переменную fd, так же происходит проверка на ошибку (если функция вернула значение
-1, значит произошла ошибка). При этом вызывается разработанная нами процедура err 1.

 

 

Модуль 4. Удаление файла

 

# include < cstdlib >

#include <unistd.h>

#inciude <iostream>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include "df.h"

#include "err1.h"

using namespace std;

void delfile(char *path)

{

if(unlink(path)==-1)

err1();

else cout<<"File deleting succesfull";}

Данная процедура должна удалять файл. Делает она это, большей частью, с помощью функции unlink.

unlink удаляет имя из файловой системы. Если это имя было последней ссылкой на файл и больше нет процессов, которые держат этот файл открытым, данный файл удаляется и место, которое он занимает освобождается для дальнейшего использования.

Если имя было последней ссылкой на файл, но какие-либо процессы всё ещё держат этот файл открытым, файл будет оставлен, пока последний файловый дескриптор, указывающий на него, не будет закрыт.

Если функция завершилась успешно, то она возвращает 0, в противном случае -1.

 

 


Дата добавления: 2019-03-09; просмотров: 302; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!