Программирование в стандарте POSIX


         

Выполнение операций над рабочим файлом


#include
#include
#include
#include
/* Программа выполняет обработку */
/* с осторожным замещением */
/* основного файла рабочим */
#define MAIN_FILE "/home/galat/garb/temp/mfile"
#define OLD_FILE "/home/galat/garb/temp/ofile"
#define WORK_FILE "/home/galat/garb/temp/wfile"
int main (void) {
/* Необходимые описания */
/* . . . */
int work_success = 1;
/* Выполнение операций над рабочим файлом */
/* . . . */
/* В случае неудачи выдадим диагностическое сообщение и удалим рабочий файл */
if (! work_success) {
fprintf (stderr, "\nНеудачное завершение операций над рабочим файлом %s\n", WORK_FILE);
unlink (WORK_FILE);
return (-1);
}
/* Установим режим доступа к рабочему файлу, */
/* подходящие для последующего использования */
/* Пусть, например, это будет доступ для всех */
/* только на чтение */
chmod (WORK_FILE, S_IRUSR | S_IRGRP | S_IROTH);
/* Удалим ранее сохраненную старую версию основного файла */
unlink (OLD_FILE);
/* Сохраним текущую версию основного файла */
if (link (MAIN_FILE, OLD_FILE)) {
perror ("Не удалось сохранить текущую версию основного файла");
return (-1);
}
/* Удалим текущую версию основного файла */
unlink (MAIN_FILE);
/* Сделаем рабочий файл основным */
if (link (WORK_FILE, MAIN_FILE)) {
perror ("Не удалось сделать рабочий файл основным");
/* Восстановим основной файл */
link (OLD_FILE, MAIN_FILE);
return (-1);
}
/* Удалим рабочий файл */
unlink (WORK_FILE);
return 0;
}

Содержание  Назад  Вперед