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

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

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

47Β }

48Β else{

49Β execl("./programll-2bΒ»,Β«programll-2bΒ»,NULL);

50Β } 51

52Β return(0);

53Β }

Π’ строках 21 ΠΈ 25 систСмнал функция setenv () ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов сыновнСму процСссу. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ сыновний процСсс наслСлуСт срСду Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ процСсса. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setenv (). Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ устанавливаСм ΠΈΡ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Fdin=filedesc; Fdout=filedesc;

Π‘Ρ‹Π½ΠΎΠ²Π½ΠΈΠΉ процСсс Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ систСмный Π²Ρ‹Π·ΠΎΠ² getenv( ) для считывания Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Fdin ΠΈ Fdout. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Fdin Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Β«ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ†Β» ΠΊΠ°Π½Π°Π»Π° для сыновнСго процСсса, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Fdout β€” Β«Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉΒ». ИспользованиС систСмных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ setenv () ΠΈ getenv() обСспСчиваСт ΠΏΡ€ΠΎΡΠ³ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ мСТпроцСссного взаимодСйствия (interprocess communication β€” IPC) ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΈ сыновним процСссами. ΠšΠ°Π½Π°Π»Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ инструкций, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π² строкС 14. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс присоСдиняСтся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ†Ρƒ ΠΊΠ°Π½Π°Π»Π° для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° attach() (строка29). ПослС присоСдинСния Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Π΅ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ OPipe Ρ‚ΠΈΠΏΠ° ofstream, Π±ΡƒΠ΄ΡƒΡ‚ записаны Π² ΠΊΠ°Π½Π°Π». Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° ostream_iterator ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΠ³Ρƒ OPipe ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ инструкции (строка 30):

ostream_iterator<float> OPtr(OPipe,"\nΒ»);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ OPtr ссылаСтся Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ OPipe. ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΡ€Ρ†ΠΈΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π² ΠΊΠ°Π½Π°Π» Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ "\nΒ». Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° OPtr ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΊΠ°Π½Π°Π» любоС количСство float -Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈ этом ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ с ΠΊΠ°Π½Π°Π»ΠΎΠΌ нСсколько ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Но Π² этом случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° Β«ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΒ» ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°Π½Π°Π»Π° Π΄Π°Π½Π½Ρ‹Π΅ извлСкались с использованиСм ΠΈΡ‚Π΅ Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π»ΡƒΡŽΡ‰Π΅ΠΉ инструкции ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 11.2 Π² ΠΊΠ°Π½Π°Π» сначала помСщаСтся количСство элСмСнтов, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅: OPipe Β« X.size() Β« endl;

Π‘Π°ΠΌΠΈ элСмСнты ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с использованиСм ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· стандартных Π‘++-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²:

copy(X.begin() ,X.end() ,OPtr) ;

Алгоритм copy () ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ содСрТимоС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, связанный с ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. Π—Π΄Π΅ΡΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ OPtr. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ OPtr связан с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ OPipe, поэтому ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° copy () (Β«ΡƒΠΌΠ΅ΡΡ‚ΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡΒ» Π² ΠΎΠ΄Π½ΠΎΠΉ строкС ΠΊΠΎΠ΄Π°) Π² ΠΊΠ°Π½Π°Π» пСрСписываСтся всС содСрТимоС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования стандартных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ частями срСд ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ распрСдСлСнного программирования. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ copy () пСрСсылаСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ (ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ адрСсного пространства Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅). Π­Ρ‚ΠΈ процСссы Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ copy () Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. ΠœΡ‹ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π΅ΠΌ Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, Ссли Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ‚ΡŒ ΠΊΠ°ΠΊΠ°Π»-Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ»ΠΈ распрСдСлСнной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Сю Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’Π΅Π΄ΡŒ мСТпроцСссноС взаимодСйствиС β€” это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых слоТных Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ распрСдСлСнного программирования. Π‘++-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° классов iostreamS ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° ostream_iterator ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ слоТности Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ИспользованиС манипулятора flush (Π² строкС 33) Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΊΠ°Π½Π°Π»Ρƒ.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ 11.2.1 сыновний процСсс сначала ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… ΠΎΡ‚ ΠΊΠ°Π½Π°Π»Π° (Π² строкС 36), Π° Π·Π°Ρ‚Π΅ΠΌ для считывания самих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ IPipe класса istream.

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

11Β class multiplier{

12Β float X;

13Β public:

14Β multiplier(float Value) { X = Value;}

15Β float &operator()(float Y) { X = (X * Y);return(X);}

16Β }; 17

18

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

20Β {

21Β char Value[50] ;

22Β int Fd[2] ;

23Β float Data;

24Β vector<float> X;

25Β int NumElements;

26Β multiplier N(12.2);

27Β strcpy(Value,getenv(Β«FdinΒ»));

28Β Fd[0] = atoi(Value);

29Β strcpy(Value,getenv(Β«FdoutΒ»));

30Β Fd[l] = atoi(Value);

31Β ifstream IPipe;

32Β ofstream OPipe;

33Β IPipe.attach(Fd[0]) ;

34Β OPipe.attach(Fd[l]) ;

35Β ostream_iterator<float> OPtr(OPipe,"\nΒ»);

36Β IPipe Β» NumElements;

37Β for(int N = 0;N < NumElements;N++)

38Β {

39Β IPipe Β» Data;

40Β X.push_back(Data);

41Β }

42Β OPipe Β« X.size() Β« endl;

43Β transform(X.begin(),X.end(),OPtr,N);

44Β OPipe Β« flush;

45Β return(0); 46

47 }

Π‘Ρ‹Π½ΠΎΠ²Π½ΠΈΠΉ процСсс считываСт элСмСнты Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°, ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΈΡ… Π² Π²Π΅ΠΊΡ‚ΠΎΡ€, Π°Π·Π°Ρ‚Π΅ΠΌ выполняСт матСматичСскиС прСобразования Π½Π°Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ элСмСнтом Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, послС Ρ‡Π΅Π³ΠΎ отправляСт ΠΈΡ… Π½Π°Π·Π°Π΄ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ процСссу. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ прСобразования (строка43) Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ с использованиСм стандартного Π‘++-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° transform ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса multiplier. Алгоритм transform примСняСт ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠΌ слуТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Optr, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ связан с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ OPipe. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ 11.2.1, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 11.2.1Β».

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

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

Описа Π½ ΠΈΠ΅ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСдставляСт собой ΠΊΠΎΠ΄ сыновнСго процСсса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСтся npoΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ 11.2. Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ для получСния содСрТимого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 11.2, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса ifstream. Для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°Π½Π°Π» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ процСссу Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ исполь-|зуСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса ostream_iterator ΠΈ стандартный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ transform.

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

<iostream>, algorithm>, <fstream>, <vector>, <iterator>, <stdlib.h>, |<string.h>, <unistd.h>.

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

с++ -o»programll-2b programll-2b.ee

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΏΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ [Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° запускаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ 11.2.

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ классы Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ iostream, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ‚ΠΈΠΏΠ° istream_iterator ΠΈ ostream_iterator ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π°, ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. По-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² силС вопросы блокирования ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ порядком открытия ΠΈ закрытия ΠΊΠ°Π½Π°Π»ΠΎΠ², рассмотрСнныС Π² Π³Π»Π°Π²Π΅ 5. Но использованиС основных ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Ρ‚Π΅Ρ… ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования всС ΠΆΠ΅ позволяСт ΠΏΠΎΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ слоТности ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ распрСдСлСнного программирования.

FIFO-ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹),

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ использовали для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ двумя нСдостатками. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π»ΡŽΠ±Ρ‹ΠΌ процСссам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ процСссами, Π½ΡƒΠΆΠ΅Π½ доступ ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ дСскрипторам, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ систСмной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pipe (). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сущСствуСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° получСния этих Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов для всСх процСссов-участников. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π»Π΅Π³ΠΊΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ, Ссли процСссы связаны ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΌ Β«Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊΒ» (ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π° ΠΌΠΌ Π°Ρ… 11.1, 11.2 ΠΈ 11.2.1), Π½ΠΎ Π² это ΠΌ случаС Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ процСссы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½Π΅ΠΈ ΠΌ Π΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ связаны ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌ ΠΈ. Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ схСмы ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ дСскриптора. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ структура FIFO (First In β€” First Out β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΠ±Ρ‹Π», ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ обслуТСн). Π‘Π°ΠΌΠΎΠ΅ большоС Π΅Π΅ достоинство ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊ Π½Π΅ΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ процСссы, Π½Π΅ связанныС Π½ΠΈΠΊΠ°ΠΊΠΈΠΌΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ. ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ β€” это СдинствСнноС, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΡ… ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΈ этом процСссы ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках программирования ΠΈ с использованиСм Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ программирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ). ΠŸΡ€ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Ρ… вычислСниях ΠΈ ΠΏΡ€ΠΈ использовании Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ Ρ€Π°Π²Π½ΠΎΠΏΡ€Π°Π²Π½Ρ‹Ρ… элСмСнтов ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами FIFO-ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ (ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°Π΅ ΠΌ Ρ‹Ρ… ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² UNIX- ΠΈ Linux-срСдС FIFO-структура ΠΈΠΌΠ΅Π΅Ρ‚ имя (опрСдСляСмоС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ) ΠΈ Π΅Π΅ (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»ΠΎΠ²) ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с Β«ΠΊΠ°ΠΏΠΈΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ сооруТСниСм». FIFO β€” однонаправлСнная структура, Π° это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π² срСдС UNIX Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ Π»ΠΈΠ±ΠΎ для чтСния, Π»ΠΈΠ±ΠΎ для записи, Π½ΠΎ Π½Π΅ для Ρ‚ΠΎΠ³ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π°Π»Ρ‹, созданныС Π² срСдС UNIX, ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ явно ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ unlink() ΠΈΠ»ΠΈ выполнСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ rm). Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ ΠΏΡ€ΠΈ ΠΈΡ… создании присваиваСтся эквивалСнт ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°. Π›ΡŽΠ±ΠΎΠΉ процСсс, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ извСстно имя ΠΊΠ°Π½Π°Π»Π° ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ ΠΏΡ€Π°Π²Π°ΠΌΠΈ доступа, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡ… Ρ‚ΡƒΠ΄Π°.