//...
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, ΠΊΠ°Π½Π°Π»ΠΎΠΌ ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Π²ΡΡΠ°Π²ΠΊΠΈ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ.