Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
!1-25.doc
Скачиваний:
7
Добавлен:
28.10.2018
Размер:
2.62 Mб
Скачать

3.4 Написать 2 конс. Программы Master и Slave. Master запускает Slave и передает ей через ком. Строку дескриптор своего процесса. Slave ожидает окончания работы Master и выдает сообщение.

// Master.exe

#include "iostream.h"

#include "string.h"

#include "windows.h"

#include "stdio.h"

void main(int argc,char * argv[])

{

char cmd[100];

if(argc!=1) strcpy(cmd,argv[1]);

else strcpy(cmd,"slave.exe");

int pid=GetCurrentProcessId();

sprintf(cmd+strlen(cmd)," %d",pid);

cout<<"Master:Starting, PID="<<pid<<"\n";

cout.flush();

STARTUPINFO si;

PROCESS_INFORMATION pi;

ZeroMemory(&si,sizeof(si));

si.cb=sizeof(si);

si.wShowWindow=SW_HIDE;

si.dwFlags=STARTF_USESHOWWINDOW;

if( !CreateProcess(NULL,cmd,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi) )

{ cout<<"Master:Slave not loaded\n"; cout.flush();

}

cout<<"Master:Sleeping\n";

cout.flush();

Sleep(5000);

cout<<"Master:Exiting\n"; cout.flush();

}

//------------------------------------------------------------------------------------------------------------------------------------------

//Slave.exe

#include "iostream.h"

#include "windows.h"

#include "stdio.h"

void main(int argc,char * argv[])

{

cout<<"Slave:Started\n"; cout.flush();

if(argc!=2)

{ cout<<"Slave:Load Master.exe first\n";

cout<<"Slave:Finishing\n";

exit(1);

}

int pid=atoi(argv[1]);

HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|SYNCHRONIZE,FALSE,pid);

if(!hProcess)

{ cout<<"Slave:Open process error\n"; cout.flush();

}

else

{ cout<<"Slave:Waiting for master finishing\n";

cout.flush();

if(WaitForSingleObject(hProcess,INFINITE)==STATUS_WAIT_0)

{ cout<<"Slave:Master finished\n"; cout.flush();

}

else

{ cout<<"Slave:Unknown error\n"; cout.flush();

}

}

cout<<"Slave:Finishing\n";

}

3.5

идентификаторы сетей 107.16.0.0 и 107.32.0.0

маска подсети 255.240.0.0

две подсети

по маске определяем шаг подсетей

24010 =111100002

24=16- шаг подсетей

от 107.16.0.1 до 107.31.255.254

от 107.32.0.1 до 107.47.255.254

идентификаторы сетей 190.1.16.0 , 190.1.32.0, 190.1.48.0, 190.1.64.0

маска подсети 255.255.248.0

четыре подсети

по маске определяем шаг подсетей

24810 =111110002

23=8 - шаг подсетей

от 190.1.16.1 до 190.1.23.254

от 190.1.32.1 до 190.1.39.254

от 190.1.48.1 до 190.1.55.254

от 190.1.64.1 до 190.1.71.254

4.1 Текстовые файлы в С++.

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

Пакет классов С++ работает с файловым вводом/выводом во многом так же, как он делает это со стандартным вводом/выводом. Чтобы записать данные в файл, необходимо создать потоковый объект и воспользоваться такими методами класса ostream, как операция вставки << или функция write(). Для чтения файла создается потоковый объект и применяются такие методы класса istream, как операция извлечения >> или функция get(). Однако файлы требуют более высокого уровня управления, чем стандартные потоки ввода/вывода. Например, новый открытый файл необходимо поставить в соответствие какому-либо потоку. Файлы можно открывать в режиме только для чтения, только для записи и в режиме чтения/записи. При записи в файл может возникнуть необходимость создать новый файл, заменить старый или добавить данные к старому файлу. Существует также возможность перемещаться по файлу в разных направлениях. Чтобы помочь справиться с этими задачами, в С++ определены несколько классов в заголовочном файле fstream.h, включая класс ifstream.h для выполнения файлового ввода и класс ofstream.h – для файлового вывода. С++ также определяет класс fstream.h для одновременного файлового ввода/вывода. Эти классы являются производными от классов в заголовочном файле iostream.h, поэтому объекты этих новых классов могут использовать те методы

Предположим, что программе необходимо записать информацию в файл. Для этого требуется выполнить следующее:1) Создать объект класса ofstream для управления потоком вывода. 2)Поставить этот объект в соответствие определенному файлу. 3)Использовать объект так же, как использовался объект cout; единственная разница заключается в том, что информация выводится в файл, а не на экран.

Для выполнения этой задачи начнем с включения заголовочного файла fstream.h. При включении этого файла автоматически включается файл iostream.h, поэтому iostream.h не нужно включать явно. Затем необходимо объявить объект класса ofstream:

ofstream fout; // создать объект класса ofstream с именем fout

Имя объекта может быть любым допустимым именем С++, например, fout, outFile, cgate и т.д.

Затем необходимо поставить в соответствие объекту определенный файл. Это можно сделать, воспользовавшись методом open(). Предположим, что необходимо открыть для записи файл, например, “file.txt”. Для этого нужно сделать следующее:

fout.open(“file.txt”); // поставить в соответствие объекту fout файл “file.txt”

Два этих этапа (создание объекта и его ассоциация с файлом) можно объединить в одном операторе, воспользовавшись другим конструктором:

ofstream fout (“file.txt”); // создать объект fout и поставить ему в соответствие файл “file.txt”

После этого объект fout (или объект с любым другим именем) можно использовать точно так же, как и объект cout. Например, если требуется записать слова New String в файл, то для этого необходимо выполнить следующее:

fout << “New String”;

В самом деле, поскольку класс ostream является базовым для класса ofstream, можно использовать методы класса ostream, включая различные определения операций вставки, а также методы и манипуляторы форматирования. Класс ofstream работает с буферизованным выводом, поэтому программа выделяет место для буфера вывода при создании такого объекта класса ofstream, как fout. Если создаются два объекта класса ofstream, то программа создает два буфера – отдельно для каждого объекта. Объект класса ofstream наподобие fout считывает побайтно вывод, сгенерированный программой. Затем, когда буфер заполняется, содержимое буфера целиком передается в файл назначения.

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

Замечание. При открытии существующего файла для вывода (записи) в режиме, заданном по умолчанию, автоматически урезается его размер до нуля и удаляется его предыдущее содержимое.

Требования к чтению файла очень похожи на требования к записи:

  1. Создать объект класса ifstream для управления потоком ввода. 2.Поставить этот объект в соответствие определенному файлу. 3.Использовать объект так же, как объект cin.

Этапы выполнения этих действий совпадают с этапами записи файла. Сначала конечно же необходимо включить заголовочный файл fstream.h, затем объявить объект класса ifstream и поставить ему в соответствие файл. Это можно сделать с помощью двух операторов или одного:

ifstream fin; // два оператора // создать объект класса ifstream с именем fin

fin.open(“example.txt”); // открыть файл, например, example.txt для чтения

ifstream fin(“example.txt”); // один оператор // создать объект fin и поставить ему в соответствие файл example.txt

Теперь объект fin можно использовать так же, как объект cin. Например, можно сделать следующее:

char ch;

fin >> ch; // считать символ из файла example.txt

char buf [80];

fin >> buf; // считать слово из файла

fin.getline(buf, 80); // считать строку из файла

Ввод, как и вывод, буферизован, поэтому при создании объекта класса ifstream наподобие fin создается буфер ввода, управляемый этим объектом.

Связь с файлом прекращается автоматически, если истекает срок действия объектов потока ввода/вывода, например, по окончании выполнения программы. Кроме того, связь с файлом можно прервать явно, воспользовавшись методом close():

fout.close(); // прервать связь с файлом для вывода

fin.close(); // прервать связь с файлом для ввода