Модуль 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!