Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈ распрСдСлСнноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 115

Автор Π₯ьюз ΠšΠ°ΠΌΠ΅Ρ€ΠΎΠ½

//...

int Fd[2];

Pipe(Fd);

ifstream IPipe(Fd[0]) ;

ofstream OPipe(Fd[1]) ;

Π±ΡƒΠ΄ΡƒΡ‚ созданы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ IPipe Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Ρ€ΠΎΠ»ΡŒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ OPipeβ€” Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ПослС создания эти ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ выполняСмыми процСссами с использованиСм ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎ Π³ ΠΎ прСдставлСния ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² вставки (<<) ΠΈ извлСчСния (>>). Для Π‘++-срСд, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ attach(), дСскриптор Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ классов ifstream, ofstream ΠΈΠ»ΠΈ fstream, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис.

// Листинг 11.20. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° ΠΈ использованиС

//Β Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ attach()

int Fd[2];

ofstream OPipe;

//.. .

pipe(Fd);

//.. .

OPipe.attach(Fd[1]);

//.. .

OPipe << Value << endl;

Π’Π°ΠΊΠΎΠΉ способ использования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ сущСствованиС сыновнСго процСсса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ 11.1 для создания Π΄Π²ΡƒΡ… процСссов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ fork-инструкция. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс отправляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сыновнСму процСссу с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ iostreams-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°.

// ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 11.1

1 Β  #include <unistd.h>

2 Β  #include <iostream.h>

3 Β  #include <fstream.h>

4 Β  #include <math.h>

5 Β  #include <sys/wait.h> 6

7 8 9

10 Β  int main(int argc, char *argv[])

11 Β  {

12

13 Β  int Fd[2];

14 Β  int Pid;

15 Β  float Value;

16 Β  int Status;

17 Β  if(pipe(Fd) != 0) {

18 Β  cerr Β« «Ошибка ΠΏΡ€ΠΈ создании ΠΊΠ°Π½Π°Π»Π° " Β« endl;

19 Β  exit(l);

20 Β  }

21 Β  Pid = fork();

22 Β  if(Pid == 0){

23 Β  ifstream IPipe(Fd[0]);

24 Β  IPipe Β» Value;

25 Β  cout Β« Β«ΠžΡ‚ процСсса-родитСля ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β» << Value << endl;

26 Β  IPipe.close();

27 Β  }

28 Β  else{

29 Β  ofstream OPipe(Fd[l]);

30 Β  OPipe Β« M_PI Β« endl;

31 Β  wait(&Status);

32 Β  OPipe.close();

33

34 }

35

36 }

ВспомнитС, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ fork(), ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ сыновнСму процСссу. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ 11.1 ΠΊΠ°Π½Π°Π» создаСтся ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ инструкции, располоТСнной Π½Π° строкС 17. А ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ инструкции, располоТСнной Π½Π° строкС 29, Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π» для записи. Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор Fd[1] ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉΒ» ΠΊΠΎΠ½Π΅Ρ† ΠΊΠ°Π½Π°Π»Π°. К этому ΠΊΠΎΠ½Ρ†Ρƒ ΠΊΠ°Π½Π°Π»Π° (Π±Π»Π°Π³ΠΎ Π΄ аря Π²Ρ‹Π·ΠΎΠ²Ρƒ конструктора Π½Π° строкС 29) присоСдиняСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса ofstream. К Β«ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒΒ» ΠΊΠΎΠ½Ρ†Ρƒ ΠΊΠ°Π½Π°Π»Π° присоСдиняСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса ifstream (строка 23). Π‘Ρ‹Π½ΠΎΠ²Π½ΠΈΠΉ процСсс ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°Π½Π°Π» для чтСния ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ дСскриптору Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ вмСстС со срСдой родитСля наслСлуСт ΠΈ дСскрипторы Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π»ΡŽΠ±Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ Π² срСдС родитСля, Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ ΠΈ Π² срСдС наслСдника, Ссли ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Π» систСма Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ явныС инструкции, основанныС Π½Π° систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fcntl. Помимо наслСдования ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈΡ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ пороТдСния сыновнСго процСсса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сыновний процСсс Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» доступ ΠΊ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ процСссС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ сыновнСго Ρ‚Π°ΠΊΠΆΠ΅ смСщаСтся. Π’ этом случаС ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ΅ прСдставлСниС Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ создавал интСрфСйсный класс. ΠŸΡ€ΠΎΡΡ‚ΠΎ присоСдинив Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы ΠΊΠ°Π½Π°Π»Π° ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ классов ofstream ΠΈ ifstream, ΠΌΡ‹ смоТСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ вставки (<<) ΠΈ извлСчСния (Β»). Аналогично любой класс, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ">>" ΠΈ "<<", ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ вставки Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠ°Π½Π°Π» ΠΈ извлСчСния ΠΈΡ… ΠΎΡ‚Ρ‚ΡƒΠ΄Π° Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ 11.1 Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс ΠΏΠΎΠΌΠ΅ Ρ‰ Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ M_PI Π² ΠΊΠ°Π½Π°Π» (строка 30), Π° сыновний процСсс ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ это Π· Π½ Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ">>" (строка24). Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΏΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΈ компиляции этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 11.1Β».

f

(ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 11.1

Имя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹program11-1.cc

Оп и саниС

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 11.1 дСмонстрируСт использованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° c использованиСм Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… систСмных ΠΊΠ°Π½Π°Π»ΠΎΠ². Для создания Π΄Π²ΡƒΡ… процСссов, |ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ собой с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² вставки (Β«) ΠΈ ΠΈΠ·-!влСчСния (Β»), ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fork().

Π’Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ

<wait.h>,<unistd.h>, <iostream.h>, <fstream.h>, <math.h>.

Инс Ρ‚ Ρ€ΡƒΠΊΡ†ΠΈ ΠΈ ΠΏΠΎ компиляции ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

C++ -ΠΎ program11-1 program11-1.cc

Π‘Ρ€Π΅Π΄Π° для Ρ‚ Сс Ρ‚ΠΈ Ρ€ΠΎΠ²Π° Π½ΠΈ я

Solaris 8, SuSE Linux 7.1.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΏΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ

./program11-1

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ gnu Π‘++ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ Π΄ Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ attach (). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎ Π΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ ля связи Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… Π΄ Сскрипторов с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌ ΠΈ классов ifstream ΠΈ ofstream (листинг 11.21).

// Листинг 11.21. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов ΠΊ

//Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса ofstream

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

int Fd[2];

ofstream Out;

pipe(Fd);

Out.attach(Fd[l]); // - . .

// ΠœΠ΅ΠΆΠΏΡ€ΠΎΡ†Π΅ΡΡΠ½ΠΎΠ΅ взаимодСйствиС. //. . .

Out.close( );

}

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Out.attach(Fd[1] ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса ofstream связываСтся с Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ дСскриптором ΠΊΠ°Π½Π°Π»Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π›ΡŽΠ±Π°Ρ информация, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π° Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Out, Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² ΠΊΠ°Π½Π°Π». ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² извлСчСния ΠΈ вставки для выполнСния автоматичСского прСобразования Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° являСтся основным достоинством использования сСмСйства fstream -классов Π² сочСтании с канальной связью. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ срСдства извлСчСния ΠΈ вставки избавляСт программиста ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… трудностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ мСсто ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ² связи. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ вмСсто явного пСрСчислСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, записываСмых Π² ΠΊΠ°Π½Π°Π» ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… ΠΈΠ· Π½Π΅Π³ΠΎ, ΠΏΡ€ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ доступом для чтСния-записи ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ количСство ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°Π½Π°Π» элСмСнтов, Ρ‡Ρ‚ΠΎ сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ вСсь процСсс. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ «сниТСниС сСбСстоимости» Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π»ΡƒΠ΅ΠΌΡ‹ΠΉ Π½Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ состоит Π² использовании Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Π² основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ «раздСляй ΠΈ властвуй». Π“Π»Π°Π²Π½ΠΎΠ΅ β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°ΡΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Β«ΠΏΠΎ своим мСстам» β€” ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ станСт Π±ΠΎΠ»Π΅Π΅ простым. НапримСр, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ°Π½Π°Π» связываСтся с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ классов ofstream ΠΈ ifstream, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ…Ρ€Π°Π½ΠΈΠΌΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎ Π½ Π΅Π½Ρ‚ΠΎΠΌ ios, для опрСдСлСния состояния ΠΊΠ°Π½Π°Π»Π°. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ прСобразования iostreams-классов ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для выполнСния автоматичСского прСобразования Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½Π΅Ρ† ΠΊΠ°Π½Π°Π»Π° ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΡ‹Ρ… ΠΈΠ· Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ†Π°. ИспользованиС ΠΊΠ°Π½Π°Π»ΠΎΠ² вмСстС с iostream-классами Ρ‚Π°ΠΊΠΆΠ΅ позволяСт программисту ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ стандартныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ с использованиСм мСТпроцСссного взаимодСйствия Π½Π° основС ΠΊΠ°Π½Π°Π»Π°. На рис. 11.9 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π²Π·Π°ΠΈΠΌΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ классов ifstream, ofstream, ΠΊΠ°Π½Π°Π»ΠΎΠΌ ΠΈ срСдствами вставки ΠΈ извлСчСния ΠΏΡ€ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ мСТпроцСссного взаимодСйствия.