ࡱ;   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry  !"#$%&'()*+,./1  FMicrosoft Word-Dokument MSWordDocWord.Document.89q [XX07>2K91$*$/B*OJQJCJmHsHPJnH^JaJ_H9tH9PP 03>;>2>: 2@& & F & FCJ65aJ]\JJ 03>;>2>: 3@& & F & FCJ5aJ\BA@BAbsatz-StandardschriftartJJ 03>;>2>: x$OJQJCJPJ^JaJ8B8A=>2=>9 B5:AB x / !?8A>:>">0720=85 xx $CJ6aJ]*2* #:070B5;L $dBd"5:AB 2 7040==>< D>@<0B5 OJQJCJPJ^JaJ:tj\3c*vrzԂN4ƣ*Nz&"Jh4>tCM>Y]gtj^`P^@`@^`0^```^`^`^`^``^0`0::PGTimes New Roman5Symbol3&ArialGTimes New Roman?DejaVu Sans3&ArialI5DejaVu Sans Mono?5DejaVu SansBh]]' 0 0Oh+'0|8 @ L X d p0@@@@M 0tjCaolan80 $:4( 4b   + + 17>@  ?@54K4CI8E @0745;0E 2K =0CG8;8AL A>74020BL =5A:>;L:> ?0@0;;5;L=> 8A?>;=ONI8EAO ?@>F5AA>2. K =0CG8;8AL 45;0BL B0:, GB>1K @>48B5;LA:89 ?@>F5AA >6840; 7025@H5=8O >4=>3> 8;8 =5A:>;L:8E ?>@>64Q==KE. '0AB> ?0@0;;5;L=K5 ?@>F5AAK 4>;6=K :0:8<-B> >1@07>< 2708<>459AB2>20BL 4;O @5H5=8O >1I59 7040G8, 8 ?>MB><C =C6=K A@54AB20 4;O >1<5=0 8=D>@<0F859 <564C =8<8. ?5@0F8>==0O A8AB5<0 UNIX ?@54>AB02;O5B 1>30BK9 =01>@ A@54AB2 <56?@>F5AA=>3> 2708<>459AB28O (IPC - InterProcess Communication). 11@5280BC@0 IPC 1C45B 8A?>;L7>20BLAO 40;55 2 MB>< :C@A5, ?>B><C GB> >=0 :>@>G5 D@07K <56?@>F5AA=>5 2708<>459AB285.  MB>< @0745;5 2K 1C45B5 87CG0BL >4=C 87 B0:8E 2>7<>6=>AB59  ?@>3@0<<=K5 :0=0;K 8;8 B@C1K (pipes). @>3@0<<=K5 :0=0;K  MB> <5E0=87< ?5@540G8 8=D>@<0F88 >B >4=>3> ?@>F5AA0 : 4@C3><C. K 87CG8B5 A8AB5<=K5 2K7>2K 8 AB0=40@B=K5 181;8>B5G=K5 DC=:F88, :>B>@K5 A>740NB ?@>3@0<<=K5 :0=0;K 8 2K?>;=ONB 22>4 8 2K2>4 G5@57 =8E. IPC A 8A?>;L7>20=85< D09;>2 0AA<>B@8< 8A?>;L7>20=85 >1KG=KE D09;>2 4;O <56?@>F5AA=>3> 2708<>459AB28O: . >ABC?=>ABL D09;>2 >?@545;O5BAO B@5<O =01>@0<8 18B>2 ?@02 4>ABC?0. @>F5AAK, >1<5=820NI85AO 8=D>@<0F859 G5@57 D09;, =5 >1O70=K 1KBL @>4AB25==8:0<8. >4 @>4AB2>< 745AL ?>=8<0NBAO >B=>H5=8O @>48B5;L-?>@>64Q==K9 8;8 =0;8G85 >1I53> @>48B5;O. . 1KG=K5 D09;K 8<5NB >3@0=8G5=8O ?> @07<5@C. 07<5@K D09;>2 <>3CB 1KBL >3@0=8G5=K 04<8=8AB@0B82=>, 2K7>2>< ulimit(2) 8;8 48A:>2>9 :2>B>9, ;>38G5A:8, <0:A8<0;L=K< @07<5@>< 4;8=K D09;0 2 D09;>2>9 A8AB5<5 40==>3> B8?0, 8;8 D878G5A:8, >1JQ<>< 4>ABC?=>3> ?@>AB@0=AB20. @>3@0<<=K5 :0=0;K, 2 >B;8G85 >B @53C;O@=KE D09;>2, ?@54AB02;ONB A>1>9 =5?@5@K2=K9 ?>B>: 109B>2, ?> :>B>@><C <>65B 1KBL ?5@540=> ?@>872>;L=> 1>;LH>5 :>;8G5AB2> 8=D>@<0F88. @8 MB>< A>1AB25==0O Q<:>ABL :0=0;0 >G5=L =525;8:0.  :0G5AB25 0=0;>388 <>6=> ?@54;>68BL B>==5;L 8=:>;L=0, A>548=ONI89 LN->@: 8 LN-65@A8, ?@>?CA:0NI89 G5@57 A51O <8;;8>=K 02B><>18;59, 2 B> 2@5<O :0: 2 ;N1>9 7040==K9 <><5=B B>==5;L 2<5I05B =5 1>;55 G5<, A:065<, A5<L A>B5= <0H8=. . @5<O 687=8 >1KG=>3> D09;0 =5 7028A8B >B 2@5<5=8 687=8 8A?>;L7CNI8E 53> ?@>F5AA>2. $09;K <>3CB A>74020BLAO 8 C=8GB>60BLAO 2>2A5 =5 B5<8 ?@>3@0<<0<8, :>B>@K5 8A?>;L7CNB 8E 4;O 2708<>459AB28O. $09;K, :0: ?@028;>, ?5@56820NB ?5@5703@C7:C !. @><5 B>3>, 40==K5 2 D09;5 A>E@0=ONBAO 8 B>340, :>340 =8 >4=0 ?@>3@0<<0 8E =5 8A?>;L7C5B. . A=>2=0O ?@>1;5<0, 2>7=8:0NI0O ?@8 >1<5=5 8=D>@<0F859 G5@57 >1KG=K9 D09; - MB> >BACBAB285 A8=E@>=870F88. A;8 ?@54?>;>68BL, GB> Q<:>ABL D09;0 =5 O2;O5BAO ?@>1;5<>9, :0: G8B0NI89 ?@>F5AA C7=05B, GB> ?8HCI89 ?@>F5AA >:>=G8; 70?8AL? A?>;L7>20=85 A83=0;>2 4;O MB>9 F5;8  =5C4>2;5B2>@8B5;L=>5 @5H5=85.  @0745;5 0E20B D09;>2 8 70?8A59 87CG0;>AL 1>;55 ?>4E>4OI55 A@54AB2>, 1;>:8@>2:0 70?8A59. > 4065 A 8A?>;L7>20=85< 1;>:8@>2>:, A;>6=>ABL 7040G8 =525@>OB=> 2>7@0AB05B, B0: :0:, :@><5 ?@028;L=>AB8 A0<8E ?@>F5AA>2, 2K 4>;6=K 701>B8BLAO 8 > ?@028;L=>AB8 A8=E@>=870F88 <564C =8<8. @>3@0<<=K5 :0=0;K @>3@0<<=K5 :0=0;K - MB> ;8=88 A2O78 <564C 42C<O 8;8 1>;55 ?@>F5AA0<8. > B@048F88, ?@8:;04=K5 ?@>3@0<<K 8A?>;L7CNB :0=0;K A;54CNI8< >1@07><: >48= ?@>F5AA ?8H5B 40==K5 2 :0=0;, 0 4@C3>9 G8B05B 8E >BBC40.  SVR4 :0=0;K AB0;8 42C=0?@02;5==K< <5E0=87<><, B0: GB> 420 ?@>F5AA0 <>3CB ?5@54020BL 8=D>@<0F8N 2 >1>8E =0?@02;5=8OE G5@57 >48= ?@>3@0<<=K9 :0=0;. !CI5AB2C5B 420 B8?0 ?@>3@0<<=KE :0=0;>2: =58<5=>20==K5, G0AB> =07K205<K5 ?@>AB> B@C10<8, 8 8<5=>20==K5 :0=0;K. !CI5AB2CNB AB0=40@B=K5 181;8>B5G=K5 DC=:F88, C?@>I0NI85 8A?>;L7>20=85 :0=0;>2.  >B;8G85 >B >1KG=KE D09;>2, :0=0;K <>3CB ?@>?CA:0BL G5@57 A51O =5>3@0=8G5==> 1>;LH>9 >1J5< 8=D>@<0F88, E>BO A0<8 8<5NB =51>;LHCN Q<:>ABL (=5A:>;L:> 45AOB:>2 ;>38G5A:8E 1;>:>2). 07<5@ 2=CB@5==53> 1CD5@0 :0=0;0 <>6=> ?>A<>B@5BL 2K7>2>< pathconf(2) A ?0@0<5B@>< _PC_PIPE_BUF. 0 A0<>< 45;5, 2K7>2 pathconf(2) A MB8< ?0@0<5B@>< 2>72@0I05B =5 ?>;=K9 @07<5@ 2=CB@5==53> 1CD5@0, 0 @07<5@ 1;>:0 40==KE, :>B>@K9 30@0=B8@>20==> <>65B 1KBL 70?8A0= ?@8 ?><>I8 2K7>20 write(2) A >4=>9 ?>?KB:8.  Solaris 10 pathconf("/",_PC_PIPE_BUF) 2>72@0I05B 5120 109B (10 1;>:>2), => M:A?5@8<5=BK ?>:07K20NB, GB> @50;L=K9 >1J5< 1CD5@0 B@C1K A>AB02;O5B 1>;55 100 :8;>109B. @>F5AAK =5 >1O70=K 701>B8BLAO > ?5@5?>;=5=88 :0=0;0 871KB:>< 40==KE 8;8 > =52>7<>6=>AB8 G8B0BL 87 ?CAB>3> :0=0;0.  :0=0;L=K9 <5E0=87< 2AB@>5=0 A8=E@>=870F8O <564C G8B0NI8< 8 ?8HCI8< ?@>F5AA0<8: ?8HCI89 ?@>F5AA 1;>:8@C5BAO, B.5. ?@8>AB0=02;8205B 8A?>;=5=85, ?@8 ?>?KB:5 70?8A8 2 ?5@5?>;=5==K9 :0=0;, 8, A>>B25BAB25==>, G8B0NI89 ?@>F5AA >AB0=02;8205BAO ?@8 ?>?KB:5 GB5=8O 87 ?CAB>3> :0=0;0. "0:65, ?@>F5AA >AB0=02;8205BAO, 5A;8 >= >B:@K205B 8<5=>20==K9 :0=0; 4;O GB5=8O, 0 53> ?0@B=Q@ =5 >B:@K; MB>B 65 :0=0; 4;O 70?8A8, 8 =0>1>@>B. 0;55 2 MB>< @0745;5 2K 87CG8B5 D;038 O_NDELAY 8 O_NONBLOCK, 2K:;NG0NI85 MB>B 02B><0B8G5A:89 <5E0=87< A8=E@>=870F88 ?@8 >B:@KB88 8<5=>20==>3> :0=0;0. 10 B8?0 :0=0;>2 @01>B0NB, 2 >A=>2=><, >48=0:>2>, => 8A?>;L7CNBAO =5A:>;L:> @07;8G=K< >1@07><. =8 A>740NBAO @07;8G=K<8 A8AB5<=K<8 2K7>20<8. @5<O 687=8 =58<5=>20==>3> :0=0;0 =5 1>;LH5 2@5<5=8 687=8 ?@>F5AA>2, 8A?>;L7CNI8E 53>. 0?@>B82, 8<5=>20==K9 :0=0; 8<55B A>>B25BAB2CNICN 70?8AL 2 48@5:B>@88 8 ACI5AB2C5B, ?>:0 MBC 70?8AL O2=K< >1@07>< =5 C40;OB, ?>MB><C B0:>9 :0=0;, >1KG=>, ?5@568205B =5 B>;L:> ?@>F5AAK, @01>B0NI85 A =8<, => 8 ?5@5703@C7:C A8AB5<K. 0?8AL 2 48@5:B>@88 8A?>;L7C5BAO 4;O C?@02;5=8O 4>ABC?>< : 8<5=>20==><C :0=0;C. ;02=>5 ?@58<CI5AB2> 8<5=>20==KE :0=0;>2 =04 >1KG=K<8 A>AB>8B 2 B><, GB> 8E <>3CB 8A?>;L7>20BL =5@>4AB25==K5 ?@>F5AAK. >ABC? : 40==K< 2 ?@>3@0<<=>< :0=0;5 0=0; 845=B8D8F8@C5BAO B0:8< 65 D09;>2K< 45A:@8?B>@><, :0: 8 >B:@KBK5 >1KG=K5 8 A?5F80;L=K5 D09;K. >;LH8=AB2> A8AB5<=KE 2K7>2>2 4;O @01>BK A D09;>2K<8 45A:@8?B>@0<8 ?@8<5=8<> : :0=0;0<. 0=0;K 8A?>;L7CNBAO :><0=4=K<8 >1>;>G:0<8 4;O @50;870F88 :>=2595@>2 (pipeline). @8 A>740=88 :>=2595@0, AB0=40@B=K9 2K2>4 >4=>3> ?@>F5AA0 ?5@5=0?@02;O5BAO 2 45A:@8?B>@ B@C1K, >B:@KBK9 =0 70?8AL, 0 AB0=40@B=K9 22>4 A;54CNI53> ?@>F5AA0  2 45A:@8?B>@, >B:@KBK9 =0 GB5=85. =>385 AB0=40@B=K5 CB8;8BK Unix, B0:85, :0: sort(1), grep(1), sed(1), gzip(1) ?@54AB02;ONB A>1>9 D8;LB@K, B> 5ABL ?@>3@0<<K, ?>A;54>20B5;L=> >1@010BK20NI85 ?>B>: 40==KE =0 22>45 8 ?@5>1@07CNI85 53> 2 ?>B>: 40==KE =0 2K2>45. "0:85 ?@>3@0<<K <>3CB @01>B0BL A B5@<8=0;><, @53C;O@=K<8 D09;0<8, <=>38<8 B8?0<8 CAB@>9AB2 8 ?@>3@0<<=K<8 :0=0;0<8, =5 70<5G0O @07;8G89.  2845 D8;LB@>2 @50;87>20=K B0:65 <>4C;8 :><?8;OB>@0 GNU Compiler Collection: ?@5?@>F5AA>@, A>1AB25==> :><?8;OB>@ 8 0AA5<1;5@ 70?CA:0NBAO 2 >B45;L=KE ?@>F5AA0E 8 >1<5=820NBAO ?@><56CB>G=K<8 ?@54AB02;5=8O<8 ?@>3@0<<K G5@57 :0=0;.  A>60;5=8N, @01>B0 @540:B>@0 A2O759 B@51C5B ?@>872>;L=>3> 4>ABC?0 : >1J5:B=><C D09;C, ?>MB><C 0AA5<1;5@ =5 <>65B ?5@54020BL >1J5:B=K9 <>4C;L ;8=:5@C G5@57 B@C1C, B> 5ABL ?>A;54=89 MB0? :><?8;OF88 2AQ-B0:8 B@51C5B A>740=8O ?@><56CB>G=KE D09;>2. 0==K5 ?8HCBAO 2 :0=0; B0: 65, :0: 8 2 >1KG=K9 D09;, ?@8 ?><>I8 A8AB5<=>3> 2K7>20 write(2). 0: C?><8=0;>AL 2KH5, 5A;8 :0=0; =5 8<55B <5AB0 4;O 70?8A8 2A5E 40==KE, write(2) >AB0=02;8205BAO. !8AB5<0 =5 4>?CA:05B G0AB8G=>9 70?8A8: write(2) 1;>:8@C5BAO 4> <><5=B0, ?>:0 2A5 40==K5 =5 1C4CB 70?8A0=K, ;81> ?>:0 =5 1C45B >1=0@C65=0 >H81:0. 0==K5 G8B0NBAO 87 :0=0;0 ?@8 ?><>I8 A8AB5<=>3> 2K7>20 read(2).  >B;8G85 >B >1KG=KE D09;>2, GB5=85 @07@CH05B 40==K5 2 :0=0;5. -B> >7=0G05B, GB> 2K =5 <>65B5 8A?>;L7>20BL lseek(2) 4;O ?>?KB>: ?@>G8B0BL 40==K5 70=>2>. ! >4=8< :0=0;>< <>65B @01>B0BL =5A:>;L:> G8B0NI8E 8 ?8HCI8E ?@>F5AA>2. 0 ?@0:B8:5, =565;0B5;L=> 8<5BL =5A:>;L:> G8B0NI8E ?@>F5AA>2  157 4>?>;=8B5;L=>9 A8=E@>=870F88 4>ABC?0 : :0=0;C MB>, A:>@55 2A53>, ?@8254QB : ?>B5@5 40==KE. > :0=0; A =5A:>;L:8<8 ?8HCI8<8 2 =53> ?@>F5AA0<8 <>65B 8<5BL A<KA;. A;8 ?@>F5AA ?KB05BAO ?8A0BL 2 :0=0;, 87 :>B>@>3> =8:B> =5 G8B05B, >= ?>;CG8B A83=0; SIGPIPE. >?@>A: 5A;8 2K E>B8B5 ?@5:@0B8BL :><0=4C, 8A?>;L7CNICN :>=2595@, :0:>9 87 ?@>F5AA>2 2K 4>;6=K C18BL? B25B: ?>A;54=89 ?@>F5AA 2 :>=2595@5. 803@0<<0 =0 8;;NAB@0F88 ?>:07K205B 40==K5, 70?8A0==K5 2 ?@>3@0<<=K9 :0=0;, => 5I5 =5 ?@>G8B0==K5 87 =53>. !8AB5<0 8A?>;L7C5B 420 C:070B5;O 4;O B>3>, GB>1K A;548BL, :C40 ?8HCBAO 40==K5, 8 >B:C40 >=8 G8B0NBAO. ;O MB>3> ?>2B>@=> 8A?>;L7CNBAO B5 65 A0<K5 45AOBL 1;>:>2. !8AB5<=K9 2K7>2 pipe(2) @>3@0<<=K5 :0=0;K A>740NBAO A8AB5<=K< 2K7>2>< pipe(2). >72@0I05<>5 7=0G5=85 ?>:07K205B, CA?5H=> 7025@H8;AO 2K7>2 8;8 =5B. !8AB5<=K9 2K7>2 pipe(2) 70?>;=O5B <0AA82 F5;KE G8A5; 42C<O 45A:@8?B>@0<8 D09;>2.  @0==8E 25@A8OE A8AB5<K ?5@2K9 M;5<5=B <0AA820 A>45@60; 45A:@8?B>@, A2O70==K9 A :>=F>< :0=0;0, ?@54=07=0G5==K< 4;O GB5=8O; 2B>@>9 - 4;O 70?8A8.  SVR4 >10 45A:@8?B>@0 >B:@KBK 4;O GB5=8O 8 70?8A8, ?>72>;OO 42CAB>@>==89 >1<5= 40==K<8. 0: ?@028;>, ?@>3@0<<=K5 :0=0;K 8A?>;L7CNBAO A;54CNI8< >1@07><: ?>A;5 A8AB5<=>3> 2K7>20 pipe(2), A>7402H53> ?@>3@0<<=K9 :0=0;, 2K7>2>< fork(2) A>740QBAO ?>4?@>F5AA. 0B5< @>48B5;LA:89 8 ?>@>64Q==K9 ?@>F5AAK 70:@K20NB B>B 87 :>=F>2 :0=0;0, :>B>@K9 =5 A>18@0NBAO 8A?>;L7>20BL. >48B5;LA:89 ?@>F5AA <>65B B0:65 A>740BL 420 ?>4?@>F5AA0, :064K9 87 :>B>@KE 70:@>5B =5=C6=K9 5<C :>=5F ?@>3@0<<=>3> :0=0;0. A;8 @>48B5;L =5 E>G5B 2708<>459AB2>20BL A ?>@>64Q==K<8 8< ?@>F5AA0<8, >= 4>;65= 70:@KBL >10 :>=F0 :0=0;0. 58A?>;L7C5<K5 D09;>2K5 45A:@8?B>@K =5>1E>48<> 70:@K20BL ?>B><C, GB> ?@>3@0<<=K9 :0=0; 2K40QB CA;>285 :>=F0 D09;0 B>;L:> :>340 53> ?8HCI89 :>=5F 70:@KB. @8 fork(2) ?@>8AE>48B 4C1;8@>20=85 D09;>2>3> 45A:@8?B>@0, 0 ?@>3@0<<=K9 :0=0; AG8B05BAO 70:@KBK< B>;L:> :>340 1C4CB 70:@KBK 2A5 :>?88 A2O70==>3> A MB8< :0=0;>< 45A:@8?B>@0. A;8 2K 701C45B5 70:@KBL >48= 87 45A:@8?B>@>2, ?@>F5AA, >6840NI89 :>=5F D09;0 2 :0=0;5 (2>7<>6=>, 20H 65 A>1AB25==K9 ?@>F5AA!), =8:>340 53> =5 4>64QBAO. A>15==>AB8 A8AB5<=KE 2K7>2>2 4;O =58<5=>20==KE :0=0;>2 ABL =5:>B>@K5 >A>15==>AB8 ?@8 @01>B5 A;54CNI8E A8AB5<=KE 2K7>2>2 A ?@>3@0<<=K<8 :0=0;0<8: open(2) -B>B A8AB5<=K9 2K7>2 =5 =C65= ?@8 @01>B5 A :0=0;><, B0: :0: pipe(2) A0< >B:@K205B >10 :>=F0 :0=0;0. close(2) -B>B A8AB5<=K9 2K7>2 8A?>;L7C5BAO >1KG=K< >1@07>< 8 70:@K205B :0=0;, B0: 65 :0: ;N1>9 4@C3>9 D09;, :>340 @01>B0 A =8< >:>=G5=0. 865 >?8A0=>, :0: >= 459AB2C5B =0 read(2) 8 write(2). read(2) -B>B A8AB5<=K9 2K7>2 G8B05B AB>;L:> 40==KE, A:>;L:> =0 <><5=B 2K7>20 5ABL 2 :0=0;5. A;8 :>;8G5AB2> 109B>2 2 :0=0;5 <5=LH5, G5< B@51C5BAO, read(2) 2>72@0I05B 7=0G5=85 <5=LH55, G5< 53> ?>A;54=89 0@3C<5=B. read(2) 2>72@0I05B 0, 5A;8 >1=0@C68205B, GB> 4@C3>9 :>=5F :0=0;0 70:@KB, B.5. 2A5 ?>B5=F80;L=K5 ?8HCI85 ?@>F5AAK 70:@K;8 A2>8 D09;>2K5 45A:@8?B>@K, A2O70==K5 A 2E>4=K< :>=F>< :0=0;0. A;8 ?8HCI89 ?@>F5AA >?5@548; G8B0NI89, <>65B ?>B@51>20BLAO =5A:>;L:> >?5@0F89 GB5=8O, ?@5645 G5< read(2) 2>72@0B8B 0, ?>:07K20O :>=5F D09;0. A;8 1CD5@ :0=0;0 ?CAB, => D09;>2K9 45A:@8?B>@ 4@C3>3> :>=F0 5IQ >B:@KB, read(2) 1C45B 701;>:8@>20=. -B> ?>2545=85 <>65B 1KBL 87<5=5=> D;030<8 O_NONBLOCK 8 O_NDELAY. write(2)  >B;8G85 >B read(2), :>B>@K9 HB0B=> 2>72@0I05B <5=LH5 40==KE, G5< 1K;> 70?@>H5=>, write(2) AB@5<8BAO 70?8A0BL 2A5 40==K5, 70?8AL :>B>@KE 1K;0 70?@>H5=0. A;8 :>;8G5AB2> 109B, :>B>@K5 4>;6=K 1KBL 70?8A0=K, 1>;LH5 A2>1>4=>3> ?@>AB@0=AB20 2 :0=0;5, ?8HCI89 ?@>F5AA >AB0=>28BAO, ?>:0 G8B0NI89 ?@>F5AA =5 >A2>1>48B 4>AB0B>G=> <5AB0 4;O 70?8A8. /4@> >15A?5G8205B 0B><0@=>ABL 70?8A8: 5A;8 420 8;8 1>;55 ?@>F5AA>2 ?8HCB 2 >48= :0=0;, B> A8AB5<0 ?>AB028B 8E 2 >G5@54L, B0: GB> 70?8AL A;54CNI53> ?@>F5AA0 2 >G5@548 =0G=QBAO B>;L:> ?>A;5 B>3>, :0: 70:>=G8BAO 70?8AL ?@54K4CI53>. A;8 G8B0NI89 ?@>F5AA 70:@>5B A2>9 :>=5F :0=0;0, 2A5 ?8HCI85 ?@>F5AAK ?>;CG0B A83=0; SIGPIPE ?@8 ?>?KB:5 70?8A8 2 MB>B :0=0;. -B> ?@8254QB : ?@5@K20=8N 2K7>20 write(2) 8, 5A;8 A83=0; =5 1K; >1@01>B0=, : 7025@H5=8N ?8HCI53> ?@>F5AA0. lseek(2), mmap(2) -B8 A8AB5<=K5 2K7>2K =5 4>?CAB8<K, B0: :0: =5B A?>A>10 ?5@5G8B0BL 40==K5 87 :0=0;0; GB5=85 @07@CH05B 8E. dup(2) !8AB5<=K9 2K7>2 dup(2) G0AB> 8A?>;L7C5BAO 4;O ?5@5=0?@02;5=8O AB0=40@B=>3> 2K2>40 8 AB0=40@B=>3> 22>40 =0 A>>B25BAB2CNI85 :>=FK ?@>3@0<<=>3> :0=0;0. poll(2) 8 select(3C). -B8 2K7>2K G0AB> 8A?>;L7CNBAO 4;O <C;LB8?;5:A8@>20=8O 22>40-2K2>40 2 :0=0;K, 5A;8 ?@>F5AAC =5>1E>48<> @01>B0BL A =5A:>;L:8<8 :0=0;0<8 8;8 4@C38<8 CAB@>9AB20<8 8;8 ?A524>CAB@>9AB20<8, @01>B0 A :>B>@K<8 <>65B ?@825AB8 : 1;>:8@>2:5. fcntl(2) ><0=4K F_SETLK, F_GETLK 8 F_FREESP : :0=0;0< =5?@8<5=8<K, >4=0:> :><0=4K F_GETFD 8 F_SETFD G0AB> 8A?>;L7CNBAO 4;O 87<5=5=8O D;03>2 O_NDELAY 8 O_NONBLOCK. 1KG=>, GB5=85 87 ?CAB>3> :0=0;0 8 70?8AL 2 ?5@5?>;=5==K9 :0=0; 1;>:8@CNBAO, :0: >1AC640;>AL 2KH5. 4=0:>, 2K 8<55B5 2>7<>6=>ABL 2K:;NG8BL MB> A2>9AB2> :0=0;>2 CAB0=>2:>9 D;03>2 O_NDELAY 8 O_NONBLOCK. @8 CAB0=>2;5==>< O_NDELAY, read(2) ?@8 ?>?KB:5 G8B0BL 87 ?CAB>3> :0=0;0 =5<54;5==> 2>72@0B8B 0. A;8 CAB0=>2;5= O_NONBLOCK, GB5=85 87 ?CAB>3> :0=0;0 70AB028B read(2) 2>72@0B8BL -1 8 CAB0=>28BL errno 2 EAGAIN. =0;>38G=> 1C45B A51O 25AB8 write(2) ?@8 70?8A8 2 ?5@5?>;=5==K9 :0=0;. >GB8 2A5 A:070==>5 ?@8;>68<> 8 : 8<5=>20==K< :0=0;0<, >1AC6405<K< 40;55 2 MB>< @0745;5, 70 8A:;NG5=85< B>3>, GB> 8<5=>20==K5 :0=0;K A>740NBAO 8 >B:@K20NBAO 4@C38< A?>A>1><. @>3@0<<=K5 :0=0;K - @8<5@ -B>B ?@8<5@ ?>:07K205B 8A?>;L7>20=85 :0=0;0. @>3@0<<0 ?>AK;05B B5:AB ?>@>64Q==><C ?@>F5AAC, :>B>@K9, 2 A2>N >G5@54L, 2K2>48B B5:AB, ?>;CG5==K9 >B @>48B5;O. -B0 ?@>3@0<<0 1C45B @01>B0BL =0 ;N1>9 A8AB5<5, A>2<5AB8<>9 A> AB0=40@B>< POSIX. 11-13 45AL A>740QBAO ?@>3@0<<=K9 :0=0;. 0<5BLB5, GB> :0=0; A>740QBAO 4> 70?CA:0 ?>4?@>F5AA0, 8=0G5 ?>4?@>F5AA =5 A<>3 1K C=0A;54>20BL D09;>2K5 45A:@8?B>@K. 16-18 >A;5 A>740=8O ?>4?@>F5AA0, @>48B5;LA:89 ?@>F5AA ?8H5B 2 :0=0; B5:AB>2>5 A>>1I5=85. 19-22 >@>64Q==K9 ?@>F5AA G8B05B A>>1I5=85 87 :0=0;0, 8 2K2>48B 53> =0 B5@<8=0;. 1@0B8B5 2=8<0=85, GB> 2 MB>< ?@8<5@5 =5=C6=K5 :>=FK :0=0;0 =5 70:@K20NBAO.  40==>< A;CG05 MB> =5 ?@54AB02;O5B >?0A=>AB8, B0: :0: G8B0NI89 ?@>F5AA =5 >68405B :>=F0 D09;0. >MB><C, 4;O C?@>I5=8O ?@>3@0<<K, 2K7>2K close(2) 2 MB>9 ?@>3@0<<5 ?@>?CI5=K. -B0 ?@>3@0<<0 @01>B05B B0:: $ pipe1 Hello, world $09;: pipe1.c   + + -    1 #include <sys/types.h> 2 #include <unistd.h> 3 #define MSGSIZE 20 4 5 main(int argc, char **argv) 6 { 7 int fd[2]; pid_t pid; 8 static char msgout[MSGSIZE]="Hello,world"; 9 static char msgin[MSGSIZE]; 10 11 if (pipe(fd) == -1) { 12 perror(argv[0]); 13 exit(1); 14 } 15 16 if ((pid=fork()) > 0) { /* parent */ 17 write(fd[1], msgout, MSGSIZE); 18 } 19 else if (pid == 0) { /* child */ 20 read(fd[0], msgin, MSGSIZE); 21 puts(msgin); 22 } 23 else { /* cannot fork */ 24 perror(argv[0]); 25 exit(2); 26 } 27 28 exit(0); 29 } @>3@0<<=K5 :0=0;K - @8<5@ -B>B ?@8<5@ 8;;NAB@8@C5B 42C=0?@02;5==K5 :0=0;K, 8A?>;L7CNI85 @50;870F8N pipe(2) 2 SVR4. -B0 ?@>3@0<<0 ?>AK;05B B5:AB ?>@>64Q==><C ?@>F5AAC, :>B>@K9 @0A?5G0BK205B B5:AB, ?>;CG5==K9 >B @>48B5;LA:>3> ?@>F5AA0. >@>64Q==K9 ?@>F5AA B0:65 ?>AK;05B A>>1I5=85 @>48B5;N G5@57 B>B 65 A0<K9 :0=0;, 87 :>B>@>3> >= ?@>G8B0; A>>1I5=85 >B @>48B5;O. 12-14 45AL A>740QBAO ?@>3@0<<=K9 :0=0;. 0<5BLB5, GB> :0=0; A>740QBAO 4> 70?CA:0 ?>4?@>F5AA0. 16-22 >A;5 70?CA:0 ?>4?@>F5AA0, @>48B5;L ?8H5B 2 :0=0; A>>1I5=85, >68405B A>>1I5=8O 87 B>3> 65 A0<>3> :>=F0 :0=0;0, 8 ?8H5B ?>;CG5==>5 A>>1I5=85 =0 B5@<8=0;. 23-29 =0;>38G=K< >1@07><, ?>@>64Q==K9 ?@>F5AA ?8H5B A>>1I5=85 2 A2>9 :>=5F :0=0;0 8 64QB A>>1I5=8O 87 =53>. -B0 ?@>3@0<<0 @01>B05B B0:: $ pipe1.SVR4 Parent hears: I want ice cream $ Child hears: Eat your spinach $ $09;: pipe1.SVR4.c   + + -    1 #include <sys/types.h> 2 #include <unistd.h> 3 #define MSGSIZE 20 4 5 main(int argc, char **argv) 6 { 7 int fd[2]; pid_t pid; 8 static char msgout1[MSGSIZE] = "I want ice cream\n"; 9 static char msgout2[MSGSIZE] = "Eat your spinach\n"; 10 static char msgin[MSGSIZE]; 11 12 if (pipe(fd) == -1) { 13 perror(argv[0]); exit(1); 14 } 15 16 if ((pid = fork()) > 0) { /* parent */ 17 if(write(fd[1], msgout2, MSGSIZE) == -1) 18 perror("Parent write"); 19 if(read(fd[1], msgin, MSGSIZE) == -1) 20 perror("Parent read"); 21 printf("Parent hears: %s\n", msgin); 22 } 23 else if(pid == 0) { /* child */ 24 if(write(fd[0], msgout1, MSGSIZE) == -1) 25 perror("Child write"); 26 if(read(fd[0], msgin, MSGSIZE) == -1) 27 perror("Child read"); 28 printf("Child hears: %s\n", msgin); 29 } 30 else { /* cannot fork */ 31 perror(argv[0]); 32 exit(2); 33 } 34 exit(0); 35 } @>3@0<<=K5 :0=0;K - @8<5@ - who | sort  MB>< ?@8<5@5 A>740NBAO 420 ?>4?@>F5AA0, 2708<>459AB2CNI85 G5@57 :0=0;. 064K9 87 MB8E ?@>F5AA>2 8A?>;=O5B A2>N ?@>3@0<<C, 0 @>48B5;LA:89 ?@>F5AA 645B 8E 7025@H5=8O. 9-11 > 70?CA:0 ?>4?@>F5AA>2 A>740QBAO :0=0;. 12-20 45AL A>740QBAO ?5@2K9 ?>4?@>F5AA. 3> AB0=40@B=K9 2K2>4 ?5@5=0?@02;O5BAO =0 2E>4=>9 :>=5F :0=0;0. 5AL 2K2>4 2 45A:@8?B>@ D09;0 1 1C45B =0?@02;5= 2 :0=0;. -B> >B=>A8BAO : printf(3C) B0: 65, :0: 8 : ;N1><C 2K2>4C ?@>3@0<<K, 70?CI5==>9 A8AB5<=K< 2K7>2>< exec(2). 0B5< 70:@K20NBAO 2A5 =58A?>;L7C5<K5 45A:@8?B>@K :0=0;0. 0B5< 8A?>;=O5BAO :><0=40 who(1). fflush(stdout) 45;05BAO, GB>1K 1KBL C25@5==K<, GB> 1CD5@87>20==K9 B5:AB 1C45B 2K2545= ?5@54 2K7>2>< exec(2), 0 =5 ?>B5@O=. 21-30 !>740QBAO 2B>@>9 ?>4?@>F5AA, 8 e3> AB0=40@B=K9 22>4 ?5@5=0?@02;O5BAO =0 2KE>4=>9 :>=5F :0=0;0. !B0=40@B=K9 22>4, 45A:@8?B>@ D09;0 0, MB>3> ?@>F5AA0, B5?5@L 1C45B 84B8 87 2KE>4=>3> :>=F0 :0=0;0. 45AL B0:65 70:@K20NBAO 2A5 =58A?>;L7C5<K5 45A:@8?B>@K :0=0;0. -B> =5>1E>48<>, B0: :0: sort(1) =5 <>65B 7025@H8BL A>@B8@>2:C 8 =5 <>65B 2K40BL 40==K5, ?>:0 =5 C2848B :>=5F D09;0 2> 2E>4=>< ?>B>:5. $C=:F8O read_to_nl(), =5 ?>:070==0O 745AL, G8B05B 87 D09;>2>3> 45A:@8?B>@0 0, ?>:0 =5 ?>;CG8B A8<2>; :>=F0 AB@>:8. -B0 DC=:F8O, :0: 8 ;N10O ?@>3@0<<0, 70?CI5==0O exec(2), 1C45B ?>;CG0BL 22>4 87 :0=0;0. 28 fflush(stdout) =C65= B>;L:> 5A;8 2K2>4 who(1) ?5@5=0?@02;5=. K2>4 =0 B5@<8=0; 1CD5@87C5BAO ?> AB@>:0<. 31 >48B5;LA:89 ?@>F5AA 4>;65= 70:@KBL >10 :>=F0 :0=0;0, 5A;8 =5 8A?>;L7C5B 53>. A;8 2E>4=>9 :>=5F 70:@KB, B> G8B0NI89 ?@>F5AA, sort(1) 2 MB>< ?@8<5@5, C2848B :>=5F D09;0, :>340 548=AB25==K9 ?8HCI89 ?@>F5AA who(1) 70:@>5B A2>9 AB0=40@B=K9 2K2>4. =0G5 G8B0NI89 ?@>F5AA 1C45B 28A5BL, >6840O 22>40, :>B>@K9 =8:>340 =5 ?>ABC?8B. KE>4=>9 :>=5F 70:@K205BAO 4;O C4>1AB20 ?8HCI53> ?@>F5AA0 who(1), :>B>@K9 ?>;CG8B SIGPIPE ?@8 ?>?KB:5 70?8A8, 5A;8 2A5 G8B0NI85 ?@>F5AAK 70:@K;8 2KE>4=>9 :>=5F, =0?@8<5@, 2 @57C;LB0B5 020@89=>3> 7025@H5=8O. 32-33 >48B5;LA:89 ?@>F5AA >68405B 7025@H5=8O >1>8E ?>@>64Q==KE, => 2KE>4=>9 AB0BCA 7025@H82H53>AO ?@>F5AA0 83=>@8@C5BAO. -B0 ?@>3@0<<0 @01>B05B B0:: $ whos3 Heading: who display sorted bern tty26 May 8 18:14 console console May 5 22:47 ipd tty31 May 8 07:46 $09;: whos3.c   + + -    - who | sort 1 #include <sys/types.h> 2 #include <stdio.h> 3 #include <unistd.h> 4 #include <wait.h> 5 char text[80]; 6 main(int argc, char **argv) 7 { 8 int fd[2]; void read_to_nl(char *); 9 if (pipe(fd) == -1) { 10 perror(argv[0]); exit(1); 11 } 12 if (fork() == 0) { /* first child */ 13 close(1); 14 dup(fd[1]); /* redirect std output */ 15 close(fd[0]); close(fd[1]); 16 printf("who display sorted\n"); 17 fflush(stdout); 18 execl("/bin/who", "who", (char *) 0); 19 exit(127); 20 } 21 if (fork() == 0) { /* second child */ 22 close(0); 23 dup(fd[0]); /* redirect std input */ 24 close(fd[0]); close(fd[1]); 25 read_to_nl(text); 26 printf("\tHeading: %s\n", text); 27 fflush(stdout); 28 execl("/bin/sort","sort", (char *)0); 29 exit(127); 30 } 31 close(fd[0]);close(fd[1]); 32 while (wait((int *) 0) != -1) 33 ; /* null */ 34 exit(0); 35 } $C=:F88 AB0=40@B=>9 181;8>B5:8 4;O @01>BK A :0=0;0<8 81;8>B5G=K5 DC=:F8O popen(3S) 4;O @01>BK A :0=0;0<8 0=0;>38G=0 fopen(3) 4;O @01>BK A >1KG=K<8 D09;0<8. <5AB> 8<5=8 D09;0 2K ?5@5405B5 :><0=4=CN AB@>:C shell :0: >48= 0@3C<5=B. "0: 65, :0: fopen(3), popen(3S) 2>72@0I05B C:070B5;L =0 B8? FILE. 0B5< AB0=40@B=K5 181;8>B5G=K5 DC=:F88, B0:85, :0: printf, 8A?>;L7CNBAO 4;O 22>40 8 2K2>40. 0:>=5F, :>340 2K 70:>=G8B5, 2K 70:@K205B5 C:070B5;L =0 D09; A 8A?>;L7>20=85< pclose(3) 2<5AB> fclose(3).  1>;LH8=AB25 A;CG052 ?@>I5 8A?>;L7>20BL popen(3) 8 pclose(3), G5< A8AB5<=K5 2K7>2K. @3C<5=BK popen(3): command - C:070B5;L =0 AB@>:C A8<2>;>2, A>45@60ICN ;N1CN ?@028;L=CN :><0=4C 8=B5@?@5B0B>@0 shell. -B0 :><0=4=0O AB@>:0 <>65B 8A?>;L7>20BL 2A5 <5E0=87<K shell, B0:85 :0: ?>8A: :><0=4 2 PATH, @0AH8@5=85 <5B0A8<2>;>2, ?5@5=0?@02;5=85 22>40/2K2>40 8 B.4.. -B> @01>B05B ?>B><C, GB> popen(3) 8A?>;=O5B shell 8 ?5@5405B 5<C MBC :><0=4=CN AB@>:C :0: 0@3C<5=B.  :0G5AB25 shell 8A?>;L7C5BAO 7=0G5=85 ?5@5<5==>9 A@54K SHELL, 8 /bin/sh, 5A;8 MB0 ?5@5<5==0O =5 >?@545;5=0. type - "r" 4;O GB5=8O 8 "w" 4;O 70?8A8. K1>@ "r" 8;8 "w" >?@545;O5BAO B5<, :0: ?@>3@0<<0 1C45B 8A?>;L7>20BL ?>;CG5==K9 C:070B5;L =0 D09;. . type 4>;65= 1KBL "r", 5A;8 ?@>3@0<<0 E>G5B G8B0BL 40==K5, 2K40205<K5 command 2 AB0=40@B=K9 2K2>4. . type 4>;65= 1KBL "w", 5A;8 2K2>4 2 ?>;CG5==K9 C:070B5;L =0 D09; 4>;65= 1KBL AB0=40@B=K< 22>4>< command. >72@0I05<>5 7=0G5=85 popen(3) - C:070B5;L =0 AB0=40@B=K9 181;8>B5G=K9 B8? FILE. @3C<5=BK pclose(3) B0:>2K: stream - C:070B5;L =0 FILE, ?>;CG5==K9 ?@8 2K7>25 popen(3). ;02=>5 >B;8G85 pclose(3) >B fclose(3) A>AB>8B 2 B><, GB> pclose(3) >68405B 7025@H5=8O A>740==>3> ?@>F5AA0. 0?><8=0=85 pid A>740==>3> ?@>F5AA0 2 @07=KE A8AB5<0E >ACI5AB2;O5BAO ?> @07=><C; 2 Linux, 2 AB@C:BC@5 FILE 4;O MB>3> ?@54CA<>B@5=> A?5F80;L=>5 ?>;5.  Solaris, 2 AB@C:BC@5 FILE ?>4E>4OI53> ?>;O =5B, 181;8>B5:0 A>740QB >B45;L=K9 A?8A>: pid, 0AA>F88@>20==KE A> AB@C:BC@0<8 FILE. pclose(3) 2>72@0I05B 2KE>4=>9 AB0BCA :><0=4K, :>340 >=0 7025@H05BAO. $C=:F88 AB0=40@B=>9 181;8>B5:8 4;O @01>BK A :0=0;0<8 - ;;NAB@0F8O "@048F8>==K5 181;8>B5G=K5 DC=:F88 4;O @01>BK A :0=0;0<8 - popen(3) 8 pclose(3). SVR4 4>102;O5B DC=:F88 p2open(3G) 8 p2close(3G). E 459AB28O 0=0;>38G=K, => popen(3S) A>7405B >4=>=0?@02;5==CN ;8=8N A2O78, 0 p2open(3G) - 42C=0?@02;5==CN ;8=8N 4;O A2O78 <564C @>48B5;LA:8< 8 ?>@>645==K< ?@>F5AA0<8. !=0G0;0 popen(3) A>7405B :0=0;, 70B5< ?>@>6405B ?@>F5AA, 8A?>;=ONI89 :><0=4C, 7040==CN ?5@2K< 0@3C<5=B><, 8 ?5@5=0?@02;O5B 55 AB0=40@B=K9 22>4 8;8 2K2>4. !>>B25BAB25==>, pclose(3) 70:@K205B :0=0; 8 645B 7025@H5=8O ?>@>645==>3> ?@>F5AA0. A?>;L7CO popen(3) 8 pclose(3), ?@>3@0<<0 <>65B 8A?>;=8BL ;N1CN 4>?CAB8<CN :><0=4C, :>B>@0O <>65B 1KBL =01@0=0 2 :><0=4=>9 AB@>:5 20H53> 8=B5@?@5B0B>@0 shell. 0B5< ?@>3@0<<0 <>65B G8B0BL A> AB0=40@B=>3> 2K2>40 MB>9 :><0=4K 8;8 ?8A0BL 2 55 AB0=40@B=K9 22>4. $C=:F8O popen(3) @50;87>20=0 A 8A?>;L7>20=85< pipe(2) 4;O A>740=8O :0=0;0, fork(2) 4;O 70?CA:0 ?>4?@>F5AA0 8 dup(2) 4;O ?5@5=0?@02;5=8O AB0=40@B=>3> 22>40 8;8 2K2>40 2 :0=0;. $C=:F8O pclose(3), 2 A2>N >G5@54L, 8A?>;L7C5B close(2), GB>1K 70:@KBL :0=0;, 8 waitid(2) 8;8 waitpid(2) 4;O B>3>, GB>1K 4>640BLAO 7025@H5=8O ?>@>64Q==>3> ?@>F5AA0. 0 4803@0<<5 ?C=:B8@=0O ;8=8O ?>:07K205B, GB> @>48B5;LA:89 ?@>F5AA, >68405B 7025@H5=8O A2>53> ?>4?@>F5AA0. 81;8>B5G=K5 DC=:F88 - @8<5@ - who | sort -B>B ?@8<5@ 45<>=AB@8@C5B 8A?>;L7>20=85 popen(3) 8 pclose(3) 4;O @50;870F88 who | sort. 5 -B0 AB@>:0 >?8AK205B C:070B5;8 =0 2E>4=>9 8 2KE>4=>9 D09;K. 6 ?@545;O5BAO 1CD5@ 22>40 8 2K2>40 2 2845 <0AA820 A8<2>;>2. 0:@>A BUFSIZ >?@545;5= 2 D09;5 stdio.h. 8-9 45AL A>740NBAO C:070B5;8 D09;>2 22>40 8 2K2>40. 11-12 45AL A8<2>;L=K5 40==K5 :>?8@CNBAO 87 2K2>40 :><0=4K who(1) =0 22>4 :><0=4K sort(1). &8:; 22>40/2K2>40 ?@5:@0I05BAO, :>340 1>;LH5 =5B 2E>4=KE 40==KE. -B> ?@>8AE>48B, :>340 7025@H05BAO who(1). 14-15 0:>=5F, 70:@K20NBAO C:070B5;8 =0 D09;K. >@O4>: MB8E 70:@KB89 2065=, ?>B><C GB> sort(1) =0G8=05B A>@B8@>2:C B>;L:> ?>A;5 B>3>, :0: C2848B :>=5F AB0=40@B=>3> 22>40. 0<5BLB5, =0A:>;L:> MB0 ?@>3@0<<0 ?@>I5 ?@54K4CI53> ?@8<5@0, 8A?>;L7CNI53> A8AB5<=K5 2K7>2K. "0:65 70<5BLB5, GB> ?@8 ?><>I8 181;8>B5G=KE DC=:F89 <K =5 <>65< A>740BL :>=2595@, =0?@O<CN A>548=ONI89 70?CI5==K5 ?@>F5AAK, 8 2K=C645=K A0<8 :>?8@>20BL 40==K5 87 2K2>40 >4=>9 :><0=4K =0 22>4 4@C3>9. ?@>G5<, ?@8 8A?>;L7>20=88 popen(3C) <>6=> 1K;> 1K 2>7;>68BL A>740=85 B0:>3> :>=2595@0 =0 shell, 2K7202 popen("who|sort", "r"); -B0 ?@>3@0<<0 @01>B05B B0:: $ whos1 anil tty41 May 8 08:42 bern tty26 May 8 18:14 bern xt082 May 8 14:39 console console May 5 22:47 ipd tty31 May 8 07:46 $09;: whos1.c "'+ $#& -    - who | sort 1 #include <stdio.h> 2 3 main() 4 { 5 FILE *fpin, *fpout; 6 char line[BUFSIZ]; 7 8 fpin = popen("who", "r"); 9 fpout = popen("sort", "w"); 10 11 while(fgets(line,BUFSIZ,fpin) != (char *)NULL) 12 fputs(line, fpout); 13 14 pclose(fpin); 15 pclose(fpout); 16 } !B0=40@B=K5 181;8>B5G=K5 DC=:F88 4;O @01>BK A :0=0;0<8 SVR4 ?@54>AB02;O5B p2open(3G), :>B>@K9 ?>E>6 =0 popen(3S) B5<, GB> 70?CA:05B 2 ?>@>645==>< ?@>F5AA5 shell-:><0=4C 8 CAB0=02;8205B A2O7L A MB8< ?@>F5AA>< G5@57 :0=0;. = >B;8G05BAO >B popen(3S) B5<, GB> ?@54>AB02;O5B 42C=0?@02;5==CN A2O7L. 5@5=0?@02;ONBAO :0: AB0=40@B=K9 22>4, B0: 8 AB0=40@B=K9 2K2>4 70?CI5==>3> ?@>F5AA0. p2open(3G) 2K7K205B fork(2) 8 8A?>;=O5B :><0=4=CN AB@>:C, =0 :>B>@CN C:07K205B cmd. @8 2>72@0B5, ptr[0] A>45@68B C:070B5;L =0 FILE, 70?8AL 2 :>B>@K9 1C45B AB0=40@B=K< 22>4>< :><0=4K. ptr[1] A>45@68B C:070B5;L =0 D09;, :>B>@K9 <>65B 1KBL 8A?>;L7>20= 4;O GB5=8O AB0=40@B=>3> 2K2>40 :><0=4K. p2close(3G) 70:@K205B >10 C:070B5;O =0 FILE. A;8 ?@>3@0<<8AB E>G5B 70:@KBL B>;L:> >48= 87 ?>B>:>2, 2>7<>6=>, A;54C5B 8A?>;L7>20BL fclose(3C). -B> =5>1E>48<>, 5A;8 :><0=40 4>;6=0 C2845BL :>=5F D09;0 ?5@54 B5<, :0: =0G0BL >1@01>B:C 22>40, :0: sort(1). A;8 :><0=40 ?@8 70:@KB88 2E>4=>3> ?>B>:0 B>;L:> =0G8=05B >1@01>B:C 22>40, <K =5 <>65< G8B0BL 5Q 2K2>4 4> 70:@KB8O 5Q 22>40. A;8 4;O 70:@KB8O 22>40 8A?>;L7>20BL pclose(3C), MB0 DC=:F8O 1C45B 640BL 7025@H5=8O :><0=4K. >, ?>A:>;L:C <K 5IQ =5 =0G8=0;8 G8B0BL 2K2>4, :><0=40 <>65B 1KBL 701;>:8@>20=0 87-70 ?5@5?>;=5=8O B@C1K =0 2KE>45. "0:8< >1@07><, 8 pclose(3C), 8 70?CI5==0O :><0=40 2 B0:>9 A8BC0F88 <>3CB =8:>340 =5 7025@H8BLAO.  MB>9 A8BC0F88 =5>1E>48<> 70:@K20BL ?>B>: ?@8 ?><>I8 fclose(3C). 0: ?@028;>, =C6=> A=0G0;0 70:@K20BL ?>B>: 22>40 :><0=4K 2K7>2>< fclose(3C), ?>B>< AG8BK20BL 40==K5 87 ?>B>:0 2K2>40 :><0=4K 8 B>;L:> ?>B>< 70:@K20BL MB>B ?>B>: 2K7>2>< pclose(3C). > B>G=K5 B@51>20=8O : ?>@O4:C 70:@KB8O ?>B>:>2 A;54C5B >?@545;OBL 2 7028A8<>AB8 >B >A>15==>AB59 ?>2545=8O 70?CA:05<>9 :><0=4K. 81;8>B5G=K5 DC=:F88 4;O @01>BK A :0=0;0<8 - @8<5@ - p2open(3G) -B0 ?@>3@0<<0 45<>=AB@8@C5B 8A?>;L7>20=85 p2open(3G) 4;O 42C=0?@02;5==>9 A2O78 <564C @>48B5;LA:8< 8 ?>@>64Q==K< ?@>F5AA0<8. >48B5;LA:89 ?@>F5AA ?8H5B 2 AB0=40@B=K9 22>4 ?>@>64Q==>3> G5@57 fptr[0] 8 G8B05B 53> AB0=40@B=K9 2K2>4 87 fptr[1].  MB>9 ?@>3@0<<5 206=>, GB> @>48B5;L 45;05B fclose(3S) 4;O B>3> D09;0, 2 :>B>@K9 >= ?8A0;, B0: GB> :><0=40 sort(1) 8A?>;=ONI0OAO 2 ?>4?@>F5AA5, C2848B :>=5F D09;0. -B0 ?@>3@0<<0 @01>B05B B0:: $ p2exam Sorted line 0: zfk Sorted line 1: sdcjjden Sorted line 2: njkdnk Sorted line 3: ldef Sorted line 4: bfifim $09;: p2exam.c "'+ $#& / "+ !  -    - p2open(3G) 1 #include <stdio.h> 2 #include <libgen.h> 3 4 main() 5 { 6 FILE *fptrs[2]; 7 int i, pid; 8 char buf[79]; 9 char *lines[5] = {"njkndk\n", 10 "sdcjjden\n", 11 "ldef\n", 12 "bfifim\n", 13 "zfk\n" }; 14 15 16 p2open("/bin/sort -r", fptrs); 17 18 for( i=0; i < 5; i++) 19 fputs(lines[i], fptrs[0]); 20 fclose(fptrs[0]); 21 22 i = 0; 23 while(fgets(buf, 80, fptrs[1]) != NULL) { 24 printf("Sorted line %d: %s", i++, buf); 25 } 26 } <5=>20==K5 :0=0;K - 2545=85  MB>< @0745;5 2K 87CG8B5 8<5=>20==K5 :0=0;K. <5=>20==K5 :0=0;K B0:65 8725AB=K :0: FIFO-D09;K. @>F5AAK, 2708<>459AB2CNI85 G5@57 =58<5=>20==K9 :0=0;, 4>;6=K 1KBL @>4AB25==K<8, 8=0G5 >=8 =5 A<>3CB ?>;CG8BL 4@C3 >B 4@C30 D09;>2K5 45A:@8?B>@K :0=0;0. <5=>20==K5 :0=0;K, 2 >B;8G85 >B =58<5=>20==KE, <>3CB 8A?>;L7>20BLAO =5@>4AB25==K<8 ?@>F5AA0<8. =8 40NB 20<, ?> ACB8, B5 65 2>7<>6=>AB8, GB> 8 =58<5=>20==K5 :0=0;K, => A =5:>B>@K<8 ?@58<CI5AB20<8, ?@8ACI8<8 >1KG=K< D09;0<. <5=>20==K5 :0=0;K 8A?>;L7CNB A?5F80;L=K9 D09; 4;O C?@02;5=8O ?@020<8 4>ABC?0. <O B0:>3> D09;0 <>65B 1KBL @07<5I5=> 2 ;N1>< <5AB5 45@520 D09;>2>9 A8AB5<K ! UNIX, ?@8 CA;>288, GB> D09;>20O A8AB5<0 ?>445@68205B D09;K B0:>3> B8?0 (1>;LH8=AB2> D09;>2KE A8AB5< Unix, B0:85, :0: UFS 8 ZFS, ?>445@6820NB FIFO-D09;K, => FAT16/FAT32 (pcfs) 8E =5 ?>445@6820NB). -B> ?>72>;O5B =5@>4AB25==K< ?@>F5AA0< 2708<>459AB2>20BL G5@57 :0=0;, 5A;8 >=8 8<5NB A>>B25BAB2CNI85 ?@020 4>ABC?0 : D09;0<. <5=>20==K5 :0=0;K ACI5AB2CNB =57028A8<> >B ;N1KE ?@>F5AA>2, =>, 2 >B;8G85 >B D09;>2, E@0=OI85AO 2 =8E 40==K5 =5 ?5@56820NB ?5@5703@C7:C A8AB5<K. @8<5@ 8;;NAB@8@C5B 8A?>;L7>20=85 8<5=>20==KE :0=0;>2 87 :><0=4=>9 AB@>:8 shell =0 42CE @07;8G=KE B5@<8=0;0E. @54AB02LB5 A515 B0:CN A8BC0F8N: 2K 8<55B5 B5@<8=0;L=K9 :;0AA, 2 :>B>@>< 2 :0G5AB25 >4=>3> 87 B5@<8=0;>2 8A?>;L7C5BAO B5;5B09?. 5@2K9 G5;>25:, 2>H54H89 2 :;0AA, 2E>48B 2 A8AB5<C 8 8A?>;=O5B :><0=4K, ?@8254Q==K5 2 25@E=59 G0AB8 8;;NAB@0F88. 5@20O :><0=40 A>740QB 2 B5:CI59 48@5:B>@88 8<5=>20==K9 :0=0; NP. ><0=40 mknod(1) 8A?>;L7C5B A8AB5<=K9 2K7>2 mknod(2) 4;O A>740=8O 8<5=>20==>3> :0=0;0. chmod ug+w NP 405B ?@020 70?8A8 2 MB>B D09; ;N1><C ?@>F5AAC B>3> 65 ?>;L7>20B5;O 8;8 ;N1>3> ?>;L7>20B5;O 87 B>9 65 3@C??K. line < NP G8B05B >4=C AB@>:C 87 A2>53> ?5@5=0?@02;5==>3> AB0=40@B=>3> 22>40, B.5. 87 8<5=>20==>3> :0=0;0 NP, 8 2K2>48B ?@>G8B0==>5 =0 A2>9 AB0=40@B=K9 2K2>4. A;8 =8:B> 5IQ =5 >B:@K; 8<5=>20==K9 :0=0; =0 70?8AL, line(1) 1C45B A?0BL, >6840O 22>40 >B 4@C38E ?@>F5AA>2. "5?5@L =0 >4=>< 87 M:@0==KE B5@<8=0;>2 :><0=4>9 cat(1) A>45@68<>5 F5;>3> D09;0 :>?8@C5BAO 2 8<5=>20==K9 :0=0;. line(1) =0 ?5G0B0NI5< B5@<8=0;5 ?@>AK?05BAO, :0: B>;L:> cat(1) >B:@K205B 8<5=>20==K9 :0=0; =0 70?8AL; 70B5< >=0 G8B05B ?5@2CN AB@>:C 87 :0=0;0 8 ?5G0B05B 55 =0 A2>9 AB0=40@B=K9 2K2>4. A;8 2 1CD5@5 :0=0;0 =0E>4OBAO 40==K5, MB> <>6=> >1=0@C68BL ?> B><C, GB> B0:>9 :0=0; 8<55B =5=C;52CN 4;8=C. -B> <>6=> ?>:070BL, 5A;8 2K720BL :><0=4K line 8 ls -l 87 ?>@>645==>3> 8=B5@?@5B0B>@0 shell, :>B>@K9 ?>;CG05B 22>4 87 NP. ><0=40 ls =5 8A?>;L7C5B AB0=40@B=K9 22>4; 55 ?@8ACBAB285 =C6=> B>;L:> 4;O B>3>, GB>1K ?>:070BL, GB> 4 AB@>:8, A>45@60I85 108 A8<2>;>2, >AB0NBAO 2 :0=0;5 4> B5E ?>@, ?>:0 G8B0NI89 ?@>F5AA 0:B825=. >340 ?@>F5AA 7025@H8BAO, 2 8<5=>20==>< :0=0;5 =5 1C45B =8 >4=>3> 109B0. !>45@68<>5 D09;0 data B0:>2>: $ cat data ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ + + -  =0 ?5G0B0NI5< B5@<8=0;5: $ /etc/mknod NP p $ chmod ug+w NP $ $ # NOTE "line < NP" reads first line of NP $ (line; ls -l NP) <NP ABCDEFGHIJKLMNOPQRSTUVWXYZ prw-rw---- 1 tmm unixc 108 Sep 19 13:55 NP $ $ ls -l NP prw-rw---- 1 tmm unixc 0 Sep 19 13:56 NP =0 M:@0==>< B5@<8=0;5: $ ls -l NP prw-rw---- 1 tmm unixc 0 Sep 19 13:54 NP $ cat data >NP + >?>;=8B5;L=0O 8=D>@<0F8O (=0 A;CG09, 5A;8 =5 2A5 >1CG05<K5 E>@>H> 7=0NB shell): 5A;8 2K E>B8B5 ?@>G8B0BL 2A5 AB@>:8 87 8<5=>20==>3> :0=0;0, ?> >4=>9 70 @07, :><0=40 line(1) 4>;6=0 8A?>;L7>20BLAO 2 F8:;5, 0 22>4 MB>3> F8:;0 4>;65= 1KBL ?5@5=0?@02;5= 87 8<5=>20==>3> :0=0;0. !>740=85 8<5=>20==KE :0=0;>2 !8AB5<=K9 2K7>2 mknod(2) 8A?>;L7C5BAO 4;O A>740=8O 48@5:B>@88, 8<5=>20==>3> :0=0;0, A8<2>;L=>3> 8;8 1;>G=>3> A?5F80;L=>3> D09;0 8;8 >1KG=>3> D09;0. ">;L:> 8<5=>20==K5 :0=0;K <>3CB 1KBL A>740=K >1KG=K< ?>;L7>20B5;5<; D09;K >AB0;L=KE B8?>2 A>740NBAO B>;L:> AC?5@?>;L7>20B5;5<. @3C<5=BK A8AB5<=>3> 2K7>20 mknod(2): path - C:070B5;L =0 8<O A>740205<>3> D09;0 8 ?CBL : =5<C mode - B8? D09;0 8 ?@020 4>ABC?0 : =5<C. 5=C;52>5 7=0G5=85 cmask <>65B 8A:;NG8BL =5:>B>@K5 87 7040==KE ?@02. dev - 7028AOI85 >B :>=D83C@0F88 40==K5 4;O A?5F80;L=>3> D09;0. ;O 8<5=>20==KE :0=0;>2 MB>B ?0@0<5B@ =5 8A?>;L7C5BAO 8 <>65B 1KBL =C;52K<. >72@0I05<>5 7=0G5=85 ?>:07K205B CA?5E 8;8 =5C40GC. 1@0B8B5 2=8<0=85, GB> 2 ?0@0<5B@5 mode 8A?>;L7C5BAO =5 B>;L:> <;04H85 12 18B, :0: 2 0=0;>38G=>< ?0@0<5B@5 open(2) 8 chmod(2), 0 2A5 16. !B0@H85 4 18B0 mode :>48@CNB B8? A>740205<>3> 8=>40, :0: 8 2 ?>;5 st_mod AB@C:BC@K stat; open(2) 8 chmod(2) =5 ?>72>;ONB 704020BL 8 87<5=OBL B8? 8=>40, 0 mknod(2) B@51C5B 53> C:070BL. @8<5@: A;54CNI89 >?5@0B>@ A>740QB 2 B5:CI59 48@5:B>@88 8<5=>20==K9 :0=0; NP A ?@020<8 4>ABC?0 rw-rw----. >=AB0=B0 S_IFIFO 87 <sys/stat.h> 8<55B 7=0G5=85 010000, GB> >7=0G05B D09; B8?0 8<5=>20==>3> :0=0;0, 8725AB=K9 B0:65 :0: A?5F80;L=K9 FIFO-D09;. ;O 8A?>;L7>20=8O S_IFIFO, ?5@54 <sys/stat.h> =C6=> 2:;NG8BL <sys/types.h>, ?>B><C GB> <sys/stat.h> 8A?>;L7C5B <=>385 87 typedef, >?@545;5==KE 2 MB>< D09;5. #include <sys/types.h> #include <sys/stat.h> mknod("NP", S_IFIFO | 0660, 0); <5=>20==K5 :0=0;K <>3CB C40;OBLAO A ?><>ILN rm(1) 8;8 unlink(2). <5=>20==K9 :0=0; <>65B 1KBL A>740= 2 ;N1>9 <><5=B 4> 53> ?5@2>3> 8A?>;L7>20=8O 8 C40;Q= 2 ;N1>5 2@5<O ?>A;5 MB>3>.  SVR4 4>102;5=0 181;8>B5G=0O DC=:F8O mkfifo(3C), M:2820;5=B=0O mknod(2), 345 ?0@0<5B@ mode 2:;NG05B D;03 S_IFIFO. 5 A;54C5B ?CB0BL FIFO-D09;K A A>:5B0<8 Unix (Unix domain sockets). !>:5BK Unix, 2?5@2K5 2254Q==K5 2 BSD Unix 8 ?>445@68205<K5 1>;LH8=AB2>< A>2@5<5==KE Unix-A8AB5<, 2 B>< G8A;5 8 SVR4, 2 @O45 >B=>H5=89 ?>E>68 =0 FIFO-D09;K.  FIFO-D09;K, 8 A>:5BK Unix 8<5NB 8<O 2 D09;>2>9 A8AB5<5, <>3CB 8A?>;L7>20BLAO 4;O :><<C=8:0F88 =5@>4AB25==KE ?@>F5AA>2 8 2K40NB D09;>2K9 45A:@8?B>@, A :>B>@K< <>6=> 8A?>;L7>20BL 2K7>2K read(2), write(2) 8 select(3C). "0:65 ?>@O4>: 70:@KB8O A>:5B>2 8 FIFO-D09;>2 2> <=>3>< 0=0;>38G5=. 4=0:> A>:5BK 8<5NB 4@C3>9 B8? 8=>40 (S_IFSOCK) 8 ?@>F54C@0 8E A>740=8O 8 >B:@KB8O >B;8G05BAO >B ?@>F54C@K A>740=8O 8 >B:@KB8O FIFO-D09;>2. @>F54C@0 A>740=8O 8 >B:@KB8O A>:5B>2 Unix >?8A0=0 =0 AB@0=8F5 @C:>2>4AB20 socket(3SOCKET). 0 MB>9 65 AB@0=8F5 >?8A0=0 8 ?@>F54C@0 A>740=8O A5B52KE A>:5B>2. A>15==>AB8 A8AB5<=KE 2K7>2>2 !;54CNI85 A8AB5<=K5 2K7>2K 8<5NB >A>15==>AB8 ?@8 @01>B5 A 8<5=>20==K<8 :0=0;0<8: open(2) <5=>20==K9 :0=0; >B:@K205BAO B0: 65, :0: 8 >1KG=K9 D09;, => A 4>?>;=8B5;L=K<8 >A>15==>ABO<8. 0: ?@028;>, 5A;8 2K >B:@K205B5 8<5=>20==K9 :0=0; 4;O GB5=8O, A8AB5<=K9 2K7>2 open(2) 1C45B >6840BL, ?>:0 :0:>9-B> 4@C3>9 ?@>F5AA =5 >B:@>5B MB>B 65 :0=0; 4;O 70?8A8, 8 =0>1>@>B. 4=0:>, 5A;8 2K >B:@K20B5B5 8<5=>20==K9 :0=0; 4;O GB5=8O A CAB0=>2;5==K<8 D;030<8 O_NDELAY 8;8 O_NONBLOCK, open(2) =5<54;5==> 25@=QB 20< ?@028;L=K9 45A:@8?B>@ D09;0, 4065 5A;8 =8 >48= ?@>F5AA 5IQ =5 >B:@K; 53> 4;O 70?8A8. A;8 2K >B:@K205B5 :0=0; =0 70?8AL, => =8:B> 5IQ =5 >B:@K; 53> 4;O GB5=8O, open(2) A D;030<8 O_NDELAY 8;8 O_NONBLOCK 25@=5B :>4 =5C40G8. close(2) -B>B 2K7>2 8A?>;L7C5BAO >1KG=K< >1@07>< 8 70:@K205B 8<5=>20==K9 :0=0;, B0: 65 :0: 8 ;N1>9 D09;, :>340 70:>=G5=0 @01>B0 A =8<. 865 >?8A0=>, :0: >= 459AB2C5B =0 read(2) 8 write(2). read(2) -B>B A8AB5<=K9 2K7>2 G8B05B AB>;L:> 40==KE, A:>;L:> =0 <><5=B 2K7>20 5ABL 2 :0=0;5. A;8 :>;8G5AB2> 109B 2 :0=0;5 <5=LH5, G5< B@51C5BAO, read(2) 2>72@0I05B 7=0G5=85 <5=LH55, G5< 53> ?>A;54=89 0@3C<5=B. read(2) 2>72@0I05B 0 5A;8 >1=0@C68205B, GB> 4@C3>9 :>=5F :0=0;0 1K; 70:@KB. A;8 :0=0; ?CAB, => D09;>2K9 45A:@8?B>@ 4@C3>3> :>=F0 5IQ >B:@KB), read(2) 1C45B 701;>:8@>20=. write(2) -B>B A8AB5<=K9 2K7>2 254QB A51O 0=0;>38G=> 70?8A8 2 =58<5=>20==K9 :0=0;. A;8 G8B0NI89 ?@>F5AA 70:@>5B A2>9 :>=5F :0=0;0, ?8HCI89 ?@>F5AA ?>;CG8B A83=0; SIGPIPE ?@8 ?>?KB:5 70?8A8 2 MB>B :0=0;. lseek(2), mmap(2) -B>B A8AB5<=K9 2K7>2 =5 @01>B05B, B0: :0: =5B A?>A>10 ?5@5G8B0BL 40==K5 87 :0=0;0; GB5=85 @07@CH05B 8E. dup(2) -B>B A8AB5<=K9 2K7>2 ?@0:B8G5A:8 =5 8A?>;L7C5BAO A 8<5=>20==K<8 :0=0;0<8 poll(2) 8 select(3C). -B8 2K7>2K G0AB> 8A?>;L7CNBAO 4;O <C;LB8?;5:A8@>20=8O 22>40-2K2>40 2 :0=0;K, 5A;8 ?@>F5AAC =5>1E>48<> @01>B0BL A =5A:>;L:8<8 :0=0;0<8 8;8 4@C38<8 CAB@>9AB20<8 8;8 ?A524>CAB@>9AB20<8, @01>B0 A :>B>@K<8 <>65B ?@825AB8 : 1;>:8@>2:5. fcntl(2) 545B A51O 0=0;>38G=> =58<5=>20==K< :0=0;0<. A?>;L7C5BAO, 3;02=K< >1@07><, 4;O 87<5=5=8O D;03>2 O_NDELAY 8 O_NONBLOCK. # 8<5=>20==KE :0=0;>2, D;038 O_NDELAY 8 O_NONBLOCK <>6=> 1K;> 1K CAB0=>28BL ?@8 >B:@KB88, => C 8<5=>20==KE :0=0;>2 MB8 D;038 ?5@53@C65=K: >=8 2;8ONB :0: =0 ?>2545=85 open(2), B0: 8 =0 ?>2545=85 read(2)/write(2), ?@8GQ< 2;8ONB ?> @07=><C. >MB><C 2K <>65B5 70E>B5BL 8A?>;L7>20BL >48= 87 MB8E D;03>2 ?@8 open(2), => =5 ?@8 @01>B5 A :0=0;><, 8;8 =0>1>@>B.  >1>8E A;CG0OE, ?5@54 GB5=85< 8 70?8ALN, D;03 =5>1E>48<> CAB0=>28BL 2 B@51C5<>5 7=0G5=85 ?@8 ?><>I8 fcntl(2). <5=>20==K5 :0=0;K - @8<5@ - !E5<0 @8<5@ =0 A;54CNI59 8;;NAB@0F88 ?>:07K205B ?>;57=>5 ?@8;>65=85 8<5=>20==KE :0=0;>2. @8<5@ A>AB>8B 87 ?@>F5AA0 D09;>2>3> A5@25@0 8 ?@>F5AA0-:;85=B0. 45AL A5@25@=K9 ?@>F5AA >68405B, ?>:0 5<C G5@57 >1I54>ABC?=K9 8<5=>20==K9 :0=0; =5 ?5@5404CB 8<O >1KG=>3> D09;0 8 8<O ;8G=>3> 8<5=>20==>3> :0=0;0, A>740==>3> :;85=B>< 4;O ?>;CG5=8O A>45@68<>3> B@51C5<>3> D09;0. ;85=B @0A?5G0BK205B A>45@68<>5 >1KG=>3> D09;0, ?>;CG5==>5 >B A5@25@0. server.h: 1 struct message { 2 char privfifo[15];/* name of private named pipe */ 3 char filename[100];/* name of requested file */ 4 }; 5 6 #define PUBLIC "Public"/* name of public named pipe */ 7 #define LINESIZE 512 8 #define NUMTRIES 3 <5=>20==K5 :0=0;K - @8<5@ - ;85=B @>3@0<<0-:;85=B A>7405B ;8G=K9 8<5=>20==K9 :0=0;, ?>AK;05B 8<5=0 MB>3> :0=0;0 8 B@51C5<>3> D09;0 D09;>2><C A5@25@C G5@57 >1I54>ABC?=K9 8<5=>20==K9 :0=0;. 0B5< >=0 @0A?5G0BK205B A>45@68<>5 D09;0, ?>;CG5==>5 G5@57 ;8G=K9 8<5=>20==K9 :0=0;. 1-2 -B8 D09;K >?8AK20NB @07;8G=K5 B8?K D09;>2 4;O A8AB5<=>3> 2K7>20 mknod(2). 13-17 !8=B578@C5BAO 8<O ;8G=>3> ?@>3@0<<=>3> :0=0;0, 8 A>740QBAO A0< MB>B :0=0; A ?@020<8 GB5=8O 8 70?8A8 4;O 2A5E ?@>F5AA>2. 18-23 1I54>ABC?=K9 8<5=>20==K9 :0=0; >B:@K205BAO =0 70?8AL, 8 2 =53> 70?8AK20NBAO 8<5=0 ;8G=>3> :0=0;0 8 B@51C5<>3> D09;0. 25-27 8G=K9 8<5=>20==K9 :0=0; >B:@K205BAO 4;O GB5=8O. 29-30 0A?5G0BK20NBAO 40==K5, ?>;CG5==K5 87 ;8G=>3> :0=0;0. 31-32 8G=K9 8<5=>20==K9 :0=0; 70:@K205BAO 8 C40;O5BAO 87 B5:CI59 48@5:B>@88. 0<5BLB5, GB> A5@25@ 8 :;85=B 4>;6=K A>1;N40BL A>3;0H5=85 > D>@<0B5 40==KE, 70?8AK205<KE 2 >1I54>ABC?=K9 :0=0;. $09;>2K9 A5@25@ @01>B05B B0:8< >1@07><: $ server & $ client data ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ $09;: client1.c + + -    - " 1 #include <sys/types.h> 2 #include <sys/stat.h> 3 #include <fcntl.h> 4 #include <sys/uio.h> 5 #include "server.h" 6 7 main(int argc, char **argv)/* client process */ 8 { 9 struct message msg; 10 int n, fdpub, fdpriv; 11 char line[LINESIZE]; 12 13 sprintf(msg.privfifo, "Fifo%d", getpid()); 14 if(mknod(msg.privfifo,S_IFIFO | 0666,0) == -1) { 15 perror(msg.privfifo); 16 exit(1); 17 } 18 if ((fdpub = open(PUBLIC, O_WRONLY)) == -1) { 19 perror(PUBLIC); 20 exit(2); 21 } 22 strcpy(msg.filename, argv[1]); 23 write(fdpub, (char *) &msg, sizeof(msg)); 24 25 if((fdpriv = open(msg.privfifo,O_RDONLY)) == -1) { 26 perror(msg.privfifo); 27 exit(3); 28 } 29 while ((n = read(fdpriv, line, LINESIZE)) > 0) 30 write(1, line, n); 31 close(fdpriv); 32 unlink(msg.privfifo); 33 exit(0); 34 } <5=>20==K5 :0=0;K - @8<5@ - $09;>2K9 A5@25@  struct message A>45@60BAO 8<O ;8G=>3> 8<5=>20==>3> :0=0;0 2<5AB5 A 8<5=5< B@51C5<>3> D09;0. @>3@0<<0 D09;>2>3> A5@25@0 2 MB>< ?@8<5@5 >B:@K205B =0 GB5=85 >1I54>ABC?=K9 8<5=>20==K9 :0=0;. = A?8B 4> B5E ?>@, ?>:0 :0:>9-=81C4L ?@>F5AA-:;85=B =5 >B:@>5B 4@C3>9 :>=5F MB>3> :0=0;0. ">340 A5@25@ G8B05B 87 >1I54>ABC?=>3> :0=0;0 8<5=0 ;8G=>3> :0=0;0 8 B@51C5<>3> D09;0 2 A>>B25BAB2CNI85 ?>;O AB@C:BC@K. 0B5<, A5@25@ >B:@K205B ;8G=K9 :0=0; 8 B@51C5<K9 D09;. !>45@68<>5 D09;0 :>?8@C5BAO 2 :0=0;, 8 D09; 70:@K205BAO. 0B5<, 70:@K2 >1I54>ABC?=K9 :0=0;, ?@>3@0<<0 2>72@0I05BAO =0704, A=>20 >B:@K205B >1I54>ABC?=K9 :0=0; 8 645B >1@0I5=8O A;54CNI53> :;85=B0. 9 45AL >?@545;O5BAO AB@C:BC@0 A>>1I5=8O, :>B>@>5 G8B05BAO 87 >1I54>ABC?=>3> 8<5=>20==>3> :0=0;0. 14-17 1I54>ABC?=K9 :0=0; >B:@K205BAO 4;O GB5=8O. !8AB5<=K9 2K7>2 open(2) 1;>:8@C5BAO, 5A;8 =8:0:>9 ?@>F5AA-:;85=B =5 >B:@K205B 4@C3>9 :>=5F :0=0;0. 18-19 7 >1I54>ABC?=>3> :0=0;0 G8B05BAO A>>1I5=85, A>45@60I55 8<5=0 ;8G=>3> :0=0;0 8 B@51C5<>3> D09;0. 20-23 "@51C5<K9 D09; >B:@K205BAO 4;O GB5=8O. 24 8G=K9 :0=0; >B:@K205BAO 4;O 70?8A8. $09;>2K9 A5@25@ A?8B, ?>:0 :;85=B =5 >B:@>5B A2>9 :>=5F ;8G=>3> :0=0;0. A;8 2>7=8:;8 ?@>1;5<K, 8 :;85=B =5 <>65B >B:@KBL :0=0;, A5@25@ ?>28A=5B 2=CB@8 MB>3> open(2). 5H5=85 MB>9 ?@>1;5<K 1C45B ?>:070=> 2 A;54CNI5< ?@8<5@5. 28-29 0==K5 87 D09;0 :>?8@CNBAO 2 ;8G=K9 8<5=>20==K9 :0=0;. 30-31 >340 :>?8@>20=85 70:>=G5=>, B@51C5<K9 D09; 8 ;8G=K9 8<5=>20==K9 :0=0; 70:@K20NBAO. 33-34 1I54>ABC?=K9 :0=0; B0:65 70:@K205BAO, 8 A5@25@ ?5@5E>48B : A;54CNI5<C 28B:C F8:;0. @8G8=0 4;O 70:@KB8O 8 ?>2B>@=>3> >B:@KB8O A>AB>8B 2 B><, GB> E>G5BAO, GB>1K D09;>2K9 A5@25@ A?0; =0 open(2), >6840O 70?@>A>2. 0<5BLB5, GB> ?@>3@0<<0 =8:>340 =5 7025@H05BAO. $09;: server1.c + + -    - $+ !   1 #include <sys/types.h> 2 #include <fcntl.h> 3 #include <sys/stat.h> 4 #include "server.h" 5 6 main(int argc, char **argv)/* server process */ 7 { 8 int fdpub, fdpriv, fd; 9 struct message msg; 10 int n; 11 char line[LINESIZE]; 12 13 loop:/* forever */ 14 if ((fdpub = open(PUBLIC, O_RDONLY)) == -1) { 15 perror(PUBLIC); 16 exit(1); 17 } 18 while (read(fdpub, (char *) &msg, 19 sizeof(msg)) > 0) { 20 if ((fd = open(msg.filename, O_RDONLY)) == -1) { 21 perror(msg.filename); 22 break; 23 } 24 if ((fdpriv = open(msg.privfifo, O_WRONLY)) == -1) { 25 perror(msg.privfifo); 26 break; 27 } 28 while ((n = read(fd, line, LINESIZE)) > 0) 29 write(fdpriv, line, n); 30 close(fd); 31 close(fdpriv); 32 } 33 close(fdpub); 34 goto loop; 35 } <5=>20==K5 :0=0;K - @8<5@ - $09;>2K9 A5@25@ 157 1;>:8@>2:8  MB>9 ?@>3@0<<5 D09;>2K9 A5@25@ <>48D8F8@>20= B0:, GB>1K @5H8BL ?@>1;5<C 2>7<>6=>3> 7028A0=8O 2 A;CG05, 5A;8 A5@25@ >B:@K205B ;8G=K9 8<5=>20==K9 :0=0;, 0 :;85=B =5 >B:@K205B A2>9 :>=5F MB>3> :0=0;0. ;O MB>3> ;8G=K9 :0=0; >B:@K205BAO A D;03>< O_NDELAY. "5?5@L A5@25@ ?KB05BAO >B:@KBL ;8G=K9 :0=0; =5A:>;L:> @07 8 A405BAO ?>A;5 7040==>3> G8A;0 =5C40G. 24-30 45AL ;8G=K9 8<5=>20==K9 :0=0; >B:@K205BAO 4;O 70?8A8. A;8 :;85=B =5 >B:@K; A2>9 :>=5F :0=0;0 4;O GB5=8O, open(2) 2>72@0I05B =5C40GC, 8 A5@25@ 45;05B A;54CNICN ?>?KB:C ?>A;5 ?0C7K 2 >4=C A5:C=4C. &8:; 7025@H05BAO, 5A;8 :0=0; 1K; >B:@KB, 8;8 ?>A;5 7040==>3> G8A;0 =5C40G. 31-34 A;8 >B:@KB85 ;8G=>3> 8<5=>20==>3> :0=0;0 =5 C40;>AL, ?@>3@0<<0 2>72@0I05BAO : =0G0;C F8:;0. $09;: server2.c + + -    - $+ !      1 #include <sys/types.h> 2 #include <fcntl.h> 3 #include <sys/stat.h> ... 13 loop:/* forever */ 14 if ((fdpub = open(PUBLIC, O_RDONLY)) == -1) { 15 perror(PUBLIC); 16 exit(1); 17 } 18 while (read(fdpub, (char *) &msg, 19 sizeof(msg)) > 0) { 20 if ((fd = open(msg.filename, O_RDONLY)) == -1) { 21 perror(msg.filename); 22 break; 23 } 24 for (i = 0; i < NUMTRIES; i++) { 25 if ((fdpriv = open(msg.privfifo, O_WRONLY | 26 O_NDELAY)) == -1) 27 sleep(1); 28 else 29 break; 30 } 31 if (fdpriv == -1) { 32 perror(msg.privfifo); 33 break; 34 } 35 while ((n = read(fd, line, LINESIZE)) > 0) 36 write(fdpriv, line, n); 37 close(fd); 38 close(fdpriv); 39 } 40 close(fdpub); 41 goto loop; 42 } mm,GGtj5&2 fh6(v  2!v#(+-33\3 & F$ & F$ & F$ & F  & Fx\34=&@A.DDEFHHNHHIKO~SSSTUV\bc & F$ & F$ceg&lmmopqtrjtlttttttNuPuuuuu*v$*v4vnvvwwXwwwww.xxxx@yryyyz:zLzRzrzrz|z~zzx}J~~ЀPRVX~PԂ & F$Ԃ&&tz,2t>ć2pʉ4NN2Zjl rr֛؜"Z24 & F$4P@pП:H.DΡ4ƣƣ$RFܥBrЦ^Lt* & F$*³>DηзXZҼX:pN & F$ & F$N&nNTBtzzFHFV@4RFr & F$ & F$npPz$Jt<FDL$& & F$&bdfn8<R "$"8&(N     p (VJ & F$J>&B`!J#d&())+,L0N00,4@4B4h4 & F$ & F$h4465@5D55566f6f89 :$;;<<==>*>`>>> & F$>?8?:?C`CtCtCCD2DFDDDDtEEEETFFFFG*G,GGGJHLM$MNO2P~RSSUUVVVV*W^WdWWWXNXhXXXX>Y>YjYYYYZZZZZb[[[[&\b\\\\\]]]] & F$]x`bcccNdPddddd0eeeeeBfvffg6gFgggg(hHh^hxhhhhiiiiijj@jbjrjtjx". A!n"n#n$n3P(20՜.+,D՜.+,\Root Entry F CompObjjOle 1TableS SummaryInformation(-WordDocument $DocumentSummaryInformation80t