Смекни!
smekni.com

Циклический обмен содержимым файлов (стр. 2 из 2)

Быстрое выделение оперативной памяти.

Функции malloc и free предоставляют простой универсальный механизм выделения и освобождения памяти, работающий значительно быстрее пакета malloc(3C). Описываемые функции находятся в библиотеке malloc и подключаются при использовании опции -lmalloc команд cc(1) и ld(1).

Функция malloc возвращает указатель на блок размером не менее size байт, который можно использовать в произвольных целях.

Аргументом функции free является указатель на блок, предварительно выделенный с помощью malloc; после выполнения free блок может быть выделен вновь, а хранящаяся в нем информация теряется.

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

Каждая из функций выделения возвращает указатель на область памяти, подходящую (после возможного преобразования типа указателя) для хранения произвольных данных.

Структура определена во включаемом файле <malloc.h>.

3. Листинг программы

Программа состоит из главного модуля rgr.c, который использует подключаемый файл с функцией обмена file_obmen.h.

Файл rgr.c:

#include <stdlib.h>

#include <sys/wait.h>

#include <stdio.h>

#include "file_obmen.h"

int main()

{

char *a4 = "4", *a3 = "3", *a2 = "2", *a1 = "1";

int p1, p2, p3, p4;

printf ("Cozdanie vseh processov:&bsol;n");

printf ("&bsol;n");

printf ("Cozdanie processa 4 &bsol;n");

printf ("Porozhdenie processa 1 processom 4&bsol;n");

printf ("Porozhdenie processa 2 processom 1&bsol;n");

printf ("Porozhdenie processa 3 processom 2&bsol;n");

p4 = fork();

if(p4)

{

p1 = fork();

exit(0);

}

if(p1)

{

file_obmen(a4, a3);

printf("Write file 4 >>> file 3&bsol;n");

p2 = fork();

}

sleep(1);

if(p2)

{

file_obmen(a3, a2);

printf("Write file 3 >>> file 2&bsol;n");

p3 = fork();

exit(0);

}

sleep(1);

if(p3)

{

file_obmen(a2, a1);

printf("Write file 2 >>> file 1&bsol;n");

printf ("&bsol;n");

printf ("Obmen zachonchen!&bsol;n");

exit(0);

}

sleep(1);

exit(0);

}

Файл file_obmen.h:

void file_obmen(char *a4, char *a3)

{

FILE *f[3];

char *c=(char*)malloc(sizeof(char));

int p1, p2;

f[1] = fopen(a3, "rb");

f[0] = fopen(a4, "rb");

f[2] = fopen("buf", "wb");

while(!feof(f[0]))

{

c[0] = fgetc(f[0]);

fputc(c[0],f[2]);

}

fclose(f[0]);

f[0] = fopen(a4, "wb");

while(!feof(f[1]))

{

c[0] = fgetc(f[1]);

fputc(c[0], f[0]);

}

fclose(f[0]);

fclose(f[2]);

f[2] = fopen("buf", "rb");

f[1] = fopen(a3, "wb");

while(!feof(f[2]))

{

c[0] = fgetc(f[2]);

fputc(c[0], f[1]);

}

fclose(f[2]);

fclose(f[1]);

}

4. Тестирование

Результат выполнения программы в консоле:

Содержимое файлов при первом проходе:


Содержимое файлов при втором проходе:

Программа проверена и работает корректно.

Выводы

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

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

Литература

1. Дж. Такет (мл.), С.Барнет. Использование Linux/ Специальное издание.: 5-е изд.: Пер. с англ.: Уч.пос. – М.: Издательский дом «Вильямс», 2000. – 784 с.

2. Максимальная защита Linux. Искусство настройки.: Пер. с англ./ под.ред. Дж.Рея – СПб.: ООО «ДиаСофтЮП», 2002. – 752 с.

3. Браун С. Операционная система UNIX - М.: Мир, 1986 - 463 с.