home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / unix-prt.doc / chap11.prt < prev    next >
Encoding:
Text File  |  1991-11-06  |  115.6 KB  |  1,988 lines

  1.  
  2.  
  3.  
  4.     âïÇéÇ 11
  5.  
  6.     EéçÇêîÄäàëæÆéêà ÅÉÄûàææÄéF
  7.  
  8.  
  9.  
  10.  
  11.     ì὿τ¿Ñ  ¼Ñσá¡¿º¼«ó  óºá¿¼«ñÑ⌐ßΓó¿∩  ñáÑΓ »α«¿ºó«½∞¡δ¼ »α«µÑßßἠ󫺼«ª-
  12. ¡«ßΓ∞ «ßπΘÑßΓó½∩Γ∞ «í¼Ñ¡ ñá¡¡δ¼¿ ¿ ß¿¡σα«¡¿º¿α«óáΓ∞ ßó«Ñ óδ»«½¡Ñ¡¿Ñ ß ñαπú¿-
  13. ¼¿ »α«µÑßßἿ. îδ πªÑ αáßß¼«Γαѽ¿ ¡Ñ߬«½∞¬« Σ«α¼  óºá¿¼«ñÑ⌐ßΓó¿∩  »α«µÑßß«ó,
  14. ΓᬿѠ ¬á¬  ¬á¡á½∞¡á∩  ßó∩º∞,  ¿ß»«½∞º«óá¡¿Ñ »«¿¼Ñ¡«óá¡¡δσ ¬á¡á½«ó ¿ »«ß佬á
  15. ß¿ú¡á½«ó. èá¡á½δ (¡Ñ»«¿¼Ñ¡«óá¡¡δÑ) ¿¼ÑεΓ ¡Ññ«ßΓáΓ«¬, ßó∩ºá¡¡δ⌐  ß  ΓѼ,  τΓ«
  16. «¡¿ ¿ºóÑßΓ¡δ Γ«½∞¬« »«Γ«¼¬á¼ »α«µÑßßá, óδºóáóΦÑú« ß¿ßΓѼ¡πε Σπ¡¬µ¿ε pipe: ¡Ñ
  17. ¿¼ÑεΘ¿Ñ α«ñßΓóÑ¡¡δσ ßó∩ºÑ⌐ »α«µÑßßδ ¡Ñ ¼«úπΓ óºá¿¼«ñÑ⌐ßΓó«óáΓ∞ ¼Ñªñπ ß«í«⌐ ß
  18. »«¼«Θ∞ε  ¡Ñ»«¿¼Ñ¡«óá¡¡δσ  ¬á¡á½«ó.  ìÑß¼«Γα∩ ¡á Γ«, τΓ« »«¿¼Ñ¡«óá¡¡δÑ ¬á¡á½δ
  19. »«ºó«½∩εΓ óºá¿¼«ñÑ⌐ßΓó«óáΓ∞ ¼Ñªñπ ß«í«⌐ »α«µÑßßá¼,  ¡Ñ  ¿¼ÑεΘ¿¼  α«ñßΓóÑ¡¡δσ
  20. ßó∩ºÑ⌐, «¡¿ ¡Ñ ¼«úπΓ ¿ß»«½∞º«óáΓ∞ß∩ ¡¿ ó ßÑΓ¿ (ß¼. ú½áóπ 13), ¡¿ ó «αúá¡¿ºá-
  21. µ¿¿ ¼¡«ªÑßΓóÑ¡¡δσ ßó∩ºÑ⌐ ¼Ñªñπ αẽ¿τ¡δ¼¿ úαπ»»á¼¿ óºá¿¼«ñÑ⌐ßΓóπεΘ¿σ »α«µÑß-
  22. ß«ó:  »«¿¼Ñ¡«óá¡¡δ⌐ ¬á¡á½ ¡Ñ »«ññáÑΓß∩ Γᬫ¼π ¼π½∞Γ¿»½Ñ¬ß¿α«óá¡¿ε, »α¿ ¬«Γ«-
  23. α«¼ π ¬áªñ«⌐ »áαδ óºá¿¼«ñÑ⌐ßΓóπεΘ¿σ »α«µÑß߫󠿼ѽß∩ íδ ßó«⌐ óδñѽѡ¡δ⌐  ¬á-
  24. ¡á½. Åα«¿ºó«½∞¡δÑ »α«µÑßßδ ¼«úπΓ ΓᬪѠßó∩ºδóáΓ∞ß∩ ¼Ñªñπ ß«í«⌐ í½áú«ñáα∩ »«-
  25. ßδ½¬Ñ  ß¿ú¡á½«ó  ß  »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ kill, «ñ¡á¬« ΓᬫѠ"ß««íΘÑ¡¿Ñ"
  26. ß«ßΓ«¿Γ ¿º «ñ¡«ú« Γ«½∞¬« ¡«¼Ñαá ß¿ú¡á½á.
  27.     é ñá¡¡«⌐ ú½áóÑ «»¿ßδóáεΓß∩ ñαπú¿Ñ Σ«α¼δ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó. é  ¡á-
  28. τá½Ñ  αÑτ∞  ¿ñÑΓ  « Γαáßß¿α«ó¬Ñ »α«µÑßß«ó, « Γ«¼, ¬á¬¿¼ «íαẫ¼ «ñ¿¡ »α«µÑßß
  29. ß½Ññ¿Γ ºá σ«ñ«¼ óδ»«½¡Ñ¡¿∩ ñαπú«ú«  »α«µÑßßá,  ºáΓѼ  αáßß¼áΓα¿óáÑΓß∩  »á¬ÑΓ
  30. IPC:  ß««íΘÑ¡¿∩,  αáºñѽ∩Ѽá∩ »á¼∩Γ∞ ¿ ßѼáΣ«αδ. äѽáÑΓß∩ «íº«α Γαáñ¿µ¿«¡¡δσ
  31. ¼ÑΓ«ñ«ó ßÑΓÑó«ú« óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó, óδ»«½¡∩εΘ¿σß∩ ¡á αạδσ  ¼áΦ¿¡áσ,
  32. ¿,  ¡á¬«¡Ñµ,  ñáÑΓß∩ »αÑñßΓáó½Ñ¡¿Ñ « "ú¡Ñºñáσ", »α¿¼Ñ¡∩εΘ¿σß∩ ó ß¿ßΓѼѠBSD.
  33. é«»α«ßδ ßÑΓÑó«ú« óºá¿¼«ñÑ⌐ßΓó¿∩, ¿¼ÑεΘ¿Ñ  ß»Ñµ¿á½∞¡δ⌐  σáαá¬ΓÑα,  ΓᬿѠ ¬á¬
  34. »α«Γ«¬«½δ,  áñαÑßᵿ∩  ¿  ñα.,  ¡Ñ αáßß¼áΓα¿óáεΓß∩, »«ß¬«½∞¬π «¡¿ óδσ«ñ∩Γ ºá
  35. αἬ¿ ¡áßΓ«∩ΘÑ⌐ αáí«Γδ.
  36.  
  37.  
  38.     E11.1 ÆÉÇææêÉÄéèÇ ÅÉÄûàææÄéF
  39.  
  40.     é ß¿ßΓѼѠUNIX ¿¼ÑÑΓß∩ »α«ßΓÑ⌐Φá∩ Σ«α¼á  óºá¿¼«ñÑ⌐ßΓó¿∩  »α«µÑßß«ó,  ¿ß-
  41. »«½∞ºπѼá∩  ó µÑ½∩σ «Γ½áñ¬¿, - Γαáßß¿α«ó¬á »α«µÑßß«ó. Åα«µÑßß-«Γ½áñτ¿¬, ¡á»-
  42.  
  43.      ┌───────────────────────────────────────────────────────┐
  44.      │ if ((pid = fork()) == 0)                              │
  45.      │ {                                                     │
  46.      │     /* »«Γ«¼«¬ - Γαáßß¿απѼδ⌐ »α«µÑßß */              │
  47.      │     ptrace(0,0,0,0);                                  │
  48.      │     exec("¿¼∩ Γαáßß¿απѼ«ú« »α«µÑßßá");               │
  49.      │ }                                                     │
  50.      │ /* »α«ñ«½ªÑ¡¿Ñ óδ»«½¡Ñ¡¿∩ »α«µÑßßá-«Γ½áñτ¿¬á */       │
  51.      │ for (;;)                                              │
  52.      │ {                                                     │
  53.      │     wait((int *) 0);                                  │
  54.      │     read(óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩ ñ½∩ Γαáßß¿α«ó¬¿ ¬«¼á¡ñ)   │
  55.      │     ptrace(cmd,pid,...);                              │
  56.      │     if (πß½«ó¿Ñ ºáóÑαΦÑ¡¿∩ Γαáßß¿α«ó¬¿)               │
  57.      │          break;                                       │
  58.      │ }                                                     │
  59.      └───────────────────────────────────────────────────────┘
  60.  
  61.              É¿ßπ¡«¬ 11.1. æΓαπ¬Γπαá »α«µÑßßá «Γ½áñ¬¿
  62.  
  63.                                     330
  64.  
  65.  
  66.  
  67. α¿¼Ñα sdb, »«α«ªñáÑΓ Γαáßß¿απѼδ⌐ »α«µÑßß ¿ π»αáó½∩ÑΓ Ñú« óδ»«½¡Ñ¡¿Ñ¼ ß  »«-
  68. ¼«Θ∞ε  ß¿ßΓѼ¡«⌐  Σπ¡¬µ¿¿  ptrace, αáßßΓáó½∩∩ ¿ ßíαáßδóá∩ ¬«¡Γα«½∞¡δÑ Γ«τ¬¿,
  69. ßτ¿Γδóá∩ ¿ ºá»¿ßδóá∩ ñá¡¡δÑ ó Ñú« ó¿αΓπá½∞¡«Ñ áñαÑß¡«Ñ »α«ßΓαá¡ßΓó«. Æαáßß¿-
  70. α«ó¬á »α«µÑßß«ó, Γᬿ¼ «íαẫ¼, ó¬½ετáÑΓ  ó  ßÑí∩  ß¿¡σα«¡¿ºáµ¿ε  óδ»«½¡Ñ¡¿∩
  71. »α«µÑßßá-«Γ½áñτ¿¬á ¿ Γαáßß¿απѼ«ú« »α«µÑßßá ¿ π»αáó½Ñ¡¿Ñ óδ»«½¡Ñ¡¿Ñ¼ »«ß½Ññ-
  72. ¡Ñú«.
  73.     ÅßÑóñ«»α«úαá¼¼á, »αÑñßΓáó½Ñ¡¡á∩ ¡á É¿ßπ¡¬Ñ 11.1, ¿¼ÑÑΓ Γ¿»¿τ¡πε ßΓαπ¬Γπ-
  74. απ  «Γ½áñ«τ¡«⌐ »α«úαá¼¼δ. ÄΓ½áñτ¿¬ »«α«ªñáÑΓ ¡«óδ⌐ »α«µÑßß, ºá»π߬áεΘ¿⌐ ß¿ß-
  75. ΓѼ¡πε Σπ¡¬µ¿ε ptrace, ó αѺπ½∞ΓáΓÑ τÑú« ó ß««ΓóÑΓßΓóπεΘÑ⌐  »α«µÑßßπ-»«Γ«¼¬π
  76. ºá»¿ß¿ Γáí½¿µδ »α«µÑßß«ó ∩ñα« πßΓá¡áó½¿óáÑΓ í¿Γ Γαáßß¿α«ó¬¿. Åα«µÑßß-»«Γ«¼«¬
  77. »αÑñ¡áº¡áτÑ¡ ñ½∩ ºá»π߬á (exec) Γαáßß¿απѼ«⌐ »α«úαá¼¼δ. ìá»α¿¼Ñα, Ñß½¿ »«½∞-
  78. º«óáΓѽ∞ óÑñÑΓ «Γ½áñ¬π »α«úαá¼¼δ a.out, »α«µÑßß-»«Γ«¼«¬ ºá»π߬áÑΓ Σá⌐½ ß ΓѼ
  79. ªÑ  ¿¼Ñ¡Ñ¼. ƒñα« «ΓαáíáΓδóáÑΓ Σπ¡¬µ¿ε exec «íδτ¡δ¼ »«α∩ñ¬«¼, ¡« ó Σ¿¡á½Ñ ºá-
  80. ¼ÑτáÑΓ, τΓ« í¿Γ Γαáßß¿α«ó¬¿ πßΓá¡«ó½Ñ¡, ¿ »«ßδ½áÑΓ  »α«µÑßßπ-»«Γ«¼¬π  ß¿ú¡á½
  81. »αÑαδóá¡¿∩. ìá óδσ«ñÑ ¿º Σπ¡¬µ¿¿ exec, ¬á¬ ¿ ¡á óδσ«ñÑ ¿º ½εí«⌐ ñαπú«⌐ Σπ¡¬-
  82. µ¿¿, ∩ñα« »α«óÑα∩ÑΓ ¡á½¿τ¿Ñ ß¿ú¡á½«ó, «í¡áαπª¿óáÑΓ Γ«½∞¬« τΓ« »«ß½á¡¡δ⌐ ß¿ú-
  83. ¡á½  »αÑαδóá¡¿∩ ¿ ¿ß»«½¡∩ÑΓ »α«úαá¼¼π Γαáßß¿α«ó¬¿ »α«µÑßßᠬᬠ«ß«íδ⌐ ß½πτá⌐
  84. «íαáí«Γ¬¿ ß¿ú¡á½«ó. çá¼ÑΓ¿ó πßΓá¡«ó¬π í¿Γá Γαáßß¿α«ó¬¿, »α«µÑßß-»«Γ«¼«¬  óδ-
  85. ó«ñ¿Γ ßó«Ñú« α«ñ¿Γѽ∩ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá, ó ¬«Γ«α«¼ »«ß½Ññ¡¿⌐ ¡áσ«ñ¿Γ-
  86. ß∩  óß½ÑñßΓó¿Ñ ¿ß»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ wait, ßá¼ »ÑαÑσ«ñ¿Γ ó ß«ßΓ«∩¡¿Ñ Γαáßß¿α«ó-
  87. ¬¿, »«ñ«í¡«Ñ ß«ßΓ«∩¡¿ε »α¿«ßΓá¡«óá (¡« ¡Ñ »«¬áºá¡¡«Ñ ¡á ñ¿áúαἼѠ ß«ßΓ«∩¡¿⌐
  88. »α«µÑßßá, ß¼. É¿ßπ¡«¬ 6.1), ¿ óδ»«½¡∩ÑΓ »ÑαѬ½ετÑ¡¿Ñ ¬«¡ΓѬßΓá.
  89.     ÆÑ¼ óαѼѡѼ ó «íδτ¡«⌐ ß¿Γπᵿ¿ »α«µÑßß-α«ñ¿Γѽ∞ («Γ½áñτ¿¬) »ÑαÑσ«ñ¿Γ ¡á
  90. »«½∞º«óáΓѽ∞߬¿⌐ πα«óÑ¡∞, «ª¿ñá∩ »«½πτÑ¡¿∩ ¿ºóÑßΓ¿∩ «Γ Γαáßß¿απѼ«ú« »α«µÑß-
  91. ßá.  è«úñá  ß««ΓóÑΓßΓóπεΘÑÑ  ¿ºóÑßΓ¿Ñ »α«µÑßß«¼-α«ñ¿ΓѽѼ íπñÑΓ »«½πτÑ¡«, «¡
  92. óδ⌐ñÑΓ ¿º ß«ßΓ«∩¡¿∩ «ª¿ñá¡¿∩ (wait), »α«τ¿ΓáÑΓ (read) óóÑñÑ¡¡δÑ  »«½∞º«óáΓÑ-
  93. ½Ñ¼  ¬«¼á¡ñδ  ¿ »αÑóαáΓ¿Γ ¿σ ó ßÑα¿ε «íαáΘÑ¡¿⌐ ¬ Σπ¡¬µ¿¿ ptrace, π»αáó½∩εΘ¿σ
  94. Γαáßß¿α«ó¬«⌐ »α«µÑßßá-»«Γ«¼¬á. æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ptrace:
  95.  
  96.     ptrace(cmd,pid,addr,data);
  97.  
  98. úñÑ ó ¬áτÑßΓóÑ cmd π¬áºδóáεΓß∩ αẽ¿τ¡δÑ ¬«¼á¡ñδ, ¡á»α¿¼Ñα,  τΓÑ¡¿∩  ñá¡¡δσ,
  99. ºá»¿ß¿  ñá¡¡δσ, ó«º«í¡«ó½Ñ¡¿∩ óδ»«½¡Ñ¡¿∩ ¿ Γ.»., pid - ¿ñÑ¡Γ¿Σ¿¬áΓ«α Γαáßß¿-
  100. απѼ«ú« »α«µÑßßá, addr - ó¿αΓπá½∞¡δ⌐ áñαÑß ∩τÑ⌐¬¿ ó  Γαáßß¿απѼ«¼  »α«µÑßßÑ,
  101. úñÑ íπñÑΓ »α«¿ºó«ñ¿Γ∞ß∩ τΓÑ¡¿Ñ ¿½¿ ºá»¿ß∞, data - µÑ½«Ñ º¡áτÑ¡¿Ñ, »αÑñ¡áº¡á-
  102. τÑ¡¡«Ñ  ñ½∩ ºá»¿ß¿. é« óαѼ∩ ¿ß»«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ptrace ∩ñα« »α«óÑ-
  103. α∩ÑΓ, ¿¼ÑÑΓß∩ ½¿ π «Γ½áñτ¿¬á »«Γ«¼«¬ ß ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼ pid  ¿  ¡áσ«ñ¿Γß∩  ½¿
  104. φëà»«Γ«¼«¬ ó ß«ßΓ«∩¡¿¿ Γαáßß¿α«ó¬¿, »«ß½Ñ τÑú« ºáó«ñ¿Γ ú½«íá½∞¡πε ßΓαπ¬Γπ-
  105. απ ñá¡¡δσ, »αÑñ¡áº¡áτÑ¡¡πε ñ½∩ »ÑαÑñáτ¿ ñá¡¡δσ ¼Ñªñπ ñóπ¼∩ »α«µÑßßἿ. ùΓ«íδ
  106. ñαπú¿Ñ  »α«µÑßßδ, óδ»«½¡∩εΘ¿Ñ Γαáßß¿α«ó¬π, ¡Ñ ¼«ú½¿ ºáΓÑαÑΓ∞ ß«ñÑন¼«Ñ φΓ«⌐
  107. ßΓαπ¬Γπαδ, «¡á í½«¬¿απÑΓß∩ ∩ñα«¼, ∩ñα« ºá»¿ßδóáÑΓ ó ¡ÑÑ »áαá¼ÑΓαδ cmd,  addr
  108. ¿  data, ó«º«í¡«ó½∩ÑΓ »α«µÑßß-»«Γ«¼«¬, »ÑαÑó«ñ¿Γ Ñú« ó ß«ßΓ«∩¡¿Ñ "ú«Γ«ó¡«ßΓ¿
  109. ¬ óδ»«½¡Ñ¡¿ε" ¿ »α¿«ßΓá¡áó½¿óáÑΓß∩ ñ« »«½πτÑ¡¿∩ «Γ ¡Ñú« «ΓóÑΓá.  è«úñá  »α«-
  110. µÑßß-»«Γ«¼«¬ »α«ñ«½ª¿Γ ßó«Ñ óδ»«½¡Ñ¡¿Ñ (ó αѪ¿¼Ñ ∩ñαá), «¡ ¿ß»«½¡¿Γ ß««ΓóÑΓ-
  111. ßΓóπεΘπε  (Γαáßß¿απѼπε) ¬«¼á¡ñπ, ºá»¿ΦÑΓ αѺπ½∞ΓáΓ ó ú½«íá½∞¡πε ßΓαπ¬Γπαπ ¿
  112. "αáºíπñ¿Γ" «Γ½áñτ¿¬á. é ºáó¿ß¿¼«ßΓ¿ «Γ Γ¿»á ¬«¼á¡ñδ »«Γ«¼«¬ ¼«ªÑΓ ó¡«ó∞  »Ñ-
  113. αÑ⌐Γ¿  ó  ß«ßΓ«∩¡¿Ñ  Γαáßß¿α«ó¬¿  ¿ «ª¿ñáΓ∞ »«ßΓπ»½Ñ¡¿∩ ¡«ó«⌐ ¬«¼á¡ñδ ¿½¿ ªÑ
  114. óδ⌐Γ¿ ¿º µ¿¬½á «íαáí«Γ¬¿ ß¿ú¡á½«ó ¿ »α«ñ«½ª¿Γ∞ ßó«Ñ óδ»«½¡Ñ¡¿Ñ.  Åα¿  ó«º«í-
  115. ¡«ó½Ñ¡¿¿  αáí«Γδ «Γ½áñτ¿¬á ∩ñα« ºá»«¼¿¡áÑΓ º¡áτÑ¡¿Ñ, ó«ºóαáΘÑ¡¡«Ñ Γαáßß¿απÑ-
  116. ¼δ¼ »α«µÑßß«¼, ß¡¿¼áÑΓ ß ú½«íá½∞¡«⌐ ßΓαπ¬Γπαδ í½«¬¿α«ó¬π ¿ ó«ºóαáΘáÑΓ π»αáó-
  117. ½Ñ¡¿Ñ »«½∞º«óáΓѽε.
  118.     àß½¿ ó ¼«¼Ñ¡Γ »ÑαÑσ«ñá »α«µÑßßá-»«Γ«¼¬á ó ß«ßΓ«∩¡¿Ñ Γαáßß¿α«ó¬¿ «Γ½áñτ¿¬
  119. ¡Ñ ¡áσ«ñ¿Γß∩ ó ß«ßΓ«∩¡¿¿ »α¿«ßΓá¡«óá (wait), «¡ ¡Ñ «í¡áαπª¿Γ  »«Γ«¼¬á,  »«¬á
  120. ¡Ñ  «íαáΓ¿Γß∩ ¬ Σπ¡¬µ¿¿ wait, »«ß½Ñ τÑú« ¡Ñ¼Ññ½Ñ¡¡« óδ⌐ñÑΓ ¿º Σπ¡¬µ¿¿ ¿ »α«-
  121. ñ«½ª¿Γ αáí«Γπ »« óδΦÑ«»¿ßá¡¡«¼π »½á¡π.
  122.  
  123.  
  124.  
  125.                                     331
  126.     ┌──────────────────────────────────────────────────────┐
  127.     │ int data[32];                                        │
  128.     │ main()                                               │
  129.     │ {                                                    │
  130.     │     int i;                                           │
  131.     │     for (i = 0; i < 32; i++)                         │
  132.     │         printf("data[%d] = %d\n@,i,data[i]);         │
  133.     │     printf("ptrace data addr Ox%x\n",data);          │
  134.     │ }                                                    │
  135.     └──────────────────────────────────────────────────────┘
  136.  
  137.       É¿ßπ¡«¬ 11.2. Åα«úαá¼¼á trace (Γαáßß¿απѼδ⌐ »α«µÑßß)
  138.  
  139.  
  140.     Éáßß¼«Γα¿¼ ñóÑ »α«úαá¼¼δ, »α¿óÑñÑ¡¡δÑ ¡á É¿ßπ¡¬áσ 11.2 ¿ 11.3 ¿  ¿¼Ñ¡πÑ-
  141. ¼δÑ  trace  ¿ debug, ß««ΓóÑΓßΓóÑ¡¡«. Åα¿ ºá»π߬Ѡ»α«úαá¼¼δ trace ß ΓÑନ¡á½á
  142. ¼áßß¿ó data íπñÑΓ ß«ñÑαªáΓ∞ ¡π½ÑóδÑ º¡áτÑ¡¿∩; »α«µÑßß óδó«ñ¿Γ áñαÑß  ¼áßß¿óá
  143. ¿  ºáóÑαΦáÑΓ  αáí«Γπ.  Åα¿ ºá»π߬Ѡ»α«úαá¼¼δ debug ß »ÑαÑñáτÑ⌐ Ñ⌐ ó ¬áτÑßΓóÑ
  144. »áαá¼ÑΓαá º¡áτÑ¡¿∩,  óδóÑñÑ¡¡«ú«  »α«úαá¼¼«⌐  trace,  »α«¿ßσ«ñ¿Γ  ß½ÑñπεΘÑÑ:
  145. »α«úαἼᠠºá»«¼¿¡áÑΓ  º¡áτÑ¡¿Ñ  »áαá¼ÑΓαá  ó »ÑαѼѡ¡«⌐ addr, ß«ºñáÑΓ ¡«óδ⌐
  146. »α«µÑßß, ß »«¼«Θ∞ε Σπ¡¬µ¿¿ ptrace »«ñú«Γáó½¿óáεΘ¿⌐ ßÑí∩ ¬ Γαáßß¿α«ó¬Ñ, ¿ ºá-
  147. »π߬áÑΓ »α«úαá¼¼π trace. ìá óδσ«ñÑ ¿º Σπ¡¬µ¿¿  exec  ∩ñα«  »«ßδ½áÑΓ  »α«µÑß-
  148. ßπ-»«Γ«¼¬π (¡áº«óѼ Ñú« Γ«ªÑ trace) ß¿ú¡á½ SIGTRAP (ß¿ú¡á½ »αÑαδóá¡¿∩), »α«-
  149.  
  150.     ┌────────────────────────────────────────────────────────────┐
  151.     │ #define TR_SETUP 0                                         │
  152.     │ #define TR_WRITE 5                                         │
  153.     │ #define TR_RESUME 7                                        │
  154.     │ int addr;                                                  │
  155.     │                                                            │
  156.     │ main(argc,argv)                                            │
  157.     │      int argc;                                             │
  158.     │      char *argv[];                                         │
  159.     │ {                                                          │
  160.     │      int i,pid;                                            │
  161.     │                                                            │
  162.     │      sscanf(argv[1],"%x",&addr);                           │
  163.     │                                                            │
  164.     │      if ((pid = fork() == 0)                               │
  165.     │      {                                                     │
  166.     │          ptrace(TR_SETUP,0,0,0);                           │
  167.     │          execl("trace","trace",0);                         │
  168.     │          exit();                                           │
  169.     │      }                                                     │
  170.     │      for (i = 0; i < 32, i++)                              │
  171.     │      {                                                     │
  172.     │          wait((int *) 0);                                  │
  173.     │          /* ºá»¿ßáΓ∞ º¡áτÑ¡¿Ñ i ó »α«ßΓαá¡ßΓó« »α«µÑßßá ß  │
  174.     │           * ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼ pid »« áñαÑßπ, ß«ñÑαªáΘѼπß∩ ó │
  175.     │           * »ÑαѼѡ¡«⌐ addr */                             │
  176.     │          if (ptrace(TR_WRITE,pid,addr,i) == -1)            │
  177.     │               exit();                                      │
  178.     │          addr += sizeof(int);                              │
  179.     │      }                                                     │
  180.     │      /* Γαáßß¿απѼδ⌐ »α«µÑßß ó«º«í¡«ó½∩ÑΓ óδ»«½¡Ñ¡¿Ñ */    │
  181.     │      ptrace(TR_RESUME,pid,1,0);                            │
  182.     │ }                                                          │
  183.     └────────────────────────────────────────────────────────────┘
  184.  
  185.         É¿ßπ¡«¬ 11.3. Åα«úαá¼¼á debug (Γαáßß¿απεΘ¿⌐ »α«µÑßß)
  186.  
  187.                                     332
  188.  
  189.  
  190.  
  191. µÑßß  trace »ÑαÑσ«ñ¿Γ ó ß«ßΓ«∩¡¿Ñ Γαáßß¿α«ó¬¿, «ª¿ñá∩ »«ßΓπ»½Ñ¡¿∩ ¬«¼á¡ñδ «Γ
  192. »α«úαá¼¼δ debug. àß½¿ »α«µÑßß, αÑ὿ºπεΘ¿⌐ »α«úαá¼¼π debug, ¡áσ«ñ¿½ß∩ ó ß«ß-
  193. Γ«∩¡¿¿ »α¿«ßΓá¡«óá, ßó∩ºá¡¡«ú« ß óδ»«½¡Ñ¡¿Ñ¼ Σπ¡¬µ¿¿ wait,  «¡  "»α«íπªñáÑΓ-
  194. ß∩",  «í¡áαπª¿óáÑΓ  ¡á½¿τ¿Ñ »«α«ªñÑ¡¡«ú« Γαáßß¿απѼ«ú« »α«µÑßßá ¿ óδσ«ñ¿Γ ¿º
  195. Σπ¡¬µ¿¿ wait. çáΓѼ »α«µÑßß debug óδºδóáÑΓ Σπ¡¬µ¿ε ptrace, ºá»¿ßδóáÑΓ º¡áτÑ-
  196. ¡¿Ñ »ÑαѼѡ¡«⌐ µ¿¬½á i ó »α«ßΓαá¡ßΓó« ñá¡¡δσ »α«µÑßßá trace »«  áñαÑßπ,  ß«-
  197. ñÑαªáΘѼπß∩  ó  »ÑαѼѡ¡«⌐  addr,  ¿ πóѽ¿τ¿óáÑΓ º¡áτÑ¡¿Ñ »ÑαѼѡ¡«⌐ addr; ó
  198. »α«úαἼѠtrace »ÑαѼѡ¡á∩ addr σαá¡¿Γ áñαÑß Γ«τ¬¿ óσ«ñá ó ¼áßß¿ó data. Å«ß-
  199. ½Ññ¡ÑÑ «íαáΘÑ¡¿Ñ »α«µÑßßá debug ¬ Σπ¡¬µ¿¿ ptrace óδºδóáÑΓ  ºá»π߬  »α«úαá¼¼δ
  200. trace, ¿ ó φë༫¼Ñ¡Γ ¼áßß¿ó data ß«ñÑαª¿Γ º¡áτÑ¡¿∩ «Γ 0 ñ« 31. ÄΓ½áñ-
  201. τ¿¬¿,  »«ñ«í¡δÑ  sdb,  ¿¼ÑεΓ  ñ«ßΓπ» ¬ Γáí½¿µÑ ¿ñÑ¡Γ¿Σ¿¬áΓ«α«ó Γαáßß¿απѼ«ú«
  202. »α«µÑßßá, ¿º ¬«Γ«α«⌐ «¡¿ »«½πτáεΓ ¿¡Σ«α¼áµ¿ε «í áñαÑßáσ ñá¡¡δσ, ¿ß»«½∞ºπѼδσ
  203. ó ¬áτÑßΓóÑ »áαá¼ÑΓα«ó Σπ¡¬µ¿¿ ptrace.
  204.     êß»«½∞º«óá¡¿Ñ Σπ¡¬µ¿¿ ptrace ñ½∩ Γαáßß¿α«ó¬¿ »α«µÑßß«ó ∩ó½∩ÑΓß∩  «íδτ¡δ¼
  205. ñѽ«¼, ¡« «¡« ¿¼ÑÑΓ α∩ñ ¡Ññ«ßΓáΓ¬«ó.
  206.   *  ä½∩  Γ«ú«, τΓ«íδ »α«¿ºóÑßΓ¿ »ÑαÑñáτπ »«αµ¿¿ ñá¡¡δσ ñ½¿¡«ε ó ß½«ó« ¼Ñªñπ
  207.     »α«µÑßß«¼-«Γ½áñτ¿¬«¼ ¿ Γαáßß¿απÑ¼δ¼ »α«µÑßß«¼, ∩ñα« ñ«½ª¡« óδ»«½¡¿Γ∞ τÑ-
  208.     ΓδαÑ »ÑαѬ½ετÑ¡¿∩ ¬«¡ΓѬßΓá: «¡« »ÑαѬ½ετáÑΓ ¬«¡ΓѬßΓ  ó«  óαѼ∩  ó맮óá
  209.     «Γ½áñτ¿¬«¼  Σπ¡¬µ¿¿ ptrace, ºáúαπªáÑΓ ¿ óδúαπªáÑΓ ¬«¡ΓѬßΓ Γαáßß¿απѼ«ú«
  210.     »α«µÑßßá ¿ »ÑαѬ½ετáÑΓ ¬«¡ΓѬßΓ ó¡«ó∞ ¡á »α«µÑßß-«Γ½áñτ¿¬  »«  »«½πτÑ¡¿¿
  211.     «ΓóÑΓá «Γ Γαáßß¿απѼ«ú« »α«µÑßßá. éßÑ óδΦÑπ¬áºá¡¡«Ñ ¡Ñ«íσ«ñ¿¼«, »«ß¬«½∞-
  212.     ¬π π «Γ½áñτ¿¬á ¡ÑΓ ¿¡«ú« ß»«ß«íá »«½πτ¿Γ∞ ñ«ßΓπ» ¬ ó¿αΓπá½∞¡«¼π áñαÑß¡«-
  213.     ¼π  »α«ßΓαá¡ßΓóπ Γαáßß¿απѼ«ú« »α«µÑßßá, «Γßεñá ºá¼Ññ½Ñ¡¡«ßΓ∞ »α«ΓѬ᡿∩
  214.     »α«µÑñπαδ Γαáßß¿α«ó¬¿.
  215.   * Åα«µÑßß-«Γ½áñτ¿¬ ¼«ªÑΓ óÑßΓ¿ «ñ¡«óαѼѡ¡πε Γαáßß¿α«ó¬π  ¡Ñ߬«½∞¬¿σ  »α«-
  216.     µÑßß«ó-»«Γ«¼¬«ó,  σ«Γ∩  ¡á  »αá¬Γ¿¬Ñ φΓá ó«º¼«ª¡«ßΓ∞ ¿ß»«½∞ºπÑΓß∩ αÑñ¬«.
  217.     àß½¿ íδΓ∞ í«½ÑÑ ¬α¿Γ¿τ¡δ¼, ß½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞, τΓ« «Γ½áñτ¿¬ ¼«ªÑΓ  Γαáßß¿-
  218.     α«óáΓ∞  Γ«½∞¬« ßó«¿σ í½¿ªá⌐Φ¿σ »«Γ«¼¬«ó: Ñß½¿ Γαáßß¿απѼδ⌐ »α«µÑßß-»«Γ«-
  219.     ¼«¬ ó맮óÑΓ Σπ¡¬µ¿ε fork, «Γ½áñτ¿¬ ¡Ñ íπñÑΓ ¿¼ÑΓ∞ ¬«¡Γα«½∩ ¡áñ »«α«ªñáÑ-
  220.     ¼δ¼, ó¡πτáΓδ¼ ñ½∩ ¡Ñú«, »α«µÑßß«¼, τΓ« ∩ó½∩ÑΓß∩ ßÑα∞Ѻ¡δ¼ »αÑ»∩ΓßΓó¿Ñ¼ ó
  221.     «Γ½áñ¬Ñ ¼¡«ú«πα«ó¡Ñóδσ »α«úαá¼¼. àß½¿ Γαáßß¿απѼδ⌐ »α«µÑßß óδºδóáÑΓ Σπ¡-
  222.     ¬µ¿ε exec, ºá»π߬áѼδÑ «íαáºδ ºáñáτ Γ«ªÑ  »«ñóÑαúáεΓß∩  Γαáßß¿α«ó¬Ñ  »«ñ
  223.     π»αáó½Ñ¡¿Ñ¼  αá¡ÑÑ  óδºóá¡¡«⌐  Σπ¡¬µ¿¿  ptrace, «ñ¡á¬« «Γ½áñτ¿¬ ¼«ªÑΓ ¡Ñ
  224.     º¡áΓ∞ ¿¼Ñ¡¿ ¿ß»«½¡∩Ѽ«ú« «íαáºá, τΓ«  ºáΓαπñ¡∩ÑΓ  »α«óÑñÑ¡¿Ñ  ß¿¼ó«½∞¡«⌐
  225.     «Γ½áñ¬¿.
  226.   *  ÄΓ½áñτ¿¬  ¡Ñ  ¼«ªÑΓ óÑßΓ¿ Γαáßß¿α«ó¬π πªÑ óδ»«½¡∩εΘÑú«ß∩ »α«µÑßßá, Ñß½¿
  227.     «Γ½áª¿óáѼδ⌐ »α«µÑßß ¡Ñ óδºóá½ »αÑñóáα¿Γѽ∞¡« Σπ¡¬µ¿ε  ptrace,  ñáó  ΓѼ
  228.     ßá¼δ¼ ∩ñαπ ßó«Ñ ß«ú½á߿Ѡ¡á Γαáßß¿α«ó¬π. ¥Γ« ¡Ñπñ«í¡«, Γᬠ¬á¬ ó π¬áºá¡-
  229.     ¡«¼  ß½πτáÑ  óδ»«½¡∩εΘ¿⌐ß∩ »α«µÑßß »α¿ñÑΓß∩ πñ὿Γ∞ ¿º ß¿ßΓÑ¼δ ¿ »ÑαѺá-
  230.     »πßΓ¿Γ∞ ó αѪ¿¼Ñ Γαáßß¿α«ó¬¿.
  231.   * ìÑ αáºαÑΦáÑΓß∩ Γαáßß¿α«óáΓ∞ setuid-»α«úαá¼¼δ, »«ß¬«½∞¬π φΓ«  ¼«ªÑΓ  »α¿-
  232.     óÑßΓ¿  ¬  ¡áαπΦÑ¡¿ε  ºáΘ¿Γδ  ñá¡¡δσ (¿í« ó αѺπ½∞ΓáΓÑ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿
  233.     ptrace ó ¿σ áñαÑß¡«Ñ »α«ßΓαá¡ßΓó« »α«¿ºó«ñ¿½áß∞ íδ ºá»¿ß∞  ñá¡¡δσ)  ¿  ¬
  234.     óδ»«½¡Ñ¡¿ε    ¡Ññ«»πßΓ¿¼δσ    ñÑ⌐ßΓó¿⌐.   ÅαÑñ»«½«ª¿¼,   ¡á»α¿¼Ñα,   τΓ«
  235.     setuid-»α«úαἼᠺá»π߬áÑΓ Σá⌐½ ß ¿¼Ñ¡Ñ¼ "privatefile". ô¼Ñ½δ⌐ »«½∞º«óá-
  236.     Γѽ∞ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ ptrace ¼«ú íδ ºá¼Ñ¡¿Γ∞ ¿¼∩  Σá⌐½á  ¡á  "/bin/sh",
  237.     ºá»πßΓ¿ó  ¡á  óδ»«½¡Ñ¡¿Ñ ¬«¼á¡ñ¡δ⌐ »α«µÑßß«α shell (¿ óßÑ »α«úαá¼¼δ, ¿ß-
  238.     »«½¡∩ѼδÑ shell'«¼), ¡Ñ ¿¼Ñ∩ ¡á Γ« ß««ΓóÑΓßΓóπεΘ¿σ  »«½¡«¼«τ¿⌐.  öπ¡¬µ¿∩
  239.     exec  ¿ú¡«α¿απÑΓ  í¿Γ setuid, Ñß½¿ »α«µÑßß »«ñóÑαúáÑΓß∩ Γαáßß¿α«ó¬Ñ, ΓѼ
  240.     ßá¼δ¼ áñαÑß¡«Ñ »α«ßΓαá¡ßΓó« setuid-»α«úαá¼¼ ºáΘ¿ΘáÑΓß∩ «Γ  »«½∞º«óáΓѽ∞-
  241.     ß¬«⌐ ºá»¿ß¿.
  242.  
  243.     è¿½½¿á¡ [Killian 84] «»¿ßδóáÑΓ ñαπúπε ßσѼπ Γαáßß¿α«ó¬¿ »α«µÑßß«ó, «ß¡«-
  244. óá¡¡πε ¡á »ÑαѬ½ετÑ¡¿¿ Σá⌐½«óδσ ß¿ßΓѼ (ß¼. ú½áóπ 5). Çñ¼¿¡¿ßΓαáΓ«α ¼«¡Γ¿απ-
  245. ÑΓ Σá⌐½«óπε ß¿ßΓÑ¼π »«ñ ¿¼Ñ¡Ñ¼ "/proc"; »«½∞º«óáΓѽ¿ ¿ñÑ¡Γ¿Σ¿µ¿απεΓ »α«µÑßßδ
  246. ß »«¼«Θ∞ε ¬«ñ«ó ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ ¿ Γαá¬ΓπεΓ ¿σ ¬á¬ Σá⌐½δ, »α¿¡áñ½ÑªáΘ¿Ñ ¬áΓὫ-
  247. úπ  "/proc". ƒñα« ñáÑΓ αáºαÑΦÑ¡¿Ñ ¡á «Γ¬αδΓ¿Ñ Σá⌐½«ó, ¿ßσ«ñ∩ ¿º ¬«ñá ¿ñÑ¡Γ¿-
  248.  
  249.                                     333
  250.  
  251. Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩ »α«µÑßßá ¿ ¬«ñá ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ úαπ»»δ. Å«½∞º«óáΓѽ¿  ¼«-
  252. úπΓ «íαáΘáΓ∞ß∩ ¬ áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »α«µÑßßá »πΓѼ τΓÑ¡¿∩ (read) Σá⌐½á ¿
  253. πßΓá¡áó½¿óáΓ∞ Γ«τ¬¿ »αÑαδóá¡¿⌐ »πΓѼ ºá»¿ß¿ (write) ó Σá⌐½. öπ¡¬µ¿∩ stat ß«-
  254. «íΘáÑΓ  αẽ¿τ¡πε  ßΓáΓ¿ßΓ¿τÑ߬πε  ¿¡Σ«α¼áµ¿ε, ¬áßáεΘπεß∩ »α«µÑßßá. é ñá¡¡«¼
  255. »«ñσ«ñÑ πßΓαá¡Ñ¡δ Γα¿ ¡Ññ«ßΓáΓ¬á, »α¿ßπΘ¿Ñ Σπ¡¬µ¿¿  ptrace.  é«-»Ñαóδσ,  φΓá
  256. ßσѼᠠαáí«ΓáÑΓ íδßΓαÑÑ, »«ß¬«½∞¬π »α«µÑßß-«Γ½áñτ¿¬ ºá «ñ¡« «íαáΘÑ¡¿Ñ ¬ π¬á-
  257. ºá¡¡δ¼ ß¿ßΓѼ¡δ¼ Σπ¡¬µ¿∩¼ ¼«ªÑΓ »ÑαÑñáóáΓ∞ í«½∞ΦÑ ¿¡Σ«α¼áµ¿¿, τѼ »α¿ αáí«ΓÑ
  258. ß ptrace. é«-óΓ«αδσ, «Γ½áñτ¿¬ ºñÑß∞ ¼«ªÑΓ óÑßΓ¿ Γαáßß¿α«ó¬π ß«óÑαΦÑ¡¡«  »α«-
  259. ¿ºó«½∞¡δσ  »α«µÑßß«ó, á ¡Ñ Γ«½∞¬« ßó«¿σ »«Γ«¼¬«ó. ìᬫ¡Ñµ, Γαáßß¿απѼδ⌐ »α«-
  260. µÑßß ¡Ñ ñ«½ªÑ¡ »αÑñ»α¿¡¿¼áΓ∞ »αÑñóáα¿Γѽ∞¡« ¡¿¬á¬¿σ ñÑ⌐ßΓó¿⌐ »« »«ñú«Γ«ó¬Ñ ¬
  261. Γαáßß¿α«ó¬Ñ; «Γ½áñτ¿¬ ¼«ªÑΓ Γαáßß¿α«óáΓ∞ ¿  ßπΘÑßΓóπεΘ¿Ñ  »α«µÑßßδ.  é«º¼«ª-
  262. ¡«ßΓ∞ óÑßΓ¿ «Γ½áñ¬π setuid-»α«úαá¼¼, »αÑñ«ßΓáó½∩Ѽá∩ Γ«½∞¬« ßπ»Ñα»«½∞º«óáΓÑ-
  263. ½ε, αÑ὿ºπÑΓß∩ ¬á¬ ß«ßΓáó¡á∩ τáßΓ∞ Γαáñ¿µ¿«¡¡«ú« ¼Ñσá¡¿º¼á ºáΘ¿Γδ Σá⌐½«ó.
  264.  
  265.  
  266.     E11.2 éçÇêîÄäàëæÆéêà ÅÉÄûàææÄé é éàÉæêê V æêæÆàî¢F
  267.  
  268.     Åá¬ÑΓ  IPC (interprocess communication) ó óÑαß¿¿ V ß¿ßΓѼδ UNIX ó¬½ετáÑΓ
  269. ó ßÑí∩ Γα¿ ¼Ñσá¡¿º¼á. îÑσá¡¿º¼ ß««íΘÑ¡¿⌐ ñáÑΓ »α«µÑßßἠ󫺼«ª¡«ßΓ∞ »«ßδ½áΓ∞
  270. ñαπú¿¼ »α«µÑßßá¼ »«Γ«¬¿ ßΣ«α¼áΓ¿α«óá¡¡δσ ñá¡¡δσ, ¼Ñσá¡¿º¼ αáºñѽѡ¿∩  »á¼∩Γ¿
  271. »«ºó«½∩ÑΓ  »α«µÑßßá¼ ß«ó¼ÑßΓ¡« ¿ß»«½∞º«óáΓ∞ «Γñѽ∞¡δÑ τáßΓ¿ ó¿αΓπá½∞¡«ú« áñ-
  272. αÑß¡«ú« »α«ßΓαá¡ßΓóá, á ßѼáΣ«αδ - ß¿¡σα«¡¿º¿α«óáΓ∞ ßó«Ñ óδ»«½¡Ñ¡¿Ñ ß óδ»«½-
  273. ¡Ñ¡¿Ñ¼ »áαώѽ∞¡δσ »α«µÑßß«ó. ìÑß¼«Γα∩ ¡á Γ«, τΓ« «¡¿  αÑ὿ºπεΓß∩  ó  ó¿ñÑ
  274. «Γñѽ∞¡δσ í½«¬«ó, ¿¼ »α¿ßπΘ¿ «íΘ¿Ñ ßó«⌐ßΓóá.
  275.   *  æ  ¬áªñδ¼ ¼Ñσá¡¿º¼«¼ ßó∩ºá¡á Γáí½¿µá, ó ºá»¿ß∩󠬫ëα«⌐ «»¿ßδóáεΓß∩ óßÑ
  276.     Ñú« ñÑΓ὿.
  277.   * é ¬áªñ«⌐ ºá»¿ß¿ ß«ñÑনΓß∩ τ¿ß½«ó«⌐ ¬½ετ (key), ¬«Γ«αδ⌐ »αÑñßΓáó½∩ÑΓ ß«-
  278.     í«⌐ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ºá»¿ß¿, óδíαá¡¡δ⌐ »«½∞º«óáΓѽѼ.
  279.   * é ¬áªñ«¼ ¼Ñσá¡¿º¼Ñ ¿¼ÑÑΓß∩ ß¿ßΓѼ¡á∩ Σπ¡¬µ¿∩  Γ¿»á  "get",  ¿ß»«½∞ºπѼá∩
  280.     ñ½∩  ß«ºñá¡¿∩  ¡«ó«⌐ ¿½¿ »«¿ß¬á ßπΘÑßΓóπεΘÑ⌐ ºá»¿ß¿; »áαá¼ÑΓαἿ Σπ¡¬µ¿¿
  281.     ∩ó½∩εΓß∩ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ºá»¿ß¿ ¿ αẽ¿τ¡δÑ Σ½áú¿ (flag). ƒñα« óÑñÑΓ »«¿ß¬
  282.     ºá»¿ß¿ »« ÑÑ ¿ñÑ¡Γ¿Σ¿¬áΓ«απ ó ß««ΓóÑΓßΓóπεΘÑ⌐ Γáí½¿µÑ. Åα«µÑßßδ ¼«úπΓ  ß
  283.     »«¼«Θ∞ε Σ½áúá IPC_PRIVATE úáαá¡Γ¿α«óáΓ∞ »«½πτÑ¡¿Ñ ÑΘÑ ¡Ñ¿ß»«½∞ºπѼ«⌐ ºá-
  284.     »¿ß¿. æ »«¼«Θ∞ε Σ½áúá IPC_CREAT «¡¿ ¼«úπΓ ß«ºñáΓ∞ ¡«óπε ºá»¿ß∞, Ñß½¿ ºá-
  285.     »¿ß¿  ß  π¬áºá¡¡δ¼  ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼ ¡ÑΓ, á Ñß½¿ ÑΘÑ ¬ Γ«¼π ªÑ πßΓá¡«ó¿Γ∞
  286.     Σ½áú IPC_EXCL, ¼«ª¡« »«½πτ¿Γ∞ πóÑñ«¼½Ñ¡¿Ñ «í «Φ¿í¬Ñ ó Γ«¼  ß½πτáÑ,  Ñß½¿
  287.     ºá»¿ß∞ ß Γᬿ¼ ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼ ßπΘÑßΓóπÑΓ. öπ¡¬µ¿∩ ó«ºóαáΘáÑΓ ¡Ñ¬¿⌐ óδí-
  288.     αá¡¡δ⌐  ∩ñα«¼ ñÑß¬α¿»Γ«α, »αÑñ¡áº¡áτÑ¡¡δ⌐ ñ½∩ »«ß½ÑñπεΘÑú« ¿ß»«½∞º«óá¡¿∩
  289.     ó ñαπú¿σ ß¿ßΓѼ¡δσ Σπ¡¬µ¿∩σ, Γᬿ¼ «íαẫ¼, «¡á αáí«ΓáÑΓ á¡á½«ú¿τ¡« ß¿ß-
  290.     ΓѼ¡δ¼ Σπ¡¬µ¿∩¼ creat ¿ open.
  291.   * é ¬áªñ«¼ ¼Ñσá¡¿º¼Ñ ∩ñα« ¿ß»«½∞ºπÑΓ ß½ÑñπεΘπε Σ«α¼π½π ñ½∩ »«¿ß¬á »« ñÑ߬-
  292.     α¿»Γ«απ π¬áºáΓѽ∩ ¡á ºá»¿ß∞ ó Γáí½¿µÑ ßΓαπ¬Γπα ñá¡¡δσ:
  293.  
  294.     π¬áºáΓѽ∞ = º¡áτÑ¡¿Ñ ñÑß¬α¿»Γ«αá »« ¼«ñπ½ε «Γ τ¿ß½á ºá»¿ßÑ⌐ ó Γáí½¿µÑ
  295.  
  296.     àß½¿, ¡á»α¿¼Ñα, Γáí½¿µá ßΓαπ¬Γπα ß««íΘÑ¡¿⌐ ß«ßΓ«¿Γ ¿º 100 ºá»¿ßÑ⌐, ñÑ߬-
  297.     α¿»Γ«αδ, ßó∩ºá¡¡δÑ ß ºá»¿ß∞ε ¡«¼Ñα 1, ¿¼ÑεΓ º¡áτÑ¡¿∩, αáó¡δÑ 1, 101, 201
  298.     ¿ Γ.ñ. è«úñá »α«µÑßß πñá½∩ÑΓ ºá»¿ß∞, ∩ñα« πóѽ¿τ¿óáÑΓ º¡áτÑ¡¿Ñ ßó∩ºá¡¡«-
  299.     ú« ß ¡Ñ⌐ ñÑß¬α¿»Γ«αá ¡á τ¿ß½« ºá»¿ßÑ⌐ ó Γáí½¿µÑ:  »«½πτÑ¡¡δ⌐  ñÑß¬α¿»Γ«α
  300.     ßΓá¡ÑΓ  ¡«óδ¼ ñÑß¬α¿»Γ«α«¼ φΓ«⌐ ºá»¿ß¿, ¬«úñá ¬ ¡Ñ⌐ ó¡«ó∞ íπñÑΓ »α«¿ºóÑ-
  301.     ñÑ¡« «íαáΘÑ¡¿Ñ »α¿ »«¼«Θ¿ Σπ¡¬µ¿¿ Γ¿»á "get".  Åα«µÑßßδ,  ¬«Γ«αδÑ  íπñπΓ
  302.     »δΓáΓ∞ß∩  «íαáΓ¿Γ∞ß∩ ¬ ºá»¿ß¿ »« ÑÑ ßΓáα«¼π ñÑß¬α¿»Γ«απ, »«ΓÑα»∩Γ ¡Ñπñá-
  303.     τπ. ÄíαáΓ¿¼ß∩ ó¡«ó∞ ¬ »αÑñδñπΘѼπ »α¿¼Ñαπ. àß½¿ ß ºá»¿ß∞ε 1 ßó∩ºá¡ ñÑ߬-
  304.     α¿»Γ«α, ¿¼ÑεΘ¿⌐ º¡áτÑ¡¿Ñ 201, »α¿ Ñú« πñá½Ñ¡¿¿ ∩ñα« ¡áº¡áτ¿Γ ºá»¿ß¿  ¡«-
  305.     óδ⌐  ñÑß¬α¿»Γ«α, ¿¼ÑεΘ¿⌐ º¡áτÑ¡¿Ñ 301. Åα«µÑßßδ, »δΓáεΘ¿Ñß∩ «íαáΓ¿Γ∞ß∩ ¬
  306.     ñÑß¬α¿»Γ«απ 201, »«½πτáΓ «Φ¿í¬π, »«ß¬«½∞¬π φΓ«ú« ñÑß¬α¿»Γ«αá í«½∞ΦÑ ¡ÑΓ.
  307.     é ¬«¡Ñτ¡«¼ ¿Γ«úÑ ∩ñα« »α«¿ºóÑñÑΓ »ÑαÑ¡π¼Ñαᵿε ñÑß¬α¿»Γ«α«ó, ¡« »«¬á φΓ«
  308.     »α«¿º«⌐ñÑΓ, ¼«ªÑΓ »α«⌐Γ¿ º¡áτ¿Γѽ∞¡δ⌐ »α«¼ÑªπΓ«¬ óαѼѡ¿.
  309.   * èáªñá∩ ºá»¿ß∞ ¿¼ÑÑΓ ¡Ñ¬πε ßΓαπ¬Γπαπ ñá¡¡δσ, «»¿ßδóáεΘπε »αáóá ñ«ßΓπ»á  ¬
  310.  
  311.                                     334
  312.  
  313.     ¡Ñ⌐ ¿ ó¬½ετáεΘπε ó ßÑí∩ »«½∞º«óáΓѽ∞߬¿⌐ ¿ úαπ»»«ó«⌐ ¬«ñδ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿,
  314.     ¬«Γ«αδÑ  ¿¼ÑÑΓ  »α«µÑßß,  ß«ºñáóΦ¿⌐  ºá»¿ß∞,  á ΓᬪѠ»«½∞º«óáΓѽ∞߬¿⌐ ¿
  315.     úαπ»»«ó«⌐ ¬«ñδ  ¿ñÑ¡Γ¿Σ¿¬áµ¿¿,  πßΓá¡«ó½Ñ¡¡δÑ  ß¿ßΓѼ¡«⌐  Σπ¡¬µ¿Ñ⌐  Γ¿»á
  316.     "control"  («í  φΓ«¼ ¡¿ªÑ), ¿ ñó«¿τ¡δÑ ¬«ñδ αáºαÑΦÑ¡¿⌐ τΓÑ¡¿∩-ºá»¿ß¿-¿ß-
  317.     »«½¡Ñ¡¿∩ ñ½∩ ó½áñѽ∞µá, úαπ»»δ ¿ »α«τ¿σ »«½∞º«óáΓѽÑ⌐, »« á¡á½«ú¿¿ ß πß-
  318.     Γá¡«ó¬«⌐ »αáó ñ«ßΓπ»á ¬ Σá⌐½á¼.
  319.   * é ¬áªñ«⌐ ºá»¿ß¿ ¿¼ÑÑΓß∩ ñαπúá∩ ¿¡Σ«α¼áµ¿∩, «»¿ßδóáεΘá∩ ß«ßΓ«∩¡¿Ñ ºá»¿ß¿,
  320.     ó τáßΓ¡«ßΓ¿, ¿ñÑ¡Γ¿Σ¿¬áΓ«α »«ß½Ññ¡Ñú« ¿º »α«µÑßß«ó, ó¡ÑßΦ¿σ ¿º¼Ñ¡Ñ¡¿∩  ó
  321.     ºá»¿ß∞  (»«ß佬á ß««íΘÑ¡¿∩, »α¿Ñ¼ ß««íΘÑ¡¿∩, »«ñ¬½ετÑ¡¿Ñ αáºñѽ∩Ѽ«⌐ »á-
  322.     ¼∩Γ¿ ¿ Γ.ñ.), ¿ óαѼ∩ »«ß½Ññ¡Ñú« «íαáΘÑ¡¿∩ ¿½¿ ¬«ααÑ¬Γ¿α«ó¬¿.
  323.   * é ¬áªñ«¼ ¼Ñσá¡¿º¼Ñ ¿¼ÑÑΓß∩ ß¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ Γ¿»á "control", ºá»αáΦ¿óáε-
  324.     Θá∩ ¿¡Σ«α¼áµ¿ε « ß«ßΓ«∩¡¿¿ ºá»¿ß¿, ¿º¼Ñ¡∩εΘá∩ φΓπ ¿¡Σ«α¼áµ¿ε ¿½¿ πñá½∩ε-
  325.     Θá∩ ºá»¿ß∞ ¿º ß¿ßΓѼδ. è«úñá »α«µÑßß ºá»αáΦ¿óáÑΓ ¿¡Σ«α¼áµ¿ε «  ß«ßΓ«∩¡¿¿
  326.     ºá»¿ß¿,  ∩ñα«  »α«óÑα∩ÑΓ,  ¿¼ÑÑΓ ½¿ »α«µÑßß αáºαÑΦÑ¡¿Ñ ¡á τΓÑ¡¿Ñ ºá»¿ß¿,
  327.     »«ß½Ñ τÑú« ¬«»¿απÑΓ ñá¡¡δÑ ¿º ºá»¿ß¿ Γáí½¿µδ »« áñαÑßπ, π¬áºá¡¡«¼π »«½∞-
  328.     º«óáΓѽѼ. Åα¿ πßΓá¡«ó¬Ñ º¡áτÑ¡¿⌐ »α¿¡áñ½ÑªáΘ¿σ ºá»¿ß¿  »áαá¼ÑΓα«ó  ∩ñα«
  329.     »α«óÑα∩ÑΓ,  ß«ó»áñáεΓ  ½¿ ¼Ñªñπ ß«í«⌐ »«½∞º«óáΓѽ∞߬¿⌐ ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿
  330.     »α«µÑßßá ¿ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »«½∞º«óáΓѽ∩ (¿½¿ ß«ºñáΓѽ∩), π¬áºá¡¡δ⌐ ó ºá»¿-
  331.     ß¿, ¡Ñ ºá»πΘÑ¡ ½¿ »α«µÑßß »«ñ π»αáó½Ñ¡¿Ñ¼ ßπ»Ñα»«½∞º«óáΓѽ∩; «ñ¡«ú« αáº-
  332.     αÑΦÑ¡¿∩ ¡á ºá»¿ß∞ ¡Ññ«ßΓáΓ«τ¡« ñ½∩ πßΓᡫ󬿠»áαá¼ÑΓα«ó.  ƒñα«  ¬«»¿απÑΓ
  333.     ß««íΘÑ¡¡πε  »«½∞º«óáΓѽѼ ¿¡Σ«α¼áµ¿ε ó ºá»¿ß∞ Γáí½¿µδ, πßΓá¡áó½¿óá∩ º¡á-
  334.     τÑ¡¿∩ »«½∞º«óáΓѽ∞߬«ú« ¿ úαπ»»«ó«ú« ¬«ñ«ó ¿ñÑ¡Γ¿Σ¿¬áµ¿¿, αѪ¿¼δ ñ«ßΓπ»á
  335.     ¿ ñαπú¿Ñ »áαá¼ÑΓαδ (ó ºáó¿ß¿¼«ßΓ¿ «Γ Γ¿»á ¼Ñσá¡¿º¼á). ƒñα«  ¡Ñ  ¿º¼Ñ¡∩ÑΓ
  336.     º¡áτÑ¡¿∩  »«½Ñ⌐, «»¿ßδóáεΘ¿σ »«½∞º«óáΓѽ∞߬¿⌐ ¿ úαπ»»«ó«⌐ ¬«ñδ ¿ñÑ¡Γ¿Σ¿-
  337.     ¬áµ¿¿ ß«ºñáΓѽ∩ ºá»¿ß¿, »«φΓ«¼π »«½∞º«óáΓѽ∞, ß«ºñáóΦ¿⌐ ºá»¿ß∞, ß«σαá¡∩-
  338.     ÑΓ π»αáó½∩εΘ¿Ñ »αáóá ¡á ¡ÑÑ. Å«½∞º«óáΓѽ∞ ¼«ªÑΓ πñ὿Γ∞ ºá»¿ß∞, ½¿í« Ñß-
  339.     ½¿ «¡ ∩ó½∩ÑΓß∩ ßπ»Ñα»«½∞º«óáΓѽѼ, ½¿í« Ñß½¿ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑßßá ß«ó-
  340.     »áñáÑΓ ß ½εíδ¼ ¿º ¿ñÑ¡Γ¿Σ¿¬áΓ«α«ó, π¬áºá¡¡δσ ó  ßΓαπ¬ΓπαÑ  ºá»¿ß¿.  ƒñα«
  341.     πóѽ¿τ¿óáÑΓ  ¡«¼Ñα ñÑß¬α¿»Γ«αá, τΓ«íδ »α¿ ß½ÑñπεΘѼ ¡áº¡áτÑ¡¿¿ ºá»¿ß¿ Ñ⌐
  342.     íδ½ »α¿ßó«Ñ¡ ¡«óδ⌐ ñÑß¬α¿»Γ«α. æ½Ññ«óáΓѽ∞¡«, ¬á¬ πªÑ αá¡ÑÑ  ú«ó«α¿½«ß∞,
  343.     Ñß½¿ »α«µÑßß »«»δΓáÑΓß∩ «íαáΓ¿Γ∞ß∩ ¬ ºá»¿ß¿ »« ßΓáα«¼π ñÑß¬α¿»Γ«απ, óδº-
  344.     óá¡¡á∩ ¿¼ Σπ¡¬µ¿∩ »«½πτ¿Γ «Γ¬áº.
  345.  
  346.  
  347.     E11.2.1 æ««íΘÑ¡¿∩F
  348.  
  349.     æ ß««íΘÑ¡¿∩¼¿ αáí«ΓáεΓ τÑΓδαÑ ß¿ßΓѼ¡δσ Σπ¡¬µ¿¿: msgget, ¬«Γ«αá∩ ó«ºóαá-
  350. ΘáÑΓ (¿ ó ¡Ñ¬«Γ«αδσ ß½πτá∩σ ß«ºñáÑΓ) ñÑß¬α¿»Γ«α ß««íΘÑ¡¿∩, «»αÑñѽ∩εΘ¿⌐ «τÑ-
  351. αÑñ∞  ß««íΘÑ¡¿⌐ ¿ ¿ß»«½∞ºπѼδ⌐ ñαπú¿¼¿ ß¿ßΓѼ¡δ¼¿ Σπ¡¬µ¿∩¼¿, msgctl, ¬«Γ«αá∩
  352. πßΓá¡áó½¿óáÑΓ ¿ ó«ºóαáΘáÑΓ ßó∩ºá¡¡δÑ ß ñÑß¬α¿»Γ«α«¼ ß««íΘÑ¡¿⌐ »áαá¼ÑΓαδ  ¿½¿
  353. πñá½∩ÑΓ  ñÑß¬α¿»Γ«αδ,  msgsnd, ¬«Γ«αá∩ »«ßδ½áÑΓ ß««íΘÑ¡¿Ñ, ¿ msgrcv, ¬«Γ«αá∩
  354. »«½πτáÑΓ ß««íΘÑ¡¿Ñ.
  355.     æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ msgget:
  356.  
  357.     msgqid = msgget(key,flag);
  358.  
  359. úñÑ msgqid - ó«ºóαáΘáѼδ⌐ Σπ¡¬µ¿Ñ⌐ ñÑß¬α¿»Γ«α, á key ¿ flag ¿¼ÑεΓ Γπ ªÑ  ßÑ-
  360. ¼á¡Γ¿¬π, τΓ« ¿ ó ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ Γ¿»á "get". ƒñα« σαá¡¿Γ ß««íΘÑ¡¿∩ ó ßó∩º-
  361. ¡«¼  ß»¿ß¬Ñ («τÑαÑñ¿), «»αÑñѽ∩Ѽ«¼ º¡áτÑ¡¿Ñ¼ ñÑß¬α¿»Γ«αá, ¿ ¿ß»«½∞ºπÑΓ º¡á-
  362. τÑ¡¿Ñ msgqid ó ¬áτÑßΓóÑ π¬áºáΓѽ∩ ¡á ¼áßß¿ó ºáú«½«ó¬«ó «τÑαÑñÑ⌐. èα«¼Ñ óδΦÑ-
  363. π¬áºá¡¡δσ »«½Ñ⌐, «»¿ßδóáεΘ¿σ «íΘ¿Ñ ñ½∩ óßÑú« ¼Ñσá¡¿º¼á »αáóá ñ«ßΓπ»á,  ºáú«-
  364. ½«ó«¬ «τÑαÑñ¿ ß«ñÑαª¿Γ ß½ÑñπεΘ¿Ñ »«½∩:
  365.   * ô¬áºáΓѽ¿ ¡á »Ñαó«Ñ ¿ »«ß½Ññ¡ÑÑ ß««íΘÑ¡¿Ñ ó ß»¿ß¬Ñ;
  366.   * è«½¿τÑßΓó« ß««íΘÑ¡¿⌐ ¿ «íΘ¿⌐ «íΩѼ ¿¡Σ«α¼áµ¿¿ ó ß»¿ß¬Ñ ó íá⌐Γáσ;
  367.   * îá¬ß¿¼á½∞¡á∩ Ñ¼¬«ßΓ∞ ß»¿ß¬á ó íá⌐Γáσ;
  368.   * êñÑ¡Γ¿Σ¿¬áΓ«αδ »α«µÑßß«ó, »«ß½áóΦ¿σ ¿ »α¿¡∩óΦ¿σ ß««íΘÑ¡¿∩ »«ß½Ññ¡¿¼¿;
  369.   *  Å«½∩,  π¬áºδóáεΘ¿Ñ óαѼ∩ »«ß½Ññ¡Ñú« óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿⌐ msgsnd, msgrcv ¿
  370.     msgctl.
  371.     è«úñá »«½∞º«óáΓѽ∞ óδºδóáÑΓ Σπ¡¬µ¿ε msgget ñ½∩ Γ«ú«, τΓ«íδ ß«ºñáΓ∞ ¡«óδ⌐
  372.  
  373.                                     335
  374.  
  375. ñÑß¬α¿»Γ«α, ∩ñα« »α«ß¼áΓα¿óáÑΓ ¼áßß¿ó «τÑαÑñÑ⌐ ß««íΘÑ¡¿⌐ ó »«¿ß¬áσ ßπΘÑßΓóπ-
  376. εΘÑ⌐ «τÑαÑñ¿ ß π¬áºá¡¡δ¼ ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼. àß½¿ Γᬫ⌐ «τÑαÑñ¿ ¡ÑΓ, ∩ñα« óδñÑ-
  377. ½∩ÑΓ ¡«óπε «τÑαÑñ∞, ¿¡¿µ¿á½¿º¿απÑΓ ÑÑ ¿ ó«ºóαáΘáÑΓ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »«½∞º«óáΓÑ-
  378. ½ε. é »α«Γ¿ó¡«¼ ß½πτáÑ ∩ñα« »α«óÑα∩ÑΓ ¡á½¿τ¿Ñ ¡Ñ«íσ«ñ¿¼δσ »αáó ñ«ßΓπ»á ¿ ºá-
  379. óÑαΦáÑΓ óδ»«½¡Ñ¡¿Ñ Σπ¡¬µ¿¿.
  380.     ä½∩ »«ß佬¿ ß««íΘÑ¡¿∩ »α«µÑßß ¿ß»«½∞ºπÑΓ ß¿ßΓѼ¡πε Σπ¡¬µ¿ε msgsnd:
  381.  
  382.     msgsnd(msgqid,msg,count,flag);
  383.  
  384. úñÑ msgqid - ñÑß¬α¿»Γ«α  «τÑαÑñ¿  ß««íΘÑ¡¿⌐,  «íδτ¡«  ó«ºóαáΘáѼδ⌐  Σπ¡¬µ¿Ñ⌐
  385. msgget,  msg - π¬áºáΓѽ∞ ¡á ßΓαπ¬Γπαπ, ß«ßΓ«∩Θπε ¿º Γ¿»á ó ó¿ñÑ ¡áº¡áτáѼ«ú«
  386. »«½∞º«óáΓѽѼ µÑ½«ú« τ¿ß½á ¿ ¼áßß¿óá ß¿¼ó«½«ó, count - αẼÑα ¿¡Σ«α¼áµ¿«¡¡«-
  387. ú« ¼áßß¿óá, flag - ñÑ⌐ßΓó¿Ñ, »αÑñ»α¿¡¿¼áѼ«Ñ  ∩ñα«¼  ó  ß½πτáÑ  »ÑαÑ»«½¡Ñ¡¿∩
  388. ó¡πΓαÑ¡¡Ñú« íπΣÑα¡«ú« »α«ßΓαá¡ßΓóá.
  389.     ƒñα«  »α«óÑα∩ÑΓ  (É¿ßπ¡«¬ 11.4), ¿¼ÑÑΓß∩ ½¿ π »«ßδ½áεΘÑú« ß««íΘÑ¡¿Ñ »α«-
  390. µÑßßá αáºαÑΦÑ¡¿∩ ¡á ºá»¿ß∞ »« π¬áºá¡¡«¼π ñÑß¬α¿»Γ«απ, ¡Ñ óδσ«ñ¿Γ  ½¿  αẼÑα
  391. ß««íΘÑ¡¿∩  ºá  πßΓá¡«ó½Ñ¡¡πε  ß¿ßΓѼ«⌐  úαá¡¿µπ,  ¡Ñ ß«ñÑনΓß∩ ½¿ ó «τÑαÑñ¿
  392. ß½¿Φ¬«¼ í«½∞Φ«⌐ «íΩѼ ¿¡Σ«α¼áµ¿¿, á ΓᬪѠ∩ó½∩ÑΓß∩ ½¿ Γ¿» ß««íΘÑ¡¿∩  »«½«ª¿-
  393. Γѽ∞¡δ¼  µÑ½δ¼  τ¿ß½«¼.  àß½¿ óßÑ πß½«ó¿∩ ß«í½εñÑ¡δ, ∩ñα« óδñѽ∩ÑΓ ß««íΘÑ¡¿ε
  394. ¼ÑßΓ«, ¿ß»«½∞ºπ∩ ¬áαΓπ ß««íΘÑ¡¿⌐ (ß¼. αáºñѽ 9.1), ¿ ¬«»¿απÑΓ  ó  φΓ«  ¼ÑßΓ«
  395. ñá¡¡δÑ  ¿º  »α«ßΓαá¡ßΓóá »«½∞º«óáΓѽ∩. è ß««íΘÑ¡¿ε »α¿ß«Ññ¿¡∩ÑΓß∩ ºáú«½«ó«¬,
  396. »«ß½Ñ τÑú« «¡« »«¼ÑΘáÑΓß∩ ó ¬«¡Ñµ ßó∩º¡«ú« ß»¿ß¬á  ºáú«½«ó¬«ó  ß««íΘÑ¡¿⌐.  é
  397. ºáú«½«ó¬Ñ ß««íΘÑ¡¿∩ ºá»¿ßδóáÑΓß∩ Γ¿» ¿ αẼÑα ß««íΘÑ-
  398.  
  399.     ┌────────────────────────────────────────────────────────────┐
  400.     │ á½ú«α¿Γ¼ msgsnd       /* »«ß½áΓ∞ ß««íΘÑ¡¿Ñ */              │
  401.     │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩:  (1) ñÑß¬α¿»Γ«α «τÑαÑñ¿ ß««íΘÑ¡¿⌐      │
  402.     │                      (2) áñαÑß ßΓαπ¬Γπαδ ß««íΘÑ¡¿∩         │
  403.     │                      (3) αẼÑα ß««íΘÑ¡¿∩                  │
  404.     │                      (4) Σ½áú¿                             │
  405.     │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ¬«½¿τÑßΓó« »«ß½á¡¡δσ íá⌐Γ             │
  406.     │ {                                                          │
  407.     │    »α«óÑα¿Γ∞ »αáó¿½∞¡«ßΓ∞ π¬áºá¡¿∩ ñÑß¬α¿»Γ«αá ¿ ¡á½¿τ¿Ñ   │
  408.     │     ß««ΓóÑΓßΓóπεΘ¿σ »αáó ñ«ßΓπ»á;                          │
  409.     │    óδ»«½¡¿Γ∞ »«¬á (ñ½∩ σαá¡Ñ¡¿∩ ß««íΘÑ¡¿∩ ¡Ñ íπñÑΓ óδñѽѡ«│
  410.     │     ¼ÑßΓ«)                                                 │
  411.     │    {                                                       │
  412.     │        Ñß½¿ (Σ½áú¿ ¡Ñ αáºαÑΦáεΓ ªñáΓ∞)                     │
  413.     │              óÑα¡πΓ∞ß∩;                                    │
  414.     │        »α¿«ßΓá¡«ó¿Γ∞ß∩ (ñ« ΓÑσ »«α, »«¬á ¼ÑßΓ« ¡Ñ «ßó«í«-  │
  415.     │         ñ¿Γß∩);                                            │
  416.     │    }                                                       │
  417.     │    »«½πτ¿Γ∞ ºáú«½«ó«¬ ß««íΘÑ¡¿∩;                           │
  418.     │    ßτ¿ΓáΓ∞ ΓѬßΓ ß««íΘÑ¡¿∩ ¿º »α«ßΓαá¡ßΓóá ºáñáτ¿ ó »α«ßΓ- │
  419.     │     αá¡ßΓó« ∩ñαá;                                          │
  420.     │    ¡áßΓα«¿Γ∞ ßΓαπ¬Γπαδ ñá¡¡δσ: óδßΓα«¿Γ∞ «τÑαÑñ∞ ºáú«½«ó¬«ó│
  421.     │     ß««íΘÑ¡¿⌐, πßΓá¡«ó¿Γ∞ ó ºáú«½«ó¬Ñ π¬áºáΓѽ∞ ¡á ΓѬßΓ   │
  422.     │     ß««íΘÑ¡¿∩, ºá»«½¡¿Γ∞ »«½∩, ß«ñÑαªáΘ¿Ñ ßτÑΓτ¿¬¿, óαѼ∩  │
  423.     │     »«ß½Ññ¡Ñú« óδ»«½¡Ñ¡¿∩ «»Ñαᵿ⌐ ¿ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑß- │
  424.     │     ßá;                                                    │
  425.     │    óδóÑßΓ¿ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ »α«µÑßßδ, «ª¿ñáεΘ¿Ñ│
  426.     │     αáºαÑΦÑ¡¿∩ ßτ¿ΓáΓ∞ ß««íΘÑ¡¿Ñ ¿º «τÑαÑñ¿;               │
  427.     │ }                                                          │
  428.     └────────────────────────────────────────────────────────────┘
  429.  
  430.               É¿ßπ¡«¬ 11.4. Ç½ú«α¿Γ¼ »«ß佬¿ ß««íΘÑ¡¿∩
  431.  
  432.  
  433. ¡¿∩,  πßΓá¡áó½¿óáÑΓß∩  π¬áºáΓѽ∞ ¡á ΓѬßΓ ß««íΘÑ¡¿∩ ¿ »α«¿ºó«ñ¿Γß∩ ¬«ααÑ¬Γ¿-
  434.  
  435.                                     336
  436.  
  437. α«ó¬á ß«ñÑন¼«ú« αẽ¿τ¡δσ »«½Ñ⌐ ºáú«½«ó¬á «τÑαÑñ¿, ß«ñÑαªáΘ¿σ ßΓáΓ¿ßΓ¿τÑß-
  438. ¬πε ¿¡Σ«α¼áµ¿ε (¬«½¿τÑßΓó« ß««íΘÑ¡¿⌐ ó «τÑαÑñ¿ ¿ ¿σ ßπ¼¼áα¡δ⌐ «íΩѼ  ó  íá⌐-
  439. Γáσ,  óαѼ∩ »«ß½Ññ¡Ñú« óδ»«½¡Ñ¡¿∩ «»Ñαᵿ⌐ ¿ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑßßá, »«ß½áó-
  440. ΦÑú« ß««íΘÑ¡¿Ñ). çáΓѼ ∩ñα« óδó«ñ¿Γ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá  óßÑ  »α«µÑßßδ,
  441. «ª¿ñáεΘ¿Ñ  »«»«½¡Ñ¡¿∩ «τÑαÑñ¿ ß««íΘÑ¡¿⌐. àß½¿ αẼÑα «τÑαÑñ¿ ó íá⌐Γáσ »αÑóδ-
  442. ΦáÑΓ úαá¡¿µπ ñ«»πßΓ¿¼«ßΓ¿, »α«µÑßß »α¿«ßΓá¡áó½¿óáÑΓß∩ ñ« ΓÑσ »«α, »«¬á  ñαπ-
  443. ú¿Ñ  ß««íΘÑ¡¿∩ ¡Ñ π⌐ñπΓ ¿º «τÑαÑñ¿. Äñ¡á¬«, Ñß½¿ »α«µÑßßπ í佫 ñá¡« π¬áºá¡¿Ñ
  444. ¡Ñ ªñáΓ∞ (Σ½áú IPC_NOWAIT), «¡ ¡Ñ¼Ññ½Ñ¡¡« ó«ºóαáΘáÑΓ π»αáó½Ñ¡¿Ñ ß  πóÑñ«¼½Ñ-
  445. ¡¿Ñ¼ «í «Φ¿í¬Ñ. ìá É¿ßπ¡¬Ñ 11.5 »«¬áºá¡á «τÑαÑñ∞ ß««íΘÑ¡¿⌐, ß«ßΓ«∩Θá∩ ¿º ºá-
  446. ú«½«ó¬«ó  ß««íΘÑ¡¿⌐,  «αúá¡¿º«óá¡¡δσ  ó ßó∩º¡δÑ ß»¿ß¬¿, ß π¬áºáΓѽ∩¼¿ ¡á «í-
  447. ½áßΓ∞ ΓѬßΓá.
  448.     Éáßß¼«Γα¿¼ »α«úαá¼¼π, »αÑñßΓáó½Ñ¡¡πε ¡á É¿ßπ¡¬Ñ 11.6.  Åα«µÑßß  óδºδóáÑΓ
  449. Σπ¡¬µ¿ε  msgget ñ½∩ Γ«ú«, τΓ«íδ »«½πτ¿Γ∞ ñÑß¬α¿»Γ«α ñ½∩ ºá»¿ß¿ ß ¿ñÑ¡Γ¿Σ¿¬á-
  450. Γ«α«¼ MSGKEY. ä½¿¡á ß««íΘÑ¡¿∩ »α¿¡¿¼áÑΓß∩ αáó¡«⌐ 256 íá⌐Γ, σ«Γ∩ ¿ß»«½∞ºπÑΓß∩
  451. Γ«½∞¬« »Ñαó«Ñ »«½Ñ µÑ½«ú« Γ¿»á, ó «í½áßΓ∞ ΓѬßΓá ß««íΘÑ¡¿∩ ¬«»¿απÑΓß∩  ¿ñÑ¡-
  452. Γ¿Σ¿¬áΓ«α  »α«µÑßßá, Γ¿»π ß««íΘÑ¡¿∩ »α¿ßóá¿óáÑΓß∩ º¡áτÑ¡¿Ñ 1, »«ß½Ñ τÑú« óδ-
  453. ºδóáÑΓß∩ Σπ¡¬µ¿∩ msgsnd ñ½∩ »«ß佬¿ ß««íΘÑ¡¿∩. îδ óÑα¡Ñ¼ß∩ ¬  φΓ«¼π  »α¿¼Ñαπ
  454. »«ºªÑ.
  455.     Åα«µÑßß  »«½πτáÑΓ ß««íΘÑ¡¿∩, óδºδóá∩ Σπ¡¬µ¿ε msgrcv »« ß½ÑñπεΘѼπ Σ«α¼á-
  456. Γπ:
  457.     count = msgrcv(id,msg,maxcount,type,flag);
  458.  
  459. úñÑ id - ñÑß¬α¿»Γ«α ß««íΘÑ¡¿∩, msg - áñαÑß »«½∞º«óáΓѽ∞߬«⌐ ßΓαπ¬Γπαδ, ¬«Γ«-
  460. αá∩ íπñÑΓ ß«ñÑαªáΓ∞ »«½πτÑ¡¡«Ñ ß««íΘÑ¡¿Ñ, maxcount - αẼÑα  ßΓαπ¬Γπαδ  msg,
  461. type  - Γ¿» ßτ¿ΓδóáѼ«ú« ß««íΘÑ¡¿∩, flag - ñÑ⌐ßΓó¿Ñ, »αÑñ»α¿¡¿¼áѼ«Ñ ∩ñα«¼ ó
  462. Γ«¼ ß½πτáÑ, Ñß½¿ ó «τÑαÑñ¿ ß«-
  463.  
  464.     çáú«½«ó¬¿                                         Äí½áßΓ∞
  465.     «τÑαÑñÑ⌐                                          ΓѬßΓá
  466.     ┌──────┐           çáú«½«ó¬¿ ß««íΘÑ¡¿⌐        ┌─>┌──────┐
  467.     │      │     ┌──────┐    ┌──────┐    ┌──────┐ │  │      │
  468.     │    ──┼────>│      ├───>│      ├───>│      │ │  │      │
  469.     │      │     └───┼──┘    └───┼──┘    └───┼──┘ │  │      │
  470.     ├──────┤         │           │           └────┘  │      │
  471.     │      │         └───────────│──────────────────>├──────┤
  472.     │      │                     │                   │      │
  473.     │      │                     │                   │      │
  474.     ├──────┤                     │                   │      │
  475.     │      │     ┌──────┐        │                   │      │
  476.     │    ──┼────>│      │        │                   │      │
  477.     │      │     └───┼──┘        │                   │      │
  478.     ├──────┤         │           │                   │      │
  479.     │   ∙  │         │           │                   ├──────┤
  480.     │   ∙  │         └───────────│──────────────────>├──────┤
  481.     │   ∙  │                     │                   │      │
  482.     │   ∙  │                     │                   │      │
  483.     │   ∙  │                     └──────────────────>├──────┤
  484.     │   ∙  │                                         │      │
  485.     │   ∙  │                                         ├──────┤
  486.     │   ∙  │                                         │   ∙  │
  487.     │   ∙  │                                         │   ∙  │
  488.     │   ∙  │                                         │   ∙  │
  489.     └──────┘                                         └──────┘
  490.  
  491.     É¿ßπ¡«¬ 11.5. æΓαπ¬Γπαδ ñá¡¡δσ, ¿ß»«½∞ºπѼδÑ ó «αúá¡¿ºáµ¿¿ ß««íΘÑ¡¿⌐
  492.  
  493.  
  494. «íΘÑ¡¿⌐ ¡ÑΓ. é »ÑαѼѡ¡«⌐ count »«½∞º«óáΓѽε ó«ºóαáΘáÑΓß∩ τ¿ß½«  »α«τ¿Γá¡¡δσ
  495. íá⌐Γ ß««íΘÑ¡¿∩.
  496.  
  497.                                     337
  498.  
  499.     ƒñα«  »α«óÑα∩ÑΓ  (É¿ßπ¡«¬ 11.7), ¿¼ÑÑΓ ½¿ »«½∞º«óáΓѽ∞ ¡Ñ«íσ«ñ¿¼δÑ »αáóá
  500. ñ«ßΓπ»á ¬ «τÑαÑñ¿ ß««íΘÑ¡¿⌐. àß½¿ Γ¿» ßτ¿ΓδóáѼ«ú« ß««íΘÑ¡¿∩  ¿¼ÑÑΓ  ¡π½Ñó«Ñ
  501. º¡áτÑ¡¿Ñ,  ∩ñα«  ¿ΘÑΓ  »Ñαó«Ñ  »« ßτÑΓπ ß««íΘÑ¡¿Ñ ó ßó∩º¡«¼ ß»¿ß¬Ñ. àß½¿ Ñú«
  502. αẼÑα ¼Ñ¡∞ΦÑ ¿½¿ αáóÑ¡ αẼÑαπ,  π¬áºá¡¡«¼π  »«½∞º«óáΓѽѼ,  ∩ñα«  ¬«»¿απÑΓ
  503. ΓѬßΓ ß««íΘÑ¡¿∩ ó »«½∞º«óáΓѽ∞߬πε ßΓαπ¬Γπαπ ¿ ß««ΓóÑΓßΓóπεΘ¿¼ «íαẫ¼ ¡áßΓ-
  504. αá¿óáÑΓ  ßó«¿  ó¡πΓαÑ¡¡¿Ñ ßΓαπ¬Γπαδ: π¼Ñ¡∞ΦáÑΓ ßτÑΓτ¿¬ ß««íΘÑ¡¿⌐ ó «τÑαÑñ¿ ¿
  505. ßπ¼¼áα¡δ⌐ «íΩѼ ¿¡Σ«α¼áµ¿¿ ó íá⌐Γáσ, ºá»«¼¿¡áÑΓ óαѼ∩ »«½πτÑ¡¿∩ ß««íΘÑ¡¿∩  ¿
  506. ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑßßá-»«½πτáΓѽ∩, »ÑαÑßΓαá¿óáÑΓ ßó∩º¡δ⌐ ß»¿ß«¬ ¿ «ßó«í«ªñá-
  507. ÑΓ  ¼ÑßΓ«  ó  ß¿ßΓѼ¡«¼ »α«ßΓαá¡ßΓóÑ, úñÑ σαá¡¿½ß∩ ΓѬßΓ ß««íΘÑ¡¿∩. àß½¿ ¬á-
  508. ¬¿Ñ-½¿í« »α«µÑßßδ, «ª¿ñáóΦ¿Ñ »«½πτÑ¡¿∩  ß««íΘÑ¡¿∩,  ¡áσ«ñ¿½¿ß∞  ó  ß«ßΓ«∩¡¿¿
  509. »α¿«ßΓá¡«óá  ¿º-ºá  «ΓßπΓßΓó¿∩ ßó«í«ñ¡«ú« ¼ÑßΓá ó ß»¿ß¬Ñ, ∩ñα« óδó«ñ¿Γ ¿σ ¿º
  510. φΓ«ú« ß«ßΓ«∩¡¿∩. àß½¿ αẼÑα ß««íΘÑ¡¿∩ »αÑóδΦáÑΓ º¡áτÑ¡¿Ñ maxcount,  π¬áºá¡-
  511. ¡«Ñ  »«½∞º«óáΓѽѼ,  ∩ñα« »«ßδ½áÑΓ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ πóÑñ«¼½Ñ¡¿Ñ «í «Φ¿í¬Ñ ¿
  512. «ßΓáó½∩ÑΓ ß««íΘÑ¡¿Ñ ó «τÑαÑñ¿. àß½¿, ΓѼ ¡Ñ ¼Ñ¡ÑÑ, »α«µÑßß ¿ú¡«α¿απÑΓ  «úαá-
  513. ¡¿τÑ¡¿∩  ¡á  αẼÑα  (ó »«½Ñ flag πßΓá¡«ó½Ñ¡ í¿Γ MSG_NOERROR), ∩ñα« «íαѺáÑΓ
  514. ß««íΘÑ¡¿Ñ, ó«ºóαáΘáÑΓ ºá»α«ΦÑ¡¡«Ñ ¬«½¿τÑßΓó« íá⌐Γ  ¿  πñá½∩ÑΓ  ß««íΘÑ¡¿Ñ  ¿º
  515. ß»¿ß¬á µÑ½¿¬«¼.
  516.  
  517.     ┌────────────────────────────────────────────────────────────┐
  518.     │ #include <sys/types.h>                                     │
  519.     │ #include <sys/ipc.h>                                       │
  520.     │ #include <sys/msg.h>                                       │
  521.     │                                                            │
  522.     │ #define MSGKEY     75                                      │
  523.     │                                                            │
  524.     │ struct msgform {                                           │
  525.     │        long     mtype;                                     │
  526.     │        char     mtext[256];                                │
  527.     │ };                                                         │
  528.     │                                                            │
  529.     │ main()                                                     │
  530.     │ {                                                          │
  531.     │        struct msgform msg;                                 │
  532.     │        int msgid,pid,*pint;                                │
  533.     │                                                            │
  534.     │        msgid = msgget(MSGKEY,0777);                        │
  535.     │                                                            │
  536.     │        pid = getpid();                                     │
  537.     │        pint = (int *) msg.mtext;                           │
  538.     │        *pint = pid;         /* ¬«»¿α«óá¡¿Ñ ¿ñÑ¡Γ¿Σ¿¬áΓ«αá  │
  539.     │                              * »α«µÑßßá ó «í½áßΓ∞ ΓѬßΓá   │
  540.     │                              * ß««íΘÑ¡¿∩ */                │
  541.     │        msg.mtype = 1;                                      │
  542.     │                                                            │
  543.     │        msgsnd(msgid,&msg,sizeof(int),0);                   │
  544.     │        msgrcv(msgid,&msg,256,pid,0);   /* ¿ñÑ¡Γ¿Σ¿¬áΓ«α    │
  545.     │                               * »α«µÑßßá ¿ß»«½∞ºπÑΓß∩ ó    │
  546.     │                               * ¬áτÑßΓóÑ Γ¿»á ß««íΘÑ¡¿∩ */ │
  547.     │        printf("¬½¿Ñ¡Γ: »«½πτ¿½ «Γ »α«µÑßßá ß pid %d\n",    │
  548.     │               *pint);                                      │
  549.     │ }                                                          │
  550.     └────────────────────────────────────────────────────────────┘
  551.  
  552.               É¿ßπ¡«¬ 11.6. Å«½∞º«óáΓѽ∞߬¿⌐ »α«µÑßß
  553.  
  554.  
  555.     Åα«µÑßß ¼«ªÑΓ »«½πτáΓ∞ ß««íΘÑ¡¿∩ «»αÑñѽѡ¡«ú« Γ¿»á, Ñß½¿ »α¿ßó«¿Γ »áαá-
  556. ¼ÑΓαπ  type  ß««ΓóÑΓßΓóπεΘÑÑ  º¡áτÑ¡¿Ñ.  àß½¿ φΓ« »«½«ª¿Γѽ∞¡«Ñ µÑ½«Ñ τ¿ß½«,
  557. Σπ¡¬µ¿∩ ó«ºóαáΘáÑΓ »Ñαó«Ñ º¡áτÑ¡¿Ñ ñá¡¡«ú« Γ¿»á,  Ñß½¿  «Γα¿µáΓѽ∞¡«Ñ,  ∩ñα«
  558.  
  559.                                     338
  560.  
  561. «»αÑñѽ∩ÑΓ ¼¿¡¿¼á½∞¡«Ñ º¡áτÑ¡¿Ñ Γ¿»á ß««íΘÑ¡¿⌐ ó «τÑαÑñ¿, ¿ Ñß½¿ «¡« ¡Ñ »αÑ-
  562. óδΦáÑΓ  áíß«½εΓ¡«Ñ º¡áτÑ¡¿Ñ »áαá¼ÑΓαá type, ó«ºóαáΘáÑΓ »α«µÑßßπ »Ñαó«Ñ ß««í-
  563. ΘÑ¡¿Ñ φΓ«ú« Γ¿»á. ìá»α¿¼Ñα, Ñß½¿ «τÑαÑñ∞ ß«ßΓ«¿Γ ¿º ΓαÑσ ß««íΘÑ¡¿⌐,  ¿¼ÑεΘ¿σ
  564. Γ¿»  3,  1 ¿ 2, ß««ΓóÑΓßΓóÑ¡¡«, á »«½∞º«óáΓѽ∞ ºá»αáΦ¿óáÑΓ ß««íΘÑ¡¿Ñ ß Γ¿»«¼
  565. -2, ∩ñα« ó«ºóαáΘáÑΓ Ñ¼π ß««íΘÑ¡¿Ñ Γ¿»á 1. é«  óßÑσ  ß½πτá∩σ,  Ñß½¿  πß½«ó¿∩¼
  566. ºá»α«ßá ¡Ñ πñ«ó½ÑΓó«α∩ÑΓ ¡¿ «ñ¡« ¿º ß««íΘÑ¡¿⌐ ó «τÑαÑñ¿, ∩ñα« »ÑαÑó«ñ¿Γ »α«-
  567. µÑßß ó ß«ßΓ«∩¡¿Ñ »α¿«ßΓá¡«óá, αáºπ¼ÑÑΓß∩ Ñß½¿ Γ«½∞¬« ó »áαá¼ÑΓαÑ flag ¡Ñ πß-
  568. Γá¡«ó½Ñ¡ í¿Γ IPC_NOWAIT (¿¡áτÑ »α«µÑßß ¡Ñ¼Ññ½Ñ¡¡« óδσ«ñ¿Γ ¿º Σπ¡¬µ¿¿).
  569.     Éáßß¼«Γα¿¼  »α«úαá¼¼δ, »αÑñßΓáó½Ñ¡¡δÑ ¡á É¿ßπ¡¬áσ 11.6 ¿ 11.8. Åα«úαá¼¼á
  570. ¡á É¿ßπ¡¬Ñ 11.8 «ßπΘÑßΓó½∩ÑΓ «íΘÑÑ  «íß½πª¿óá¡¿Ñ  ºá»α«ß«ó  »«½∞º«óáΓѽ∞߬¿σ
  571. »α«µÑßß«ó  (¬½¿Ñ¡Γ«ó).  çá»α«ßδ, ¡á»α¿¼Ñα, ¼«úπΓ ¬áßáΓ∞ß∩ ¿¡Σ«α¼áµ¿¿, σαá¡∩-
  572. ΘÑ⌐ß∩ ó íáºÑ ñá¡¡δσ; «íß½πª¿óáεΘ¿⌐ »α«µÑßß  (ßÑαóÑα)  óδßΓπ»áÑΓ  ¡Ñ«íσ«ñ¿¼δ¼
  573. »«ßαÑñ¡¿¬«¼ »α¿ «íαáΘÑ¡¿¿ ¬ íáºÑ ñá¡¡δσ, Γᬫ⌐ »«α∩ñ«¬ «í½ÑúτáÑΓ »«ññÑαªá¡¿Ñ
  574. µÑ½«ßΓ¡«ßΓ¿  ñá¡¡δσ ¿ «αúá¡¿ºáµ¿ε ¿σ ºáΘ¿Γδ «Γ ¡Ñßᡬµ¿«¡¿α«óá¡¡«ú« ñ«ßΓπ»á.
  575. Äíß½πª¿óáεΘ¿⌐ »α«µÑßß ß«ºñáÑΓ ß««íΘÑ¡¿Ñ »πΓѼ πßΓá¡«ó¬¿ Σ½áúá IPC _CREAT »α¿
  576.  
  577.     ┌────────────────────────────────────────────────────────────┐
  578.     │ á½ú«α¿Γ¼ msgrcv     /* »«½πτÑ¡¿Ñ ß««íΘÑ¡¿∩ */              │
  579.     │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩:  (1) ñÑß¬α¿»Γ«α ß««íΘÑ¡¿∩              │
  580.     │                      (2) áñαÑß ¼áßß¿óá, ó ¬«Γ«αδ⌐ ºá¡«ß¿Γß∩│
  581.     │                          ß««íΘÑ¡¿Ñ                         │
  582.     │                      (3) αẼÑα ¼áßß¿óá                    │
  583.     │                      (4) Γ¿» ß««íΘÑ¡¿∩ ó ºá»α«ßÑ           │
  584.     │                      (5) Σ½áú¿                             │
  585.     │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ¬«½¿τÑßΓó« íá⌐Γ ó »«½πτÑ¡¡«¼ ß««íΘÑ¡¿¿│
  586.     │ {                                                          │
  587.     │      »α«óÑα¿Γ∞ »αáóá ñ«ßΓπ»á;                              │
  588.     │   loop:                                                    │
  589.     │      »α«óÑα¿Γ∞ »αáó¿½∞¡«ßΓ∞ ñÑß¬α¿»Γ«αá ß««íΘÑ¡¿∩;         │
  590.     │      /* ¡á⌐Γ¿ ß««íΘÑ¡¿Ñ, ¡πª¡«Ñ »«½∞º«óáΓѽε */            │
  591.     │      Ñß½¿ (Γ¿» ß««íΘÑ¡¿∩ ó ºá»α«ßÑ == 0)                   │
  592.     │           αáßß¼«ΓαÑΓ∞ »Ñαó«Ñ ß««íΘÑ¡¿Ñ ó «τÑαÑñ¿;          │
  593.     │      ó »α«Γ¿ó¡«¼ ß½πτáÑ Ñß½¿ (Γ¿» ß««íΘÑ¡¿∩ ó ºá»α«ßÑ > 0) │
  594.     │           αáßß¼«ΓαÑΓ∞ »Ñαó«Ñ ß««íΘÑ¡¿Ñ ó «τÑαÑñ¿, ¿¼ÑεΘÑÑ  │
  595.     │            ñá¡¡δ⌐ Γ¿»;                                     │
  596.     │      ó »α«Γ¿ó¡«¼ ß½πτáÑ   /* Γ¿» ß««íΘÑ¡¿∩ ó ºá»α«ßÑ < 0 */│
  597.     │           αáßß¼«ΓαÑΓ∞ »Ñαó«Ñ ¿º ß««íΘÑ¡¿⌐ ó «τÑαÑñ¿ ß ¡á¿- │
  598.     │            ¼Ñ¡∞Φ¿¼ º¡áτÑ¡¿Ñ¼ Γ¿»á »α¿ πß½«ó¿¿, τΓ« Ñú« Γ¿» │
  599.     │            ¡Ñ »αÑóδΦáÑΓ áíß«½εΓ¡«Ñ º¡áτÑ¡¿Ñ Γ¿»á, π¬áºá¡¡«-│
  600.     │            ú« ó ºá»α«ßÑ;                                   │
  601.     │      Ñß½¿ (ß««íΘÑ¡¿Ñ ¡á⌐ñÑ¡«)                              │
  602.     │      {                                                     │
  603.     │           »ÑαÑπßΓá¡«ó¿Γ∞ αẼÑα ß««íΘÑ¡¿∩ ¿½¿ óÑα¡πΓ∞ «Φ¿í-│
  604.     │            ¬π, Ñß½¿ αẼÑα, π¬áºá¡¡δ⌐ »«½∞º«óáΓѽѼ ß½¿Φ¬«¼│
  605.     │            ¼á½;                                            │
  606.     │           ß¬«»¿α«óáΓ∞ Γ¿» ß««íΘÑ¡¿∩ ¿ Ñú« ΓѬßΓ ¿º »α«ßΓ-  │
  607.     │            αá¡ßΓóá ∩ñαá ó »α«ßΓαá¡ßΓó« ºáñáτ¿;             │
  608.     │           αẫαóáΓ∞ ßó∩º∞ ß««íΘÑ¡¿∩ ß «τÑαÑñ∞ε;            │
  609.     │           óÑα¡πΓ∞ π»αáó½Ñ¡¿Ñ;                              │
  610.     │      }                                                     │
  611.     │      /* ß««íΘÑ¡¿⌐ ¡ÑΓ */                                   │
  612.     │      Ñß½¿ (Σ½áú¿ ¡Ñ αáºαÑΦáεΓ »α¿«ßΓá¡áó½¿óáΓ∞ αáí«Γπ)     │
  613.     │           óÑα¡πΓ∞ π»αáó½Ñ¡¿Ñ ß «Φ¿í¬«⌐;                    │
  614.     │      »α¿«ßΓá¡«ó¿Γ∞ß∩ (»«¬á ß««íΘÑ¡¿Ñ ¡Ñ »«∩ó¿Γß∩ ó «τÑαÑ-  │
  615.     │       ñ¿);                                                 │
  616.     │      »ÑαÑ⌐Γ¿ ¡á loop;                                      │
  617.     │ }                                                          │
  618.     └────────────────────────────────────────────────────────────┘
  619.              É¿ßπ¡«¬ 11.7. Ç½ú«α¿Γ¼ »«½πτÑ¡¿∩ ß««íΘÑ¡¿∩
  620.  
  621.                                     339
  622.  
  623.  
  624.  
  625. óδ»«½¡Ñ¡¿¿ Σπ¡¬µ¿¿ msgget ¿ »«½πτáÑΓ óßÑ ß««íΘÑ¡¿∩ Γ¿-
  626. »á 1 - ºá»α«ßδ «Γ »α«µÑßß«ó-¬½¿Ñ¡Γ«ó. Ä¡  τ¿ΓáÑΓ  ΓѬßΓ  ß««íΘÑ¡¿∩,  ¡áσ«ñ¿Γ
  627. ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑßßá-¬½¿Ñ¡Γá ¿ »α¿αáó¡¿óáÑΓ ó«ºóαáΘáѼ«Ñ º¡áτÑ¡¿Ñ Γ¿»á ß«-
  628. «íΘÑ¡¿∩  º¡áτÑ¡¿ε  φΓ«ú« ¿ñÑ¡Γ¿Σ¿¬áΓ«αá. é ñá¡¡«¼ »α¿¼ÑαÑ «íß½πª¿óáεΘ¿⌐ »α«-
  629. µÑßß ó«ºóαáΘáÑΓ ó ΓѬßΓÑ ß««íΘÑ¡¿∩  »α«µÑßßπ-¬½¿Ñ¡Γπ  Ñú«  ¿ñÑ¡Γ¿Σ¿¬áΓ«α,  ¿
  630. ¬½¿Ñ¡Γ  »«½πτáÑΓ ß««íΘÑ¡¿∩ ß Γ¿»«¼, αáó¡δ¼ ¿ñÑ¡Γ¿Σ¿¬áΓ«α𠬽¿Ñ¡Γá. Æá¬¿¼ «í-
  631. αẫ¼, «íß½πª¿óáεΘ¿⌐ »α«µÑßß »«½πτáÑΓ ß««íΘÑ¡¿∩ Γ«½∞¬« «Γ ¬½¿Ñ¡Γ«ó, á ¬½¿Ñ¡Γ
  632. - Γ«½∞¬« «Γ «íß½πª¿óáεΘÑú« »α«µÑßßá. Éáí«Γá  »α«µÑßß«ó  αÑ὿ºπÑΓß∩  ó  ó¿ñÑ
  633. ¼¡«ú«¬á¡á½∞¡«ú«  óºá¿¼«ñÑ⌐ßΓó¿∩, ßΓα«∩ΘÑú«ß∩ ¡á «ß¡«óÑ «ñ¡«⌐ «τÑαÑñ¿ ß««íΘÑ-
  634. ¡¿⌐.
  635.  
  636.     ┌────────────────────────────────────────────────────────────┐
  637.     │ #include <sys/types.h>                                     │
  638.     │ #include <sys/ipc.h>                                       │
  639.     │ #include <sys/msg.h>                                       │
  640.     │                                                            │
  641.     │ #define MSGKEY     75                                      │
  642.     │ struct msgform                                             │
  643.     │ {                                                          │
  644.     │        long     mtype;                                     │
  645.     │        char     mtext[256];                                │
  646.     │ }msg;                                                      │
  647.     │ int msgid;                                                 │
  648.     │                                                            │
  649.     │ main()                                                     │
  650.     │ {                                                          │
  651.     │       int i,pid,*pint;                                     │
  652.     │       extern cleanup();                                    │
  653.     │                                                            │
  654.     │       for (i = 0; i < 20; i++)                             │
  655.     │            signal(i,cleanup);                              │
  656.     │       msgid = msgget(MSGKEY,0777│IPC_CREAT);               │
  657.     │                                                            │
  658.     │       for (;;)                                             │
  659.     │       {                                                    │
  660.     │            msgrcv(msgid,&msg,256,1,0);                     │
  661.     │            pint = (int *) msg.mtext;                       │
  662.     │            pid = *pint;                                    │
  663.     │            printf("ßÑαóÑα: »«½πτ¿½ «Γ »α«µÑßßá ß pid %d\n",│
  664.     │                   pid);                                    │
  665.     │            msg.mtype = pid;                                │
  666.     │            *pint = getpid();                               │
  667.     │            msgsnd(msgid,&msg,sizeof(int),0);               │
  668.     │       }                                                    │
  669.     │ }                                                          │
  670.     │                                                            │
  671.     │ cleanup()                                                  │
  672.     │ {                                                          │
  673.     │       msgctl(msgid,IPC_RMID,0);                            │
  674.     │       exit();                                              │
  675.     │ }                                                          │
  676.     └────────────────────────────────────────────────────────────┘
  677.  
  678.             É¿ßπ¡«¬ 11.8. Äíß½πª¿óáεΘ¿⌐ »α«µÑßß (ßÑαóÑα)
  679.  
  680.  
  681.     æ««íΘÑ¡¿∩ ¿¼ÑεΓ Σ«α¼π "Γ¿» - ΓѬßΓ", úñÑ ΓѬßΓ »αÑñßΓáó½∩ÑΓ ß«í«⌐  »«Γ«¬
  682.  
  683.                                     340
  684.  
  685. íá⌐Γ«ó.  ô¬áºá¡¿Ñ  Γ¿»á ñáÑΓ »α«µÑßßἠ󫺼«ª¡«ßΓ∞ óδí¿αáΓ∞ ß««íΘÑ¡¿∩ Γ«½∞¬«
  686. «»αÑñѽѡ¡«ú« α«ñá, τΓ« ó Σá⌐½«ó«⌐ ß¿ßΓѼѠ¡Ñ Γᬠ½Ñú¬« ßñѽáΓ∞. Æá¬¿¼ «íαá-
  687. º«¼, »α«µÑßßδ ¼«úπΓ óδí¿αáΓ∞ ¿º «τÑαÑñ¿ ß««íΘÑ¡¿∩ «»αÑñѽѡ¡«ú« Γ¿»á  ó  »«-
  688. α∩ñ¬Ñ  ¿σ  »«ßΓπ»½Ñ¡¿∩, »α¿τѼ φΓá «τÑαÑñ¡«ßΓ∞ úáαá¡Γ¿απÑΓß∩ ∩ñα«¼. ìÑß¼«Γα∩
  689. ¡á Γ«, τΓ« «í¼Ñ¡ ß««íΘÑ¡¿∩¼¿ ¼«ªÑΓ íδΓ∞ αÑ὿º«óá¡ ¡á »«½∞º«óáΓѽ∞߬«¼ πα«ó-
  690. ¡Ñ ßαÑñßΓóἿ Σá⌐½«ó«⌐  ß¿ßΓѼδ,  »αÑñßΓáó½Ñ¡¡δ⌐  óáΦѼπ  ó¡¿¼á¡¿ε  ¼Ñσá¡¿º¼
  691. «íÑß»Ñτ¿óáÑΓ í«½ÑÑ φΣΣÑ¬Γ¿ó¡πε «αúá¡¿ºáµ¿ε »ÑαÑñáτ¿ ñá¡¡δσ ¼Ñªñπ »α«µÑßßἿ.
  692.     æ  »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ msgctl »α«µÑßß ¼«ªÑΓ ºá»α«ß¿Γ∞ ¿¡Σ«α¼áµ¿ε «
  693. ßΓáΓπßÑ ñÑß¬α¿»Γ«αá ß««íΘÑ¡¿∩, πßΓá¡«ó¿Γ∞ φëàßΓáΓπß ¿½¿ πñ὿Γ∞ ñÑß¬α¿»Γ«α
  694. ß««íΘÑ¡¿∩ ¿º ß¿ßΓѼδ. æ¿¡Γá¬ß¿ß ó맮óá Σπ¡¬µ¿¿:
  695.  
  696.     msgctl(id,cmd,mstatbuf)
  697.  
  698. úñÑ id - ñÑß¬α¿»Γ«α ß««íΘÑ¡¿∩, cmd - Γ¿» ¬«¼á¡ñδ, mstatbuf - áñαÑß »«½∞º«óá-
  699. Γѽ∞߬«⌐ ßΓαπ¬Γπαδ, ó ¬«Γ«α«⌐ íπñπΓ σαá¡¿Γ∞ß∩ π»αáó½∩εΘ¿Ñ »áαá¼ÑΓαδ ¿½¿  αÑ-
  700. ºπ½∞ΓáΓδ «íαáí«Γ¬¿ ºá»α«ßá. ü«½ÑÑ »«ñα«í¡« «í áαúπ¼Ñ¡Γáσ Σπ¡¬µ¿¿ »«⌐ñÑΓ αÑτ∞
  701. ó Åα¿½«ªÑ¡¿¿.
  702.     éÑα¡Ñ¼ß∩  ¬ »α¿¼Ñαπ, »αÑñßΓáó½Ñ¡¡«¼π ¡á É¿ßπ¡¬Ñ 11.8. Äíß½πª¿óáεΘ¿⌐ »α«-
  703. µÑßß »α¿¡¿¼áÑΓ ß¿ú¡á½δ ¿ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ cleanup πñá½∩ÑΓ «τÑαÑñ∞ ß««íΘÑ¡¿⌐
  704. ¿º ß¿ßΓѼδ. àß½¿ ªÑ ¿¼ ¡Ñ í佫 »«⌐¼á¡« ¡¿ «ñ¡«ú«  ß¿ú¡á½á  ¿½¿  íδ½  »«½πτÑ¡
  705. ß¿ú¡á½  SIGKILL,  «τÑαÑñ∞  ß««íΘÑ¡¿⌐ «ßΓáÑΓß∩ ó ß¿ßΓѼÑ, ñáªÑ Ñß½¿ ¡á ¡ÑÑ ¡Ñ
  706. ßßδ½áÑΓß∩ ¡¿ «ñ¿¡ ¿º »α«µÑßß«ó. äá½∞¡Ñ⌐Φ¿Ñ  »«»δΓ¬¿  ¿ß¬½ετ¿Γѽ∞¡«  ß«ºñá¡¿∩
  707. ¡«ó«⌐ «τÑαÑñ¿ ß««íΘÑ¡¿⌐ ß ñá¡¡δ¼ ¬½ετ«¼ (¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼) ¡Ñ íπñπΓ ¿¼ÑΓ∞ πß-
  708. »Ñσ ñ« ΓÑσ »«α, »«¬á ßΓáαá∩ «τÑαÑñ∞ ¡Ñ íπñÑΓ πñá½Ñ¡á ¿º ß¿ßΓѼδ.
  709.  
  710.  
  711.     E11.2.2 Éáºñѽѡ¿Ñ »á¼∩Γ¿F
  712.  
  713.     Åα«µÑßßδ  ¼«úπΓ  óºá¿¼«ñÑ⌐ßΓó«óáΓ∞  ñαπú  ß ñαπú«¼ ¡Ñ»«ßαÑñßΓóÑ¡¡« »πΓѼ
  714. αáºñѽѡ¿∩ (ß«ó¼ÑßΓ¡«ú« ¿ß»«½∞º«óá¡¿∩) πτáßΓ¬«ó ó¿αΓπá½∞¡«ú« áñαÑß¡«ú« »α«ß-
  715. Γαá¡ßΓóá ¿ «í¼Ñ¡á ñá¡¡δ¼¿ τÑαѺ αáºñѽ∩Ѽπε »á¼∩Γ∞.  æ¿ßΓѼ¡δÑ  Σπ¡¬µ¿¿  ñ½∩
  716. αáí«Γδ ß αáºñѽ∩Ѽ«⌐ »á¼∩Γ∞ε ¿¼ÑεΓ ¼¡«ú« ßσ«ñ¡«ú« ß ß¿ßΓѼ¡δ¼¿ Σπ¡¬µ¿∩¼¿ ñ½∩
  717. αáí«Γδ ß ß««íΘÑ¡¿∩¼¿. öπ¡¬µ¿∩ shmget ß«ºñáÑΓ ¡«óπε «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩-
  718. Γ¿  ¿½¿  ó«ºóαáΘáÑΓ  áñαÑß πªÑ ßπΘÑßΓóπεΘÑ⌐ «í½áßΓ¿, Σπ¡¬µ¿∩ shmat ½«ú¿τÑ߬¿
  719. »α¿ß«Ññ¿¡∩ÑΓ «í½áßΓ∞ ¬ ó¿αΓπá½∞¡«¼π áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »α«µÑßßá, Σπ¡¬µ¿∩
  720. shmdt «Γß«Ññ¿¡∩ÑΓ ÑÑ, á Σπ¡¬µ¿∩ shmctl ¿¼ÑÑΓ ñѽ« ß αẽ¿τ¡δ¼¿  »áαá¼ÑΓαἿ,
  721. ßó∩ºá¡¡δ¼¿  ß  αáºñѽ∩Ѽ«⌐  »á¼∩Γ∞ε. Åα«µÑßßδ óÑñπΓ τΓÑ¡¿Ñ ¿ ºá»¿ß∞ ñá¡¡δσ ó
  722. «í½áßΓ¿ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿, ¿ß»«½∞ºπ∩ ñ½∩ φΓ«ú« ΓÑ ªÑ ßá¼δÑ ¼áΦ¿¡¡δÑ  ¬«¼á¡-
  723. ñδ,  τΓ«  ¿ »α¿ αáí«ΓÑ ß «íδτ¡«⌐ »á¼∩Γ∞ε. Å«ß½Ñ »α¿ß«Ññ¿¡Ñ¡¿∩ ¬ ó¿αΓπá½∞¡«¼π
  724. áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »α«µÑßßá «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿  ßΓá¡«ó¿Γß∩  ñ«ß-
  725. Γπ»¡á ΓᬠªÑ, ¬á¬ ½εí«⌐ πτáßΓ«¬ ó¿αΓπá½∞¡«⌐ »á¼∩Γ¿; ñ½∩ ñ«ßΓπ»á ¬ ¡áσ«ñ∩Θ¿¼-
  726. ß∩ ó ¡Ñ⌐ ñá¡¡δ¼ ¡Ñ ¡πª¡δ «íαáΘÑ¡¿∩ ¬ ¬á¬¿¼-Γ« ñ«»«½¡¿Γѽ∞¡δ¼ ß¿ßΓѼ¡δ¼ Σπ¡¬-
  727. µ¿∩¼.
  728.     æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ shmget:
  729.  
  730.     shmid = shmget(key,size,flag);
  731.  
  732. úñÑ  size - «íΩѼ «í½áßΓ¿ ó íá⌐Γáσ. ƒñα« ¿ß»«½∞ºπÑΓ key ñ½∩ óÑñÑ¡¿∩ »«¿ß¬á ó
  733. Γáí½¿µÑ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿: Ñß½¿ »«ñσ«ñ∩Θá∩ ºá»¿ß∞ «í¡áαπªÑ¡á ¿ Ñß½¿  αáºαÑ-
  734. ΦÑ¡¿Ñ  ¡á  ñ«ßΓπ»  ¿¼ÑÑΓß∩, ∩ñα« ó«ºóαáΘáÑΓ óδºδóáεΘѼπ »α«µÑßßπ π¬áºá¡¡δ⌐ ó
  735. ºá»¿ß¿ ñÑß¬α¿»Γ«α. àß½¿ ºá»¿ß∞ ¡Ñ ¡á⌐ñѡᠿ Ñß½¿ »«½∞º«óáΓѽ∞ πßΓá¡«ó¿½ Σ½áú
  736. IPC_CREAT, π¬áºδóáεΘ¿⌐ ¡á ¡Ñ«íσ«ñ¿¼«ßΓ∞ ß«ºñá¡¿∩ ¡«ó«⌐ «í½áßΓ¿, ∩ñα«  »α«óÑ-
  737. α∩ÑΓ ¡áσ«ªñÑ¡¿Ñ αẼÑαá «í½áßΓ¿ ó πßΓá¡«ó½Ñ¡¡δσ ß¿ßΓѼ«⌐ »αÑñѽáσ ¿ óδñѽ∩ÑΓ
  738. «í½áßΓ∞ »« á½ú«α¿Γ¼π allocreg (αáºñѽ 6.5.2). ƒñα« ºá»¿ßδóáÑΓ πßΓᡫ󬿠»αáó
  739. ñ«ßΓπ»á, αẼÑα «í½áßΓ¿ ¿ π¬áºáΓѽ∞ ¡á ß««ΓóÑΓßΓóπεΘπε ºá»¿ß∞ Γáí½¿µδ «í½áß-
  740. ΓÑ⌐ ó Γáí½¿µπ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ (É¿ßπ¡«¬ 11.9) ¿ πßΓá¡áó½¿óáÑΓ Σ½áú, ßó¿ñÑ-
  741. Γѽ∞ßΓóπεΘ¿⌐  « Γ«¼, τΓ« ß «í½áßΓ∞ε ¡Ñ ßó∩ºá¡á «Γñѽ∞¡á∩ »á¼∩Γ∞. Äí½áßΓ¿ óδ-
  742. ñѽ∩ÑΓß∩ »á¼∩Γ∞ (Γáí½¿µδ ßΓαá¡¿µ ¿ Γ.».) Γ«½∞¬« Γ«úñá, ¬«úñá »α«µÑßß »α¿ß«Ñ-
  743. ñ¿¡∩ÑΓ «í½áßΓ∞ ¬ ßó«Ñ¼π áñαÑß¡«¼π  »α«ßΓαá¡ßΓóπ.  ƒñα«  πßΓá¡áó½¿óáÑΓ  ΓᬪÑ
  744.  
  745.                                     341
  746.  
  747. Σ½áú,  ú«ó«α∩Θ¿⌐  «  Γ«¼, τΓ« »« ºáóÑαΦÑ¡¿¿ »«ß½Ññ¡Ñú« ßó∩ºá¡¡«ú« ß «í½áßΓ∞ε
  748. »α«µÑßßá «í½áßΓ∞ ¡Ñ ñ«½ª¡á «ßó«í«ªñáΓ∞ß∩. Æá¬¿¼ «íαẫ¼, ñá¡¡δÑ ó  αáºñѽ∩Ñ-
  749. ¼«⌐ »á¼∩Γ¿ «ßΓáεΓß∩ ó ß«σαá¡¡«ßΓ¿, ñáªÑ Ñß½¿ «¡á ¡Ñ »α¿¡áñ½Ñª¿Γ ¡¿ «ñ¡«¼π ¿º
  750. »α«µÑßß«ó (¬á¬ τáßΓ∞ ó¿αΓπá½∞¡«ú« áñαÑß¡«ú« »α«ßΓαá¡ßΓóá »«ß½Ññ¡Ñú«).
  751.  
  752.     Æáí½¿µá αáº-                             Æáí½¿µá »α«µÑßß«ó -
  753.     ñѽ∩Ѽ«⌐ »á-       Æáí½¿µá «í½áßΓÑ⌐      τáßΓ¡á∩ Γáí½¿µá «í-
  754.        ¼∩Γ¿                                    ½áßΓÑ⌐ »α«µÑßßá
  755.     ┌──────────┐       ┌──────────────┐          ┌─────────┐
  756.     │      ────┼────┐  │              │     ┌────┼────     │
  757.     ├──────────┤   ┌│─>├──────────────┤<────┘    ├─────────┤
  758.     │      ────┼───┘│  │              │      ┌───┼────     │
  759.     ├──────────┤    │  ├──────────────┤<────┐│   ├─────────┤
  760.     │      ────┼──┐ │  │              │     └│───┼────     │
  761.     ├──────────┤  │ │  ├──────────────┤      │   ├─────────┤
  762.     │     ∙    │  │ │  │              │      │   │         │
  763.     │     ∙    │  │ └─>├──────────────┤      │   ├─────────┤
  764.     │     ∙    │  │    │              │      │   │         │
  765.     │     ∙    │  └───>├──────────────┤<─────┘   ├─────────┤
  766.     │     ∙    │       │              │  (»«ß½Ñ  │         │
  767.     │     ∙    │       ├──────────────┤   shmat) ├─────────┤
  768.     │     ∙    │       │      ∙       │          │         │
  769.     │     ∙    │       │      ∙       │          ├─────────┤
  770.     │     ∙    │       └──────────────┘          │    ∙    │
  771.     │     ∙    │                                 │    ∙    │
  772.     └──────────┘                                 └─────────┘
  773.  
  774.     É¿ßπ¡«¬ 11.9. æΓαπ¬Γπαδ ñá¡¡δσ, ¿ß»«½∞ºπѼδÑ »α¿ αáºñѽѡ¿¿ »á¼∩Γ¿
  775.  
  776.  
  777.     Åα«µÑßß  »α¿ß«Ññ¿¡∩ÑΓ  «í½áßΓ∞  αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ¬ ßó«Ñ¼π ó¿αΓπá½∞¡«¼π
  778. áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ ß »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ shmat:
  779.  
  780.     virtaddr = shmat(id,addr,flags);
  781.  
  782. ç¡áτÑ¡¿Ñ id, ó«ºóαáΘáѼ«Ñ Σπ¡¬µ¿Ñ⌐ shmget, ¿ñÑ¡Γ¿Σ¿µ¿απÑΓ «í½áßΓ∞  αáºñѽ∩Ñ-
  783. ¼«⌐  »á¼∩Γ¿, addr ∩ó½∩ÑΓß∩ ó¿αΓπá½∞¡δ¼ áñαÑß«¼, »« ¬«Γ«α«¼π »«½∞º«óáΓѽ∞ σ«-
  784. τÑΓ »«ñ¬½ετ¿Γ∞ «í½áßΓ∞, á ß »«¼«Θ∞ε Σ½áú«ó (flags) ¼«ª¡« π¬áºáΓ∞, »αÑñ¡áº¡á-
  785. τѡᠽ¿ «í½áßΓ∞ Γ«½∞¬« ñ½∩ τΓÑ¡¿∩ ¿ ¡πª¡« ½¿ ∩ñα𠫬απú½∩Γ∞ º¡áτÑ¡¿Ñ π¬áºá¡-
  786. ¡«ú« »«½∞º«óáΓѽѼ áñαÑßá. é«ºóαáΘáѼ«Ñ Σπ¡¬µ¿Ñ⌐ º¡áτÑ¡¿Ñ, virtaddr,  »αÑñß-
  787. Γáó½∩ÑΓ  ß«í«⌐ ó¿αΓπá½∞¡δ⌐ áñαÑß, »« ¬«Γ«α«¼π ∩ñα« »α«¿ºóѽ« »«ñ¬½ετÑ¡¿Ñ «í-
  788. ½áßΓ¿ ¿ ¬«Γ«αδ⌐ ¡Ñ óßÑúñá ß«ó»áñáÑΓ ß áñαÑß«¼, π¬áºá¡¡δ¼ »«½∞º«óáΓѽѼ.
  789.     é ¡áτá½Ñ óδ»«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ shmat  ∩ñα«  »α«óÑα∩ÑΓ  ¡á½¿τ¿Ñ  π
  790. »α«µÑßßá  ¡Ñ«íσ«ñ¿¼δσ  »αáó ñ«ßΓπ»á ¬ «í½áßΓ¿ (É¿ßπ¡«¬ 11.10). Ä¡« ¿ßß½ÑñπÑΓ
  791. π¬áºá¡¡δ⌐ »«½∞º«óáΓѽѼ áñαÑß; Ñß½¿ «¡ αáóÑ¡ 0,  ∩ñα«  óδí¿αáÑΓ  ó¿αΓπá½∞¡δ⌐
  792. áñαÑß »« ßó«Ñ¼π πß¼«ΓαÑ¡¿ε.
  793.     Äí½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ¡Ñ ñ«½ª¡á »ÑαÑßѬáΓ∞ß∩ ó ó¿αΓπá½∞¡«¼ áñαÑß¡«¼
  794. »α«ßΓαá¡ßΓóÑ  »α«µÑßßá  ß  ñαπú¿¼¿ «í½áßΓ∩¼¿; ß½Ññ«óáΓѽ∞¡«, ÑÑ óδí«α ñ«½ªÑ¡
  795. »α«¿ºó«ñ¿Γ∞ß∩ αáºπ¼¡« ¿ «ßë᫪¡«. Æá¬, ¡á»α¿¼Ñα,  »α«µÑßß  ¼«ªÑΓ  πóѽ¿τ¿Γ∞
  796. αẼÑα  »α¿¡áñ½ÑªáΘÑ⌐  Ñ¼π «í½áßΓ¿ ñá¡¡δσ ß »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ brk, ¿
  797. ¡«óá∩ «í½áßΓ∞ ñá¡¡δσ íπñÑΓ ß«ñÑαªáΓ∞ áñαÑßá, ß¼Ñª¡δÑ ß »αѪ¡Ñ⌐ «í½áßΓ∞ε; »«-
  798. φΓ«¼π, ∩ñαπ ¡Ñ ß½ÑñπÑΓ »α¿ß«Ññ¿¡∩Γ∞ «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ß½¿Φ¬«¼ í½¿º-
  799. ¬« ¬ «í½áßΓ¿ ñá¡¡δσ »α«µÑßßá. Æá¬ ªÑ ¡Ñ ß½ÑñπÑΓ αẼÑΘáΓ∞ «í½áßΓ∞  αáºñѽ∩Ñ-
  800. ¼«⌐  »á¼∩Γ¿ óí½¿º¿ «Γ óÑαΦ¿¡δ ßΓѬá, τΓ«íδ ßΓѬ »α¿ ßó«Ñ¼ »«ß½ÑñπεΘѼ πóѽ¿-
  801. τÑ¡¿¿ ¡Ñ ºá½Ñºá½ ºá ÑÑ »αÑñѽδ. àß½¿, ¡á»α¿¼Ñα, ßΓѬ  αáßΓÑΓ  ó  ¡á»αáó½Ñ¡¿¿
  802. πóѽ¿τÑ¡¿∩ áñαÑß«ó, ½πτΦÑ óßÑú« αẼÑßΓ¿Γ∞ «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ¡Ñ»«ß-
  803. αÑñßΓóÑ¡¡« »ÑαÑñ ¡áτὫ¼ «í½áßΓ¿ ßΓѬá.
  804.     ƒñα«  »α«óÑα∩ÑΓ  ó«º¼«ª¡«ßΓ∞ αẼÑΘÑ¡¿∩ «í½áßΓ¿ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ó áñ-
  805.  
  806.  
  807.                                     342
  808.  
  809.     ┌────────────────────────────────────────────────────────────┐
  810.     │ á½ú«α¿Γ¼ shmat     /* »«ñ¬½ετ¿Γ∞ αáºñѽ∩Ѽπε »á¼∩Γ∞ */     │
  811.     │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩:  (1) ñÑß¬α¿»Γ«α «í½áßΓ¿ αáºñѽ∩Ѽ«⌐    │
  812.     │                          »á¼∩Γ¿                            │
  813.     │                      (2) ó¿αΓπá½∞¡δ⌐ áñαÑß ñ½∩ »«ñ¬½ετÑ¡¿∩ │
  814.     │                          «í½áßΓ¿                           │
  815.     │                      (3) Σ½áú¿                             │
  816.     │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ó¿αΓπá½∞¡δ⌐ áñαÑß, »« ¬«Γ«α«¼π «í½áßΓ∞│
  817.     │                      »«ñ¬½ετÑ¡á Σá¬Γ¿τÑ߬¿                 │
  818.     │ {                                                          │
  819.     │     »α«óÑα¿Γ∞ »αáó¿½∞¡«ßΓ∞ π¬áºá¡¿∩ ñÑß¬α¿»Γ«αá, »αáóá ñ«- │
  820.     │      ßΓπ»á ¬ «í½áßΓ¿;                                      │
  821.     │     Ñß½¿ (»«½∞º«óáΓѽ∞ π¬áºá½ ó¿αΓπá½∞¡δ⌐ áñαÑß)           │
  822.     │     {                                                      │
  823.     │          «¬απú½¿Γ∞ ó¿αΓπá½∞¡δ⌐ áñαÑß ó ß««ΓóÑΓßΓó¿¿ ß Σ½á- │
  824.     │           úἿ;                                            │
  825.     │          »α«óÑα¿Γ∞ ßπΘÑßΓó«óá¡¿Ñ »«½πτÑ¡¡«ú« áñαÑßá, αẼÑα│
  826.     │           «í½áßΓ¿;                                         │
  827.     │     }                                                      │
  828.     │     ó »α«Γ¿ó¡«¼ ß½πτáÑ   /* »«½∞º«óáΓѽ∞ σ«τÑΓ, τΓ«íδ ∩ñα« │
  829.     │                           * ßἫ ¡áΦ½« »«ñσ«ñ∩Θ¿⌐ áñαÑß */ │
  830.     │          ∩ñα« óδí¿αáÑΓ áñαÑß: ó ß½πτáÑ ¡Ñπñáτ¿ óδñáÑΓß∩    │
  831.     │           «Φ¿í¬á;                                          │
  832.     │     »α¿ß«Ññ¿¡¿Γ∞ «í½áßΓ∞ ¬ áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »α«µÑßßá │
  833.     │      (á½ú«α¿Γ¼ attachreg);                                 │
  834.     │     Ñß½¿ («í½áßΓ∞ »α¿ß«Ññ¿¡∩ÑΓß∩ ó»ÑαóδÑ)                  │
  835.     │          óδñѽ¿Γ∞ Γáí½¿µδ ßΓαá¡¿µ ¿ «ΓóÑßΓ¿ »á¼∩Γ∞ »«ñ ¡ÑÑ │
  836.     │           (á½ú«α¿Γ¼ growreg);                              │
  837.     │     óÑα¡πΓ∞ (ó¿αΓπá½∞¡δ⌐ áñαÑß Σá¬Γ¿τÑ߬«ú« »α¿ß«Ññ¿¡Ñ¡¿∩  │
  838.     │      «í½áßΓ¿);                                             │
  839.     │ }                                                          │
  840.     └────────────────────────────────────────────────────────────┘
  841.  
  842.        É¿ßπ¡«¬ 11.10. Ç½ú«α¿Γ¼ »α¿ß«Ññ¿¡Ñ¡¿∩ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿
  843.  
  844.  
  845. αÑß¡«¼  »α«ßΓαá¡ßΓóÑ  »α«µÑßßá  ¿  »α¿ß«Ññ¿¡∩ÑΓ  ÑÑ  ß   »«¼«Θ∞ε   á½ú«α¿Γ¼á
  846. attachreg. àß½¿ óδºδóáεΘ¿⌐ »α«µÑßß ∩ó½∩ÑΓß∩ »Ñαóδ¼ »α«µÑßß«¼, ¬«Γ«αδ⌐ »α¿ß«-
  847. Ññ¿¡∩ÑΓ  «í½áßΓ∞, ∩ñα« óδñѽ∩ÑΓ ñ½∩ «í½áßΓ¿ óßÑ ¡Ñ«íσ«ñ¿¼δÑ Γáí½¿µδ, ¿ß»«½∞-
  848. ºπ∩ á½ú«α¿Γ¼ growreg, ºá»¿ßδóáÑΓ óαѼ∩ »α¿ß«Ññ¿¡Ñ¡¿∩ ó ß««ΓóÑΓßΓóπεΘÑÑ  »«½Ñ
  849. Γáí½¿µδ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ¿ ó«ºóαáΘáÑΓ »α«µÑßßπ ó¿αΓπá½∞¡δ⌐ áñαÑß, »« ¬«Γ«-
  850. α«¼π «í½áßΓ∞ íδ½á ¿¼ »«ñ¬½ετÑ¡á Σá¬Γ¿τÑ߬¿.
  851.     ÄΓß«Ññ¿¡Ñ¡¿Ñ «í½áßΓ¿ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ «Γ ó¿αΓπá½∞¡«ú« áñαÑß¡«ú« »α«ßΓ-
  852. αá¡ßΓóá »α«µÑßßá óδ»«½¡∩ÑΓ Σπ¡¬µ¿∩
  853.  
  854.     shmdt(addr)
  855.  
  856. úñÑ  addr  - ó¿αΓπá½∞¡δ⌐ áñαÑß, ó«ºóαáΘÑ¡¡δ⌐ Σπ¡¬µ¿Ñ⌐ shmat. ìÑß¼«Γα∩ ¡á Γ«,
  857. τΓ« í«½ÑÑ ½«ú¿τ¡«⌐ »αÑñßΓáó½∩ÑΓß∩ »ÑαÑñáτá ¿ñÑ¡Γ¿Σ¿¬áΓ«αá, »α«µÑßß ¿ß»«½∞ºπ-
  858. ÑΓ ó¿αΓπá½∞¡δ⌐ áñαÑß αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿, »«ß¬«½∞¬π «ñ¡á ¿ ΓᠪѠ«í½áßΓ∞ αáº-
  859. ñѽ∩Ѽ«⌐ »á¼∩Γ¿ ¼«ªÑΓ íδΓ∞ »«ñ¬½ετѡᠬ áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »α«µÑßßá ¡Ñß-
  860. ¬«½∞¬« αáº, ¬ Γ«¼π ªÑ ÑÑ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ¼«ªÑΓ íδΓ∞ πñá½Ñ¡  ¿º  ß¿ßΓѼδ.  ƒñα«
  861. »α«¿ºó«ñ¿Γ  »«¿ß¬ «í½áßΓ¿ »« π¬áºá¡¡«¼π áñαÑßπ ¿ «Γß«Ññ¿¡∩ÑΓ ÑÑ «Γ áñαÑß¡«ú«
  862. »α«ßΓαá¡ßΓóá »α«µÑßßá, ¿ß»«½∞ºπ∩ á½ú«α¿Γ¼ detachreg (αáºñѽ 6.5.7). Å«ß¬«½∞-
  863. ¬π ó Γáí½¿µáσ «í½áßΓÑ⌐ «ΓßπΓßΓóπεΓ «íαáΓ¡δÑ π¬áºáΓѽ¿ ¡á Γáí½¿µπ αáºñѽ∩Ѽ«⌐
  864. »á¼∩Γ¿, ∩ñαπ »α¿σ«ñ¿Γß∩ »α«ß¼áΓα¿óáΓ∞ Γáí½¿µπ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿  ó  »«¿ß¬áσ
  865. ºá»¿ß¿,  π¬áºδóáεΘÑ⌐  ¡á ñá¡¡πε «í½áßΓ∞, ¿ ºá»¿ßδóáΓ∞ ó ß««ΓóÑΓßΓóπεΘÑÑ »«½Ñ
  866. óαѼ∩ »«ß½Ññ¡Ñú« «Γ¬½ετÑ¡¿∩ «í½áßΓ¿.
  867.     Éáßß¼«Γα¿¼ »α«úαá¼¼π, »αÑñßΓáó½Ñ¡¡πε ¡á É¿ßπ¡¬Ñ 11.11. é ¡Ñ⌐ «»¿ßδóáÑΓß∩
  868.  
  869.                                     343
  870.  
  871. »α«µÑßß, ß«ºñáεΘ¿⌐ «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ αẼÑα«¼ 128  èíá⌐Γ  ¿  ñóáªñδ
  872. »α¿ß«Ññ¿¡∩εΘ¿⌐  ÑÑ ¬ ßó«Ñ¼π áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »« αáº¡δ¼ ó¿αΓπá½∞¡δ¼ áñ-
  873. αÑßá¼. é "»Ñαóπε" «í½áßΓ∞ «¡ ºá»¿ßδóáÑΓ ñá¡¡δÑ, á τ¿ΓáÑΓ ¿σ ¿º "óΓ«α«⌐"  «í-
  874. ½áßΓ¿. ìá É¿ßπ¡¬Ñ 11.12 »«¬áºá¡ ñαπú«⌐ »α«µÑßß, »α¿ß«Ññ¿¡∩εΘ¿⌐ Γπ ªÑ «í½áßΓ∞
  875. («¡ »«½πτáÑΓ Γ«½∞¬« 64 èíá⌐Γá, Γᬿ¼ «íαẫ¼, ¬áªñδ⌐ »α«µÑßß ¼«ªÑΓ ¿ß»«½∞º«-
  876. óáΓ∞ αạδ⌐ «íΩѼ «í½áßΓ¿ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿); «¡ ªñÑΓ ¼«¼Ñ¡Γá, ¬«úñá »Ñαóδ⌐
  877. »α«µÑßß  ºá»¿ΦÑΓ ó »Ñαó«Ñ »α¿¡áñ½ÑªáΘÑÑ «í½áßΓ¿ ß½«ó« ½εí«Ñ «Γ½¿τ¡«Ñ «Γ ¡π½∩
  878. º¡áτÑ¡¿Ñ, ¿ ºáΓѼ »α¿¡¿¼áÑΓß∩ ßτ¿ΓδóáΓ∞ ñá¡¡δÑ ¿º  «í½áßΓ¿.  ÅÑαóδ⌐  »α«µÑßß
  879. ñѽáÑΓ  "»áπºπ"  (pause), »αÑñ«ßΓáó½∩∩ óΓ«α«¼π »α«µÑßßπ ó«º¼«ª¡«ßΓ∞ óδ»«½¡Ñ-
  880. ¡¿∩; ¬«úñá »Ñαóδ⌐ »α«µÑßß »α¿¡¿¼áÑΓ ß¿ú¡á½, «¡ πñá½∩ÑΓ  «í½áßΓ∞  αáºñѽ∩Ѽ«⌐
  881. »á¼∩Γ¿ ¿º ß¿ßΓѼδ.
  882.     Åα«µÑßß  ºá»αáΦ¿óáÑΓ ¿¡Σ«α¼áµ¿ε « ß«ßΓ«∩¡¿¿ «í½áßΓ¿ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ¿
  883. »α«¿ºó«ñ¿Γ πßΓá¡«ó¬π »áαá¼ÑΓα«ó ñ½∩ ¡ÑÑ ß »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ shmctl:
  884.  
  885.     shmctl(id,cmd,shmstatbuf);
  886.  
  887. ç¡áτÑ¡¿Ñ id ¿ñÑ¡Γ¿Σ¿µ¿απÑΓ ºá»¿ß∞ Γáí½¿µδ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿, cmd «»αÑñѽ∩ÑΓ
  888. Γ¿» «»Ñαᵿ¿, á shmstatbuf ∩ó½∩ÑΓß∩ áñαÑß«¼  »«½∞º«óáΓѽ∞߬«⌐  ßΓαπ¬Γπαδ,  ó
  889. ¬«Γ«απε  »«¼ÑΘáÑΓß∩ ¿¡Σ«α¼áµ¿∩ « ß«ßΓ«∩¡¿¿ «í½áßΓ¿. ƒñα« Γαá¬ΓπÑΓ Γ¿» «»Ñαá-
  890. µ¿¿ Γ«τ¡« ΓᬠªÑ, ¬á¬ ¿ »α¿ π»αáó½Ñ¡¿¿ ß««íΘÑ¡¿∩¼¿. ôñá½∩∩ «í½áßΓ∞ αáºñѽ∩Ñ-
  891. ¼«⌐ »á¼∩Γ¿, ∩ñα« «ßó«í«ªñáÑΓ ß««ΓóÑΓßΓóπεΘπε Ñ⌐ ºá»¿ß∞ ó Γáí½¿µÑ αáºñѽ∩Ѽ«⌐
  892. »á¼∩Γ¿ ¿ »α«ß¼áΓα¿óáÑΓ Γáí½¿µπ «í½áßΓÑ⌐: Ñß½¿ «í½áßΓ∞ ¡Ñ  íδ½á  »α¿ß«Ññ¿¡Ñ¡á
  893. ¡¿  ¬  «ñ¡«¼π ¿º »α«µÑßß«ó, ∩ñα« «ßó«í«ªñáÑΓ ºá»¿ß∞ Γáí½¿µδ ¿ óßÑ óδñѽѡ¡δÑ
  894. «í½áßΓ¿ αÑßπαßδ, ¿ß»«½∞ºπ∩ ñ½∩ φΓ«ú« á½ú«α¿Γ¼ freereg (αáºñѽ  6.5.6).  àß½¿
  895. ªÑ  «í½áßΓ∞  »«-»αѪ¡Ñ¼π  »«ñ¬½ετѡᠬ ¬á¬¿¼-Γ« »α«µÑßßá¼ (º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á
  896. ßß佫¬ ¡á ¡ÑÑ í«½∞ΦÑ 0), ∩ñα« Γ«½∞¬« ßíαáßδóáÑΓ Σ½áú, ú«ó«α∩Θ¿⌐ «  Γ«¼,  τΓ«
  897. »«  ºáóÑαΦÑ¡¿¿  »«ß½Ññ¡Ñú« ßó∩ºá¡¡«ú« ß ¡Ñε »α«µÑßßá «í½áßΓ∞ ¡Ñ ñ«½ª¡á «ßó«-
  898. í«ªñáΓ∞ß∩. Åα«µÑßßδ, πªÑ ¿ß»«½∞ºπεΘ¿Ñ «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿, »α«ñ«½ªáεΓ
  899. αáí«ΓáΓ∞ ß ¡Ñ⌐, ¡«óδÑ ªÑ »α«µÑßßδ ¡Ñ ¼«úπΓ »α¿ß«Ññ¿¡¿Γ∞ ÑÑ. è«úñá  óßÑ  »α«-
  900. µÑßßδ  «Γ¬½ετáΓ «í½áßΓ∞, ∩ñα« «ßó«í«ñ¿Γ ÑÑ. ¥Γ« »«σ«ªÑ ¡á Γ«, ¬á¬ ó Σá⌐½«ó«⌐
  901. ß¿ßΓѼѠ»«ß½Ñ αáºαδóá ßó∩º¿ ß Σá⌐½«¼ »α«µÑßß ¼«ªÑΓ ó¡«ó∞ «Γ¬αδΓ∞ Ñú« ¿  »α«-
  902. ñ«½ªáΓ∞ ß ¡¿¼ αáí«Γπ.
  903.  
  904.  
  905.     E11.2.3 æÑ¼áΣ«αδF
  906.  
  907.     æ¿ßΓѼ¡δÑ  Σπ¡¬µ¿¿ αáí«Γδ ß ßѼáΣ«αἿ «íÑß»Ñτ¿óáεΓ ß¿¡σα«¡¿ºáµ¿ε óδ»«½-
  908. ¡Ñ¡¿∩ »áαώѽ∞¡δσ »α«µÑßß«ó, »α«¿ºó«ñ∩ ¡áí«α ñÑ⌐ßΓó¿⌐ Ññ¿¡ßΓóÑ¡¡« ¡áñ úαπ»-
  909. »«⌐ ßѼáΣ«α«ó (ßαÑñßΓóἿ ¡¿º¬«ú« πα«ó¡∩). ä« ¿ß»«½∞º«óá¡¿∩ ßѼáΣ«α«ó,  Ñß½¿
  910. »α«µÑßßπ ¡πª¡« í佫 ºáí½«¬¿α«óáΓ∞ ¡Ñ¬¿⌐ αÑßπαß, «¡ »α¿íÑúá½ ¬ ß«ºñá¡¿ε ß »«-
  911. ¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ creat ß»Ñµ¿á½∞¡«ú« í½«¬¿απεΘÑú« Σá⌐½á. àß½¿ Σá⌐½ πªÑ
  912. ßπΘÑßΓó«óá½,  Σπ¡¬µ¿∩  creat  ºáóÑαΦá½áß∞  ¡Ñπñáτ¡«, ¿ »α«µÑßß ñѽὠóδó«ñ «
  913. Γ«¼, τΓ« αÑßπαß πªÑ ºáí½«¬¿α«óá¡ ñαπú¿¼ »α«µÑßß«¼. â½áó¡δÑ ¡Ññ«ßΓáΓ¬¿ Γᬫú«
  914. »«ñσ«ñᠺᬽετ὿ß∞ ó Γ«¼, τΓ« »α«µÑßß ¡Ñ º¡á½, ó ¬á¬«⌐ ¼«¼Ñ¡Γ  Ñ¼π  ß½ÑñπÑΓ
  915. »αÑñ»α¿¡∩Γ∞ ß½ÑñπεΘπε »«»δΓ¬π, á ΓᬪѠó Γ«¼, τΓ« í½«¬¿απεΘ¿Ñ Σá⌐½δ ß½πτá⌐¡«
  916. «ßΓáó὿ß∞ ó ß¿ßΓѼѠó ß½πτáÑ ÑÑ
  917. áóáα¿⌐¡«ú« ºáóÑαΦÑ¡¿∩ ¿½¿ »ÑαѺáúαπº¬¿.
  918.     ä¿⌐¬ßΓα«⌐ íδ½ «»πí½¿¬«óá¡ á½ú«α¿Γ¼ äѬ¬Ñαá, «»¿ßδóáεΘ¿⌐ αÑ὿ºáµ¿ε ßѼá-
  919. Σ«α«ó  ¬á¬  µÑ½«τ¿ß½Ñ¡¡δσ  «íΩÑ¬Γ«ó, ñ½∩ ¬«Γ«αδσ «»αÑñѽѡδ ñóÑ φ½Ñ¼Ñ¡Γáα¡δÑ
  920. «»Ñαᵿ¿: P ¿ V (ß¼. [Dijkstra 68]). Ä»Ñαᵿ∩  P  ºá¬½ετáÑΓß∩  ó  π¼Ñ¡∞ΦÑ¡¿¿
  921. º¡áτÑ¡¿∩ ßѼáΣ«αá ó Γ«¼ ß½πτáÑ, Ñß½¿ «¡« í«½∞ΦÑ 0, «»Ñαᵿ∩ V - ó πóѽ¿τÑ¡¿¿
  922. φΓ«ú« º¡áτÑ¡¿∩ (¿ Γá¼, ¿ Γá¼ ¡á Ññ¿¡¿µπ). Å«ß¬«½∞¬π «»Ñαᵿ¿ φ½Ñ¼Ñ¡Γáα¡δÑ, ó
  923. ½εí«⌐  ¼«¼Ñ¡Γ óαѼѡ¿ ñ½∩ ¬áªñ«ú« ßѼáΣ«αá óδ»«½¡∩ÑΓß∩ ¡Ñ í«½ÑÑ «ñ¡«⌐ «»Ñαá-
  924. µ¿¿ P ¿½¿ V. æó∩ºá¡¡δÑ ß ßѼáΣ«αἿ ß¿ßΓѼ¡δÑ  Σπ¡¬µ¿¿  ∩ó½∩εΓß∩  «í«íΘÑ¡¿Ñ¼
  925. «»Ñαᵿ⌐, »αÑñ½«ªÑ¡¡δσ ä¿⌐¬ßΓα«⌐, ó ¡¿σ ñ«»π߬áÑΓß∩ «ñ¡«óαѼѡ¡«Ñ óδ»«½¡Ñ¡¿Ñ
  926. ¡Ñ߬«½∞¬¿σ «»Ñαᵿ⌐, »α¿τѼ «»Ñαᵿ¿ π¼Ñ¡∞ΦÑ¡¿∩ ¿ πóѽ¿τÑ¡¿∩ óδ»«½¡∩εΓß∩ ¡áñ
  927. º¡áτÑ¡¿∩¼¿,  »αÑóδΦáεΘ¿¼¿  1. ƒñα« óδ»«½¡∩ÑΓ «»Ñαᵿ¿ ¬«¼»½Ñ¬ß¡«; ¡¿ «ñ¿¡ ¿º
  928. »«ßΓ«α«¡¡¿σ »α«µÑßß«ó ¡Ñ ß¼«ªÑΓ »ÑαÑπßΓá¡áó½¿óáΓ∞ º¡áτÑ¡¿∩  ßѼáΣ«α«ó,  »«¬á
  929.  
  930.  
  931.                                     344
  932.  
  933. óßÑ  «»Ñαᵿ¿  ¡Ñ íπñπΓ óδ»«½¡Ñ¡δ. àß½¿ ∩ñα« »« ¬á¬¿¼-½¿í« »α¿τ¿¡á¼ ¡Ñ ¼«ªÑΓ
  934. óδ»«½¡¿Γ∞ óßÑ «»Ñαᵿ¿, «¡« ¡Ñ óδ»«½¡∩ÑΓ ¡¿ «ñ¡«⌐; »α«µÑßß  »α¿«ßΓá¡áó½¿óáÑΓ
  935. ßó«ε αáí«Γπ ñ« ΓÑσ »«α, »«¬á φΓá ó«º¼«ª¡«ßΓ∞ ¡Ñ íπñÑΓ »αÑñ«ßΓáó½Ñ¡á.
  936.     æÑ¼áΣ«α ó óÑαß¿¿ V ß¿ßΓѼδ UNIX ß«ßΓ«¿Γ ¿º ß½ÑñπεΘ¿σ φ½Ñ¼Ñ¡Γ«ó:
  937.   * ç¡áτÑ¡¿Ñ ßѼáΣ«αá,
  938.   * êñÑ¡Γ¿Σ¿¬áΓ«α »«ß½Ññ¡Ñú« ¿º »α«µÑßß«ó, αáí«ΓáóΦ¿σ ß ßѼáΣ«α«¼,
  939.   * è«½¿τÑßΓó« »α«µÑßß«ó, «ª¿ñáεΘ¿σ πóѽ¿τÑ¡¿∩ º¡áτÑ¡¿∩ ßѼáΣ«αá,
  940.   *  è«½¿τÑßΓó« »α«µÑßß«ó, «ª¿ñáεΘ¿σ ¼«¼Ñ¡Γá, ¬«úñá º¡áτÑ¡¿Ñ ßѼáΣ«αá ßΓá¡ÑΓ
  941.     αáó¡δ¼ 0.
  942.     ä½∩ ß«ºñá¡¿∩ ¡áí«αá ßѼáΣ«α«ó ¿ »«½πτÑ¡¿∩  ñ«ßΓπ»á  ¬  ¡¿¼  ¿ß»«½∞ºπÑΓß∩
  943. ß¿ßΓѼ¡á∩  Σπ¡¬µ¿∩ semget, ñ½∩ óδ»«½¡Ñ¡¿∩ αẽ¿τ¡δσ π»αáó½∩εΘ¿σ «»Ñαᵿ⌐ ¡áñ
  944. ¡áí«α«¼ - Σπ¡¬µ¿∩ semctl, ñ½∩  αáí«Γδ  ß«  º¡áτÑ¡¿∩¼¿  ßѼáΣ«α«ó  -  Σπ¡¬µ¿∩
  945. semop.
  946.  
  947.     ┌────────────────────────────────────────────────────────────┐
  948.     │ #include <sys/types.h>                                     │
  949.     │ #include <sys/ipc.h>                                       │
  950.     │ #include <sys/shm.h>                                       │
  951.     │ #define SHMKEY    75                                       │
  952.     │ #define    K    1024                                       │
  953.     │ int shmid;                                                 │
  954.     │                                                            │
  955.     │ main()                                                     │
  956.     │ {                                                          │
  957.     │     int i, *pint;                                          │
  958.     │     char *addr1, *addr2;                                   │
  959.     │     extern char *shmat();                                  │
  960.     │     extern cleanup();                                      │
  961.     │                                                            │
  962.     │     for (i = 0; i < 20; i++)                               │
  963.     │          signal(i,cleanup);                                │
  964.     │     shmid = shmget(SHMKEY,128*K,0777│IPC_CREAT);           │
  965.     │     addr1 = shmat(shmid,0,0);                              │
  966.     │     addr2 = shmat(shmid,0,0);                              │
  967.     │     printf("addr1 Ox%x addr2 Ox%x\n",addr1,addr2);         │
  968.     │     pint = (int *) addr1;                                  │
  969.     │                                                            │
  970.     │     for (i = 0; i < 256, i++)                              │
  971.     │          *pint++ = i;                                      │
  972.     │     pint = (int *) addr1;                                  │
  973.     │     *pint = 256;                                           │
  974.     │                                                            │
  975.     │     pint = (int *) addr2;                                  │
  976.     │     for (i = 0; i < 256, i++)                              │
  977.     │          printf("index %d\tvalue %d\n",i,*pint++);         │
  978.     │                                                            │
  979.     │     pause();                                               │
  980.     │ }                                                          │
  981.     │                                                            │
  982.     │ cleanup()                                                  │
  983.     │ {                                                          │
  984.     │     shmctl(shmid,IPC_RMID,0);                              │
  985.     │     exit();                                                │
  986.     │ }                                                          │
  987.     └────────────────────────────────────────────────────────────┘
  988.  
  989.     É¿ßπ¡«¬ 11.11. Åα¿ß«Ññ¿¡Ñ¡¿Ñ »α«µÑßß«¼ «ñ¡«⌐ ¿ Γ«⌐ ªÑ «í½áßΓ¿
  990.                    αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ñóáªñδ
  991.  
  992.  
  993.                                     345
  994.  
  995.       ┌─────────────────────────────────────────────────────┐
  996.       │ #include <sys/types.h>                              │
  997.       │ #include <sys/ipc.h>                                │
  998.       │ #include <sys/shm.h>                                │
  999.       │                                                     │
  1000.       │ #define SHMKEY    75                                │
  1001.       │ #define    K    1024                                │
  1002.       │ int shmid;                                          │
  1003.       │                                                     │
  1004.       │ main()                                              │
  1005.       │ {                                                   │
  1006.       │     int i, *pint;                                   │
  1007.       │     char *addr;                                     │
  1008.       │     extern char *shmat();                           │
  1009.       │                                                     │
  1010.       │     shmid = shmget(SHMKEY,64*K,0777);               │
  1011.       │                                                     │
  1012.       │     addr = shmat(shmid,0,0);                        │
  1013.       │     pint = (int *) addr;                            │
  1014.       │                                                     │
  1015.       │     while (*pint == 0)                              │
  1016.       │          ;                                          │
  1017.       │     for (i = 0; i < 256, i++)                       │
  1018.       │          printf("%d\n",*pint++);                    │
  1019.       │ }                                                   │
  1020.       └─────────────────────────────────────────────────────┘
  1021.  
  1022.          É¿ßπ¡«¬ 11.12. Éáºñѽѡ¿Ñ »á¼∩Γ¿ ¼Ñªñπ »α«µÑßßἿ
  1023.  
  1024.  
  1025.  
  1026.        Æáí½¿µá ßѼáΣ«α«ó         îáßß¿óδ ßѼáΣ«α«ó
  1027.            ┌───────┐
  1028.            │       │        ┌───┬───┬───┬───┬───┬───┬───┐
  1029.            │       ├───────>│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │
  1030.            │       │        └───┴───┴───┴───┴───┴───┴───┘
  1031.            ├───────┤
  1032.            │       │        ┌───┬───┬───┐
  1033.            │       ├───────>│ 0 │ 1 │ 2 │
  1034.            │       │        └───┴───┴───┘
  1035.            ├───────┤
  1036.            │       │        ┌───┐
  1037.            │       ├───────>│ 0 │
  1038.            │       │        └───┘
  1039.            ├───────┤
  1040.            │       │        ┌───┬───┬───┐
  1041.            │       ├───────>│ 0 │ 1 │ 2 │
  1042.            │       │        └───┴───┴───┘
  1043.            ├───────┤
  1044.            │   ∙   │
  1045.            │   ∙   │
  1046.            │   ∙   │
  1047.            │   ∙   │
  1048.            │   ∙   │
  1049.            └───────┘
  1050.  
  1051.  
  1052.     É¿ßπ¡«¬ 11.13. æΓαπ¬Γπαδ ñá¡¡δσ, ¿ß»«½∞ºπѼδÑ ó αáí«ΓÑ ¡áñ ßѼáΣ«αἿ
  1053.  
  1054.  
  1055.                                     346
  1056.  
  1057.     æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ semget:
  1058.  
  1059.     id = semget(key,count,flag);
  1060.  
  1061. úñÑ key, flag ¿ id ¿¼ÑεàëàªÑ ß¼δß½, τΓ« ¿ ó ñαπú¿σ ¼Ñσá¡¿º¼áσ óºá¿¼«ñÑ⌐ß-
  1062. Γó¿∩  »α«µÑßß«ó («í¼Ñ¡ ß««íΘÑ¡¿∩¼¿ ¿ αáºñѽѡ¿Ñ »á¼∩Γ¿). é αѺπ½∞ΓáΓÑ óδ»«½-
  1063. ¡Ñ¡¿∩ Σπ¡¬µ¿¿ ∩ñα« óδñѽ∩ÑΓ ºá»¿ß∞, π¬áºδóáεΘπε ¡á ¼áßß¿ó ßѼáΣ«α«ó ¿ ß«ñÑα-
  1064. ªáΘπε ßτÑΓτ¿¬ count (É¿ßπ¡«¬ 11.13). é ºá»¿ß¿ ΓᬪѠσαá¡¿Γß∩ ¬«½¿τÑßΓó«  ßÑ-
  1065. ¼áΣ«α«ó  ó ¼áßß¿óÑ, óαѼ∩ »«ß½Ññ¡Ñú« óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿⌐ semop ¿ semctl. æ¿ß-
  1066. ΓѼ¡á∩ Σπ¡¬µ¿∩ semget ¡á É¿ßπ¡¬Ñ 11.14, ¡á»α¿¼Ñα, ß«ºñáÑΓ  ßѼáΣ«α  ¿º  ñóπσ
  1067. φ½Ñ¼Ñ¡Γ«ó.
  1068.     æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ semop:
  1069.  
  1070.     oldval = semop(id,oplist,count);
  1071.  
  1072. úñÑ  id  -  ñÑß¬α¿»Γ«α,  ó«ºóαáΘáѼδ⌐ Σπ¡¬µ¿Ñ⌐ semget, oplist - π¬áºáΓѽ∞ ¡á
  1073. ß»¿ß«¬ «»Ñαᵿ⌐, count  -  αẼÑα  ß»¿ß¬á.  é«ºóαáΘáѼ«Ñ  Σπ¡¬µ¿Ñ⌐  º¡áτÑ¡¿Ñ
  1074. oldval ∩ó½∩ÑΓß∩ »αѪ¡¿¼ º¡áτÑ¡¿Ñ¼ ßѼáΣ«αá, ¡áñ
  1075.  
  1076.     ┌────────────────────────────────────────────────────────────┐
  1077.     │ #include <sys/types.h>                                     │
  1078.     │ #include <sys/ipc.h>                                       │
  1079.     │ #include <sys/sem.h>                                       │
  1080.     │                                                            │
  1081.     │ #define SEMKEY    75                                       │
  1082.     │ int semid;                                                 │
  1083.     │ unsigned int count;                                        │
  1084.     │ /* «»αÑñѽѡ¿Ñ ßΓαπ¬Γπαδ sembuf ó Σá⌐½Ñ sys/sem.h          │
  1085.     │  * struct sembuf {                                         │
  1086.     │  *     unsigned shortsem_num;                              │
  1087.     │  *     short sem_op;                                       │
  1088.     │  *     short sem_flg;                                      │
  1089.     │ }; */                                                      │
  1090.     │ struct sembuf psembuf,vsembuf;    /* «»Ñαᵿ¿ Γ¿»á P ¿ V */│
  1091.     │                                                            │
  1092.     │ main(argc,argv)                                            │
  1093.     │      int argc;                                             │
  1094.     │      char *argv[];                                         │
  1095.     │ {                                                          │
  1096.     │      int i,first,second;                                   │
  1097.     │      short initarray[2],outarray[2];                       │
  1098.     │      extern cleanup();                                     │
  1099.     │                                                            │
  1100.     │      if (argc == 1)                                        │
  1101.     │      {                                                     │
  1102.     │          for (i = 0; i < 20; i++)                          │
  1103.     │              signal(i,cleanup);                            │
  1104.     │          semid = semget(SEMKEY,2,0777│IPC_CREAT);          │
  1105.     │          initarray[0] = initarray[1] = 1;                  │
  1106.     │          semctl(semid,2,SETALL,initarray);                 │
  1107.     │          semctl(semid,2,GETALL,outarray);                  │
  1108.     │          printf("¡áτá½∞¡δÑ º¡áτÑ¡¿∩ ßѼáΣ«α«ó %d %d\n",    │
  1109.     │                 outarray[0],outarray[1]);                  │
  1110.     │          pause();    /* »α¿«ßΓá¡«ó ñ« »«½πτÑ¡¿∩ ß¿ú¡á½á */ │
  1111.     │      }                                                     │
  1112.     │                                                            │
  1113.     │      /* »α«ñ«½ªÑ¡¿Ñ ¡á ß½ÑñπεΘÑ⌐ ßΓαá¡¿µÑ */               │
  1114.     └────────────────────────────────────────────────────────────┘
  1115.  
  1116.        É¿ßπ¡«¬ 11.14. Ä»Ñαᵿ¿ πßΓᡫ󬿠¿ ß¡∩Γ¿∩ í½«¬¿α«ó¬¿
  1117.  
  1118.  
  1119.                                     347
  1120.  
  1121. ¬«Γ«αδ¼ »α«¿ºó«ñ¿½áß∞ «»Ñαᵿ∩. èáªñδ⌐ φ½Ñ¼Ñ¡Γ ß»¿ß¬á «»Ñαᵿ⌐ ¿¼ÑÑΓ ß½Ññπε-
  1122. Θ¿⌐ Σ«α¼áΓ:
  1123.   *  ¡«¼Ñα ßѼáΣ«αá, ¿ñÑ¡Γ¿Σ¿µ¿απεΘ¿⌐ φ½Ñ¼Ñ¡Γ ¼áßß¿óá ßѼáΣ«α«ó, ¡áñ ¬«Γ«αδ¼
  1124.     óδ»«½¡∩ÑΓß∩ «»Ñαᵿ∩,
  1125.   * ¬«ñ «»Ñαᵿ¿,
  1126.   * Σ½áú¿.
  1127.  
  1128.     ┌────────────────────────────────────────────────────────────┐
  1129.     │      else if (argv[1][0] == 'a')                           │
  1130.     │      {                                                     │
  1131.     │          first = 0;                                        │
  1132.     │          second = 1;                                       │
  1133.     │      }                                                     │
  1134.     │      else                                                  │
  1135.     │      {                                                     │
  1136.     │          first = 1;                                        │
  1137.     │          second = 0;                                       │
  1138.     │      }                                                     │
  1139.     │                                                            │
  1140.     │      semid = semget(SEMKEY,2,0777);                        │
  1141.     │      psembuf.sem_op = -1;                                  │
  1142.     │      psembuf.sem_flg = SEM_UNDO;                           │
  1143.     │      vsembuf.sem_op = 1;                                   │
  1144.     │      vsembuf.sem_flg = SEM_UNDO;                           │
  1145.     │                                                            │
  1146.     │      for (count = 0; ; count++)                            │
  1147.     │      {                                                     │
  1148.     │          psembuf.sem_num = first;                          │
  1149.     │          semop(semid,&psembuf,1);                          │
  1150.     │          psembuf.sem_num = second;                         │
  1151.     │          semop(semid,&psembuf,1);                          │
  1152.     │          printf("»α«µÑßß %d ßτÑΓτ¿¬ %d\n",getpid(),count); │
  1153.     │          vsembuf.sem_num = second;                         │
  1154.     │          semop(semid,&vsembuf,1);                          │
  1155.     │          vsembuf.sem_num = first;                          │
  1156.     │          semop(semid,&vsembuf,1);                          │
  1157.     │      }                                                     │
  1158.     │ }                                                          │
  1159.     │                                                            │
  1160.     │ cleanup()                                                  │
  1161.     │ {                                                          │
  1162.     │          semctl(semid,2,IPC_RMID,0);                       │
  1163.     │          exit();                                           │
  1164.     │ }                                                          │
  1165.     └────────────────────────────────────────────────────────────┘
  1166.  
  1167.        É¿ßπ¡«¬ 11.14. Ä»Ñαᵿ¿ πßΓᡫ󬿠¿ ß¡∩Γ¿∩ í½«¬¿α«ó¬¿ (»α«ñ«½ªÑ¡¿Ñ)
  1168.  
  1169.  
  1170.     ƒñα« ßτ¿ΓδóáÑΓ ß»¿ß«¬ «»Ñαᵿ⌐ oplist ¿º áñαÑß¡«ú« »α«ßΓαá¡ßΓóá ºáñáτ¿ ¿
  1171. »α«óÑα∩ÑΓ ¬«ααÑ¬Γ¡«ßΓ∞ ¡«¼Ñα«ó ßѼáΣ«α«ó, á ΓᬪѠ¡á½¿τ¿Ñ π »α«µÑßßá ¡Ñ«íσ«-
  1172. ñ¿¼δσ αáºαÑΦÑ¡¿⌐ ¡á τΓÑ¡¿Ñ ¿ ¬«ααÑ¬Γ¿α«ó¬π ßѼáΣ«α«ó (É¿ßπ¡«¬  11.15).  àß½¿
  1173. Γᬿσ  αáºαÑΦÑ¡¿⌐  ¡Ñ  ¿¼ÑÑΓß∩, ß¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ ºáóÑαΦáÑΓß∩ ¡Ñπñáτ¡«. àß½¿
  1174. ∩ñαπ »α¿σ«ñ¿Γß∩ »α¿«ßΓá¡áó½¿óáΓ∞ ßó«ε αáí«Γπ »α¿ «íαáΘÑ¡¿¿ ¬  ß»¿ß¬π  «»Ñαá-
  1175. µ¿⌐,  «¡«  ó«ºóαáΘáÑΓ  ßѼáΣ«αá¼ ¿σ »αѪ¡¿Ñ º¡áτÑ¡¿∩ ¿ ¡áσ«ñ¿Γß∩ ó ß«ßΓ«∩¡¿¿
  1176. »α¿«ßΓá¡«óá ñ« ¡áßΓπ»½Ñ¡¿∩ «ª¿ñáѼ«ú« ß«íδΓ¿∩, »«ß½Ñ τÑú« ß¿ßΓѼ-
  1177. ¡á∩ Σπ¡¬µ¿∩ ºá»π߬áÑΓß∩ ó¡«ó∞. Å«ß¬«½∞¬π ∩ñα« σαá¡¿Γ ¬«ñδ «»Ñαᵿ⌐ ¡áñ ßѼá-
  1178. Σ«αἿ ó ú½«íá½∞¡«¼ ß»¿ß¬Ñ, «¡« ó¡«ó∞ ßτ¿ΓδóáÑΓ φΓ«Γ ß»¿ß«¬ ¿º  »α«ßΓαá¡ßΓóá
  1179.  
  1180.  
  1181.                                     348
  1182.  
  1183.     ┌────────────────────────────────────────────────────────────┐
  1184.     │ á½ú«α¿Γ¼ semop           /* «»Ñαᵿ¿ ¡áñ ßѼáΣ«α«¼ */      │
  1185.     │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩:  (1) ñÑß¬α¿»Γ«α ßѼáΣ«αá               │
  1186.     │                      (2) ß»¿ß«¬ «»Ñαᵿ⌐ ¡áñ ßѼáΣ«α«¼     │
  1187.     │                      (3) ¬«½¿τÑßΓó« φ½Ñ¼Ñ¡Γ«ó ó ß»¿ß¬Ñ     │
  1188.     │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ¿ßσ«ñ¡«Ñ º¡áτÑ¡¿Ñ ßѼáΣ«αá            │
  1189.     │ {                                                          │
  1190.     │     »α«óÑα¿Γ∞ ¬«ααÑ¬Γ¡«ßΓ∞ ñÑß¬α¿»Γ«αá ßѼáΣ«αá;           │
  1191.     │ start: ßτ¿ΓáΓ∞ ß»¿ß«¬ «»Ñαᵿ⌐ ¡áñ ßѼáΣ«α«¼ ¿º »α«ßΓαá¡-  │
  1192.     │         ßΓóá ºáñáτ¿ ó »α«ßΓαá¡ßΓó« ∩ñαá;                   │
  1193.     │     »α«óÑα¿Γ∞ ¡á½¿τ¿Ñ αáºαÑΦÑ¡¿⌐ ¡á óδ»«½¡Ñ¡¿Ñ óßÑσ «»Ñαá- │
  1194.     │      µ¿⌐;                                                  │
  1195.     │                                                            │
  1196.     │     ñ½∩ (¬áªñ«⌐ «»Ñαᵿ¿ ó ß»¿ß¬Ñ)                         │
  1197.     │     {                                                      │
  1198.     │         Ñß½¿ (¬«ñ «»Ñαᵿ¿ ¿¼ÑÑΓ »«½«ª¿Γѽ∞¡«Ñ º¡áτÑ¡¿Ñ)   │
  1199.     │         {                                                  │
  1200.     │             »α¿íáó¿Γ∞ ¬«ñ «»Ñαᵿ¿ ¬ º¡áτÑ¡¿ε ßѼáΣ«αá;    │
  1201.     │             Ñß½¿ (ñ½∩ ñá¡¡«⌐ «»Ñαᵿ¿ πßΓá¡«ó½Ñ¡ Σ½áú UNDO)│
  1202.     │                  ß¬«ααÑ¬Γ¿α«óáΓ∞ ßΓαπ¬Γπαπ ó«ßßΓá¡«ó½Ñ¡¿∩  │
  1203.     │                   ñ½∩ ñá¡¡«ú« »α«µÑßßá;                    │
  1204.     │             óδóÑßΓ¿ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ »α«µÑßßδ, │
  1205.     │              «ª¿ñáεΘ¿Ñ πóѽ¿τÑ¡¿∩ º¡áτÑ¡¿∩ ßѼáΣ«αá;       │
  1206.     │         }                                                  │
  1207.     │         ó »α«Γ¿ó¡«¼ ß½πτáÑ Ñß½¿ (¬«ñ «»Ñαᵿ¿ ¿¼ÑÑΓ «Γα¿µá-│
  1208.     │          Γѽ∞¡«Ñ º¡áτÑ¡¿Ñ)                                 │
  1209.     │         {                                                  │
  1210.     │             Ñß½¿ (¬«ñ «»Ñαᵿ¿ + º¡áτÑ¡¿Ñ ßѼáΣ«αá >= 0)   │
  1211.     │             {                                              │
  1212.     │                  »α¿íáó¿Γ∞ ¬«ñ «»Ñαᵿ¿ ¬ º¡áτÑ¡¿ε ßѼáΣ«- │
  1213.     │                   αá;                                      │
  1214.     │                  Ñß½¿ (Σ½áú UNDO πßΓá¡«ó½Ñ¡)               │
  1215.     │                       ß¬«ααÑ¬Γ¿α«óáΓ∞ ßΓαπ¬Γπαπ ó«ßßΓá¡«ó- │
  1216.     │                        ½Ñ¡¿∩ ñ½∩ ñá¡¡«ú« »α«µÑßßá;         │
  1217.     │                  Ñß½¿ (º¡áτÑ¡¿Ñ ßѼáΣ«αá αáó¡« 0)          │
  1218.     │                       /* »α«ñ«½ªÑ¡¿Ñ ¡á ß½ÑñπεΘÑ⌐ ßΓαá¡¿-  │
  1219.     │                        * µÑ */                             │
  1220.     └────────────────────────────────────────────────────────────┘
  1221.  
  1222.       É¿ßπ¡«¬ 11.15. Ç½ú«α¿Γ¼ óδ»«½¡Ñ¡¿∩ «»Ñαᵿ⌐ ¡áñ ßѼáΣ«α«¼
  1223.  
  1224.  
  1225. ºáñáτ¿,  ¬«úñá  »ÑαѺá»π߬áÑΓ ß¿ßΓѼ¡πε Σπ¡¬µ¿ε. Æá¬¿¼ «íαẫ¼, «»Ñαᵿ¿ óδ-
  1226. »«½¡∩εΓß∩ ¬«¼»½Ñ¬ß¡« - ¿½¿ óßÑ ºá «ñ¿¡ ßÑá¡ß ¿½¿ ¡¿ «ñ¡«⌐.
  1227.     ƒñα« ¼Ñ¡∩ÑΓ º¡áτÑ¡¿Ñ ßѼáΣ«αá ó ºáó¿ß¿¼«ßΓ¿ «Γ ¬«ñá «»Ñαᵿ¿.  àß½¿  ¬«ñ
  1228. «»Ñαᵿ¿  ¿¼ÑÑΓ »«½«ª¿Γѽ∞¡«Ñ º¡áτÑ¡¿Ñ, ∩ñα« πóѽ¿τ¿óáÑΓ º¡áτÑ¡¿Ñ ßѼáΣ«αá ¿
  1229. óδó«ñ¿Γ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ »α«µÑßßδ, «ª¿ñáεΘ¿Ñ  ¡áßΓπ»½Ñ¡¿∩  φΓ«ú«
  1230. ß«íδΓ¿∩.  àß½¿  ¬«ñ «»Ñαᵿ¿ αáóÑ¡ 0, ∩ñα« »α«óÑα∩ÑΓ º¡áτÑ¡¿Ñ ßѼáΣ«αá: Ñß½¿
  1231. «¡« αáó¡« 0, ∩ñα« »ÑαÑσ«ñ¿Γ ¬ óδ»«½¡Ñ¡¿ε ñαπú¿σ «»Ñαᵿ⌐; ó »α«Γ¿ó¡«¼ ß½πτáÑ
  1232. ∩ñα« πóѽ¿τ¿óáÑΓ τ¿ß½« »α¿«ßΓá¡«ó½Ñ¡¡δσ »α«µÑßß«ó, «ª¿ñáεΘ¿σ, ¬«úñá º¡áτÑ¡¿Ñ
  1233. ßѼáΣ«αá ßΓá¡ÑΓ ¡π½Ñóδ¼, ¿ "ºáßδ»áÑΓ". àß½¿ ¬«ñ «»Ñαᵿ¿ ¿¼ÑÑΓ «Γα¿µáΓѽ∞¡«Ñ
  1234. º¡áτÑ¡¿Ñ ¿ Ñß½¿ Ñú« áíß«½εΓ¡«Ñ º¡áτÑ¡¿Ñ ¡Ñ »αÑóδΦáÑΓ º¡áτÑ¡¿Ñ ßѼáΣ«αá, ∩ñα«
  1235. »α¿íáó½∩ÑΓ ¬«ñ «»Ñαᵿ¿ («Γα¿µáΓѽ∞¡«Ñ τ¿ß½«) ¬ º¡áτÑ¡¿ε ßѼáΣ«αá. àß½¿  αÑ-
  1236. ºπ½∞ΓáΓ αáóÑ¡ 0, ∩ñα« óδó«ñ¿Γ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ »α«µÑßßδ, «ª¿ñáε-
  1237. Θ¿Ñ «í¡π½Ñ¡¿∩ º¡áτÑ¡¿∩ ßѼáΣ«αá. àß½¿ αѺπ½∞ΓáΓ ¼Ñ¡∞ΦÑ áíß«½εΓ¡«ú«
  1238. º¡áτÑ¡¿∩ ¬«ñá «»Ñαᵿ¿, ∩ñα« »α¿«ßΓá¡áó½¿óáÑΓ »α«µÑßß ñ« ΓÑσ »«α, »«¬á  º¡á-
  1239. τÑ¡¿Ñ ßѼáΣ«αá ¡Ñ πóѽ¿τ¿Γß∩. àß½¿ »α«µÑßß »α¿«ßΓá¡áó½¿óáÑΓß∩ »«ßαÑñ¿ «»Ñαá-
  1240. µ¿¿, «¡ ¿¼ÑÑΓ »α¿«α¿ΓÑΓ, ñ«»π߬áεΘ¿⌐ »αÑαδóá¡¿∩; ß½Ññ«óáΓѽ∞¡«, »«½πτ¿ó ß¿ú-
  1241. ¡á½, «¡ óδσ«ñ¿Γ ¿º φΓ«ú« ß«ßΓ«∩¡¿∩.
  1242.  
  1243.                                     349
  1244.  
  1245.     ┌────────────────────────────────────────────────────────────┐
  1246.     │                       óδóÑßΓ¿ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ │
  1247.     │                        »α«µÑßßδ, «ª¿ñáεΘ¿Ñ «í¡π½Ñ¡¿∩ º¡áτÑ-│
  1248.     │                        ¡¿∩ ßѼáΣ«αá;                       │
  1249.     │                  »α«ñ«½ª¿Γ∞;                               │
  1250.     │             }                                              │
  1251.     │             óδ»«½¡¿Γ∞ óßÑ »α«¿ºóÑñÑ¡¡δÑ ¡áñ ßѼáΣ«α«¼ ó    │
  1252.     │              ñá¡¡«¼ ßÑá¡ßÑ «»Ñαᵿ¿ ó «íαáΓ¡«⌐ »«ß½Ññ«óá-  │
  1253.     │              Γѽ∞¡«ßΓ¿ (ó«ßßΓá¡«ó¿Γ∞ ßΓáα«Ñ º¡áτÑ¡¿Ñ ßѼá- │
  1254.     │              Σ«αá);                                        │
  1255.     │             Ñß½¿ (Σ½áú¿ ¡Ñ óѽ∩Γ »α¿«ßΓá¡áó½¿óáΓ∞ß∩)       │
  1256.     │                  óÑα¡πΓ∞ß∩ ß «Φ¿í¬«⌐;                      │
  1257.     │             »α¿«ßΓá¡«ó¿Γ∞ß∩ (ñ« ΓÑσ »«α, »«¬á º¡áτÑ¡¿Ñ ßÑ- │
  1258.     │              ¼áΣ«αá ¡Ñ πóѽ¿τ¿Γß∩);                        │
  1259.     │             »ÑαÑ⌐Γ¿ ¡á start;  /* »«óΓ«α¿Γ∞ µ¿¬½ ß ßἫú«  │
  1260.     │                                 * ¡áτá½á * /               │
  1261.     │         }                                                  │
  1262.     │         ó »α«Γ¿ó¡«¼ ß½πτáÑ    /* ¬«ñ «»Ñαᵿ¿ αáóÑ¡ ¡π½ε */│
  1263.     │         {                                                  │
  1264.     │             Ñß½¿ (º¡áτÑ¡¿Ñ ßѼáΣ«αá «Γ½¿τ¡« «Γ ¡π½∩)       │
  1265.     │             {                                              │
  1266.     │                  óδ»«½¡¿Γ∞ óßÑ »α«¿ºóÑñÑ¡¡δÑ ¡áñ ßѼáΣ«α«¼ │
  1267.     │                   ó ñá¡¡«¼ ßÑá¡ßÑ «»Ñαᵿ¿ ó «íαáΓ¡«⌐ »«-  │
  1268.     │                   ß½Ññ«óáΓѽ∞¡«ßΓ¿ (ó«ßßΓá¡«ó¿Γ∞ ßΓáα«Ñ    │
  1269.     │                   º¡áτÑ¡¿Ñ ßѼáΣ«αá);                      │
  1270.     │                  Ñß½¿ (Σ½áú¿ ¡Ñ óѽ∩Γ »α¿«ßΓá¡áó½¿óáΓ∞ß∩)  │
  1271.     │                       óÑα¡πΓ∞ß∩ ß «Φ¿í¬«⌐;                 │
  1272.     │                  »α¿«ßΓá¡«ó¿Γ∞ß∩ (ñ« ΓÑσ »«α, »«¬á º¡áτÑ¡¿Ñ│
  1273.     │                   ßѼáΣ«αá ¡Ñ ßΓá¡ÑΓ ¡π½Ñóδ¼);             │
  1274.     │                  »ÑαÑ⌐Γ¿ ¡á start;  /* »«óΓ«α¿Γ∞ µ¿¬½ */   │
  1275.     │             }                                              │
  1276.     │         }                                                  │
  1277.     │     } /* ¬«¡Ñµ µ¿¬½á */                                    │
  1278.     │     /* óßÑ «»Ñαᵿ¿ ¡áñ ßѼáΣ«α«¼ óδ»«½¡Ñ¡δ */             │
  1279.     │     ß¬«ααÑ¬Γ¿α«óáΓ∞ º¡áτÑ¡¿∩ »«½Ñ⌐, ó ¬«Γ«αδσ σαá¡¿Γß∩ óαÑ-│
  1280.     │      ¼∩ »«ß½Ññ¡Ñú« óδ»«½¡Ñ¡¿∩ «»Ñαᵿ⌐ ¿ ¿ñÑ¡Γ¿Σ¿¬áΓ«αδ    │
  1281.     │      »α«µÑßß«ó;                                            │
  1282.     │     óÑα¡πΓ∞ ¿ßσ«ñ¡«Ñ º¡áτÑ¡¿Ñ ßѼáΣ«αá, ßπΘÑßΓó«óáóΦÑÑ ó   │
  1283.     │      ¼«¼Ñ¡Γ ó맮óá Σπ¡¬µ¿¿ semop;                          │
  1284.     │ }                                                          │
  1285.     └────────────────────────────────────────────────────────────┘
  1286.  
  1287.   É¿ßπ¡«¬ 11.15. Ç½ú«α¿Γ¼ óδ»«½¡Ñ¡¿∩ «»Ñαᵿ⌐ ¡áñ ßѼáΣ«α«¼ (»α«ñ«½ªÑ¡¿Ñ)
  1288.  
  1289.  
  1290.     ÅÑαÑ⌐ñѼ  ¬  »α«úαá¼¼Ñ,  »αÑñßΓáó½Ñ¡¡«⌐ ¡á É¿ßπ¡¬Ñ 11.14, ¿ »αÑñ»«½«ª¿¼,
  1291. τΓ« »«½∞º«óáΓѽ∞ ¿ß»«½¡∩ÑΓ ÑÑ (»«ñ ¿¼Ñ¡Ñ¼ a.out) Γα¿ αáºá ó ß½ÑñπεΘѼ »«α∩ñ-
  1292. „:
  1293.     a.out &
  1294.     a.out a &
  1295.     a.out b &
  1296.     àß½¿ »α«úαá¼¼á óδºδóáÑΓß∩ íѺ »áαá¼ÑΓα«ó, »α«µÑßß ß«ºñáÑΓ ¡áí«α  ßѼáΣ«-
  1297. α«ó ¿º ñóπσ φ½Ñ¼Ñ¡Γ«ó ¿ »α¿ßóá¿óáÑΓ ¬áªñ«¼π ßѼáΣ«απ º¡áτÑ¡¿Ñ, αáó¡«Ñ 1. çá-
  1298. ΓѼ »α«µÑßß óδºδóáÑΓ Σπ¡¬µ¿ε pause ¿ »α¿«ßΓá¡áó½¿óáÑΓß∩ ñ½∩ »«½πτÑ¡¿∩ ß¿ú¡á-
  1299. ½á, »«ß½Ñ τÑú« πñá½∩ÑΓ ßѼáΣ«α ¿º ß¿ßΓѼδ (cleanup). Åα¿ óδ»«½¡Ñ¡¿¿ »α«úαá¼-
  1300. ¼δ  ß  »áαá¼ÑΓα«¼  'a'  »α«µÑßß (A) »α«¿ºó«ñ¿Γ ¡áñ ßѼáΣ«αἿ ó µ¿¬½Ñ τÑΓδαÑ
  1301. «»Ñαᵿ¿: «¡ π¼Ñ¡∞ΦáÑΓ ¡á Ññ¿¡¿µπ º¡áτÑ¡¿Ñ ßѼáΣ«αá 0, Γ« ªÑ ßἫѠñѽáÑΓ  ß
  1302. ßѼáΣ«α«¼ 1, óδ»«½¡∩ÑΓ ¬«¼á¡ñπ óδó«ñá ¡á »ÑτáΓ∞ ¿ ó¡«ó∞ πóѽ¿τ¿óáÑΓ º¡áτÑ¡¿∩
  1303. ßѼáΣ«α«ó 0 ¿ 1. àß½¿ íδ »α«µÑßß »«»δΓá½ß∩ π¼Ñ¡∞Φ¿Γ∞ º¡áτÑ¡¿Ñ ßѼáΣ«αá, αáó-
  1304.  
  1305.                                     350
  1306.  
  1307. ¡«Ñ 0, Ñ¼π »α¿Φ½«ß∞ íδ »α¿«ßΓá¡«ó¿Γ∞ß∩, ß½Ññ«óáΓѽ∞¡«, ßѼáΣ«α ¼«ª¡« ßτ¿ΓáΓ∞
  1308. ºáσóáτÑ¡¡δ¼  (¡Ññ«ßΓπ»¡δ¼ ñ½∩ π¼Ñ¡∞ΦÑ¡¿∩). Å«ß¬«½∞¬π ¿ßσ«ñ¡δÑ º¡áτÑ¡¿∩ ßѼá-
  1309. Σ«α«ó í뫨 αáó¡δ 1 ¿ »«ß¬«½∞¬π ¬ ßѼáΣ«αá¼ ¡Ñ í佫 «íαáΘÑ¡¿⌐ ß« ßΓ«α«¡δ ñαπ-
  1310. ú¿σ »α«µÑßß«ó, »α«µÑßß A ¡¿¬«úñá ¡Ñ »α¿«ßΓá¡«ó¿Γß∩, á º¡áτÑ¡¿∩ ßѼáΣ«α«ó íπ-
  1311. ñπΓ ¿º¼Ñ¡∩Γ∞ß∩ Γ«½∞¬« ¼Ñªñπ 1 ¿ 0. Åα¿ óδ»«½¡Ñ¡¿¿ »α«úαá¼¼δ ß »áαá¼ÑΓα«¼ 'b'
  1312. »α«µÑßß (B) π¼Ñ¡∞ΦáÑΓ º¡áτÑ¡¿∩ ßѼáΣ«α«ó 0 ¿ 1 ó »«α∩ñ¬Ñ, «íαáΓ¡«¼ σ«ñπ  óδ-
  1313. »«½¡Ñ¡¿∩  »α«µÑßßá  A.  è«úñá  »α«µÑßßδ A ¿ B óδ»«½¡∩εΓß∩ »áαώѽ∞¡«, ¼«ªÑΓ
  1314. ß½«ª¿Γ∞ß∩ ß¿Γπᵿ∩, ó ¬«Γ«α«⌐ »α«µÑßß A ºáσóáΓ¿½ ßѼáΣ«α 0 ¿ σ«τÑΓ ºáσóáΓ¿Γ∞
  1315. ßѼáΣ«α 1, á »α«µÑßß B ºáσóáΓ¿½ ßѼáΣ«α 1 ¿ σ«τÑΓ ºáσóáΓ¿Γ∞ ßѼáΣ«α  0.  Äíá
  1316. »α«µÑßßá  »ÑαÑ⌐ñπΓ  ó  ß«ßΓ«∩¡¿Ñ »α¿«ßΓá¡«óá, ¡Ñ ¿¼Ñ∩ ó«º¼«ª¡«ßΓ¿ »α«ñ«½ª¿Γ∞
  1317. ßó«Ñ óδ»«½¡Ñ¡¿Ñ. é«º¡¿¬áÑΓ óºá¿¼¡á∩ í½«¬¿α«ó¬á, ¿º  ¬«Γ«α«⌐  »α«µÑßßδ  ¼«úπΓ
  1318. óδ⌐Γ¿ Γ«½∞¬« »« »«½πτÑ¡¿¿ ß¿ú¡á½á.
  1319.     ùΓ«íδ  »αÑñ«ΓóαáΓ¿Γ∞  ó«º¡¿¬¡«óÑ¡¿Ñ »«ñ«í¡δσ »α«í½Ñ¼, »α«µÑßßδ ¼«úπΓ óδ-
  1320. »«½¡∩Γ∞ «ñ¡«óαѼѡ¡« ¡Ñ߬«½∞¬« «»Ñαᵿ⌐ ¡áñ ßѼáΣ«αἿ. é »«ß½Ññ¡Ñ¼  »α¿¼ÑαÑ
  1321. ªÑ½áѼδ⌐ φΣΣÑ¬Γ ñ«ßΓ¿úáÑΓß∩ í½áú«ñáα∩ ¿ß»«½∞º«óá¡¿ε ß½ÑñπεΘ¿σ «»ÑαáΓ«α«ó:
  1322.  
  1323.     struct sembuf psembuf[2];
  1324.  
  1325.     psembuf[0].sem_num = 0;
  1326.     psembuf[1].sem_num = 1;
  1327.     psembuf[0].sem_op = -1;
  1328.     psembuf[1].sem_op = -1;
  1329.     semop(semid,psembuf,2);
  1330.  
  1331. Psembuf - φΓ« ß»¿ß«¬ «»Ñαᵿ⌐, óδ»«½¡∩εΘ¿σ «ñ¡«óαѼѡ¡«Ñ π¼Ñ¡∞ΦÑ¡¿Ñ º¡áτÑ¡¿⌐
  1332. ßѼáΣ«α«ó 0 ¿ 1. àß½¿ ¬á¬á∩-Γ« «»Ñαᵿ∩ ¡Ñ ¼«ªÑΓ óδ»«½¡∩Γ∞ß∩, »α«µÑßß »α¿«ß-
  1333. Γá¡áó½¿óáÑΓß∩.  Æá¬,  ¡á»α¿¼Ñα, Ñß½¿ º¡áτÑ¡¿Ñ ßѼáΣ«αá 0 αáó¡« 1, á º¡áτÑ¡¿Ñ
  1334. ßѼáΣ«αá 1 αáó¡« 0, ∩ñα« «ßΓáó¿Γ «íá º¡áτÑ¡¿∩ ¡Ñ¿º¼Ñ¡¡δ¼¿ ñ« ΓÑσ  »«α,  »«¬á
  1335. ¡Ñ ß¼«ªÑΓ π¼Ñ¡∞Φ¿Γ∞ ¿ Γ«, ¿ ñαπú«Ñ.
  1336.     ôßΓá¡«ó¬á  Σ½áúá  IPC_NOWAIT ó Σπ¡¬µ¿¿ semop ¿¼ÑÑΓ ß½ÑñπεΘ¿⌐ ß¼δß½: Ñß½¿
  1337. ∩ñα« »«»áñáÑΓ ó Γá¬πε ß¿Γπᵿε, ¬«úñá »α«µÑßß ñ«½ªÑ¡ »α¿«ßΓá¡«ó¿Γ∞ ßó«Ñ  óδ-
  1338. »«½¡Ñ¡¿Ñ  ó  «ª¿ñá¡¿¿ πóѽ¿τÑ¡¿∩ º¡áτÑ¡¿∩ ßѼáΣ«αá óδΦÑ «»αÑñѽѡ¡«ú« πα«ó¡∩
  1339. ¿½¿, ¡á«í«α«Γ, ß¡¿ªÑ¡¿∩ φΓ«ú« º¡áτÑ¡¿∩ ñ« 0, ¿ Ñß½¿ »α¿ φΓ«¼ Σ½áú IPC_NOWAIT
  1340. πßΓá¡«ó½Ñ¡, ∩ñα« óδσ«ñ¿Γ ¿º Σπ¡¬µ¿¿ ß ¿ºóÑΘÑ¡¿Ñ¼ «í «Φ¿í¬Ñ.  Æá¬¿¼  «íαẫ¼,
  1341. Ñß½¿ ¡Ñ »α¿«ßΓá¡áó½¿óáΓ∞ »α«µÑßß ó ß½πτáÑ ¡Ñ󫺼«ª¡«ßΓ¿ óδ»«½¡Ñ¡¿∩ «Γñѽ∞¡«⌐
  1342. «»Ñαᵿ¿, ¼«ª¡« αÑ὿º«óáΓ∞ πß½«ó¡δ⌐ Γ¿» ßѼáΣ«αá.
  1343.     àß½¿ »α«µÑßß óδ»«½¡∩ÑΓ «»Ñαáµ¿ε ¡áñ ßѼáΣ«α«¼, ºáσóáΓδóá∩ »α¿ φΓ«¼ ¡Ñ¬«-
  1344. Γ«αδÑ  αÑßπαßδ,  ¿  ºáóÑαΦáÑΓ ßó«ε αáí«Γπ íѺ »α¿óÑñÑ¡¿∩ ßѼáΣ«αá ó ¿ßσ«ñ¡«Ñ
  1345. ß«ßΓ«∩¡¿Ñ, ¼«úπΓ ó«º¡¿¬¡πΓ∞ «»áß¡δÑ ß¿Γπᵿ¿. Åα¿τ¿¡á¼¿ ó«º¡¿¬¡«óÑ¡¿∩  Γᬿσ
  1346. ß¿Γπᵿ⌐ ¼«úπΓ íδΓ∞ ¬á¬ «Φ¿í¬¿ »α«úαá¼¼¿α«óá¡¿∩, Γᬠ¿ ß¿ú¡á½δ, »α¿ó«ñ∩Θ¿Ñ ¬
  1347. ó¡Ñºá»¡«¼π  ºáóÑαΦÑ¡¿ε  óδ»«½¡Ñ¡¿∩  »α«µÑßßá.  àß½¿  »«ß½Ñ Γ«ú«, ¬á¬ »α«µÑßß
  1348. π¼Ñ¡∞Φ¿Γ º¡áτÑ¡¿∩ ßѼáΣ«α«ó, «¡ »«½πτ¿Γ ß¿ú¡á½  kill,  ó«ßßΓá¡«ó¿Γ∞  »αѪ¡¿Ñ
  1349. º¡áτÑ¡¿∩ »α«µÑßßπ πªÑ ¡Ñ πñáßΓß∩, »«ß¬«½∞¬π ß¿ú¡á½δ ñá¡¡«ú« Γ¿»á ¡Ñ á¡á½¿º¿-
  1350. απεΓß∩ »α«µÑßß«¼. æ½Ññ«óáΓѽ∞¡«, ñαπú¿Ñ »α«µÑßßδ, »δΓá∩ß∞ «íαáΓ¿Γ∞ß∩ ¬ ßѼá-
  1351. Σ«αá¼,  «í¡áαπªáΓ,  τΓ« »«ß½Ññ¡¿Ñ ºáí½«¬¿α«óá¡δ, σ«Γ∩ ßá¼ ºáí½«¬¿α«óáóΦ¿⌐ ¿σ
  1352. »α«µÑßß πªÑ »αѬαáΓ¿½ ßó«Ñ ßπΘÑßΓó«óá¡¿Ñ. ùΓ«íδ ¿ºíѪáΓ∞  ó«º¡¿¬¡«óÑ¡¿∩  »«-
  1353. ñ«í¡δσ  ß¿Γπᵿ⌐,  ó  Σπ¡¬µ¿¿  semop »α«µÑßß ¼«ªÑΓ πßΓá¡«ó¿Γ∞ Σ½áú SEM_UNDO;
  1354. ¬«úñá »α«µÑßß ºáóÑαΦ¿Γß∩, ∩ñα« ñáßΓ «íαáΓ¡δ⌐ σ«ñ óßѼ «»Ñαᵿ∩¼, óδ»«½¡Ñ¡¡δ¼
  1355. »α«µÑßß«¼. ä½∩ φΓ«ú« ó αáß»«α∩ªÑ¡¿¿ π ∩ñαá ¿¼ÑÑΓß∩ Γáí½¿µá, ó ¬«Γ«α«⌐ ¬áªñ«-
  1356. ¼π »α«µÑßßπ ó ß¿ßΓѼѠ«ΓóÑñѡᠫΓñѽ∞¡á∩  ºá»¿ß∞.  çỿß∞  Γáí½¿µδ  ß«ñÑনΓ
  1357. π¬áºáΓѽ∞ ¡á úαπ»»π ßΓαπ¬Γπα ó«ßßΓá¡«ó½Ñ-
  1358. ¡¿∩,  »«  «ñ¡«⌐  ßΓαπ¬ΓπαÑ ¡á ¬áªñδ⌐ ¿ß»«½∞ºπѼδ⌐ »α«µÑßß«¼ ßѼáΣ«α (É¿ßπ¡«¬
  1359. 11.16). èáªñá∩ ßΓαπ¬Γπαá ó«ßßΓá¡«ó½Ñ¡¿∩ ß«ßΓ«¿Γ ¿º ΓαÑσ φ½Ñ¼Ñ¡Γ«ó -  ¿ñÑ¡Γ¿-
  1360. Σ¿¬áΓ«αá ßѼáΣ«αá, Ñú« »«α∩ñ¬«ó«ú« ¡«¼Ñαá ó ¡áí«αÑ ¿ πßΓá¡«ó«τ¡«ú« º¡áτÑ¡¿∩.
  1361.     ƒñα« óδñѽ∩ÑΓ ßΓαπ¬Γπαδ ó«ßßΓá¡«ó½Ñ¡¿∩ ñ¿¡á¼¿τÑ߬¿, ó« óαѼ∩ »Ñαó«ú« óδ-
  1362. »«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ semop ß πßΓá¡«ó½Ñ¡¡δ¼ Σ½áú«¼ SEM_UNDO. Åα¿ »«ß½Ñ-
  1363. ñπεΘ¿σ  «íαáΘÑ¡¿∩σ  ¬  Σπ¡¬µ¿¿  ß ΓѼ ªÑ Σ½áú«¼ ∩ñα« »α«ß¼áΓα¿óáÑΓ ßΓαπ¬Γπαδ
  1364. ó«ßßΓá¡«ó½Ñ¡¿∩ ñ½∩ »α«µÑßßá ó »«¿ß¬áσ ßΓαπ¬Γπαδ ß ΓѼ ªÑ ßá¼δ¼ ¿ñÑ¡Γ¿Σ¿¬áΓ«-
  1365.  
  1366.  
  1367.                                     351
  1368.  
  1369.     çáú«½«ó¬¿ τáßΓ¡δσ ßΓαπ¬Γπα
  1370.           ó«ßßΓá¡«ó½Ñ¡¿∩            æΓαπ¬Γπαδ ó«ßßΓá¡«ó½Ñ¡¿∩
  1371.              ┌──────┐
  1372.              │  ∙   │
  1373.              │  ∙   │
  1374.              │  ∙   │
  1375.              │  ∙   │   ┌──────────┐   ┌──────────┐   ┌──────────┐
  1376.              ├──────┤   │äÑß¬α¿»Γ«α│   │äÑß¬α¿»Γ«α│   │äÑß¬α¿»Γ«α│
  1377.              │      ├──>│  ì«¼Ñα   ├──>│  ì«¼Ñα   ├──>│  ì«¼Ñα   │
  1378.              ├──────┤   │ ç¡áτÑ¡¿Ñ │   │ ç¡áτÑ¡¿Ñ │   │ ç¡áτÑ¡¿Ñ │
  1379.              │      │   └──────────┘   └──────────┘   └──────────┘
  1380.              │      │   ┌──────────┐
  1381.              ├──────┤   │äÑß¬α¿»Γ«α│
  1382.              │      ├──>│  ì«¼Ñα   │
  1383.              ├──────┤   │ ç¡áτÑ¡¿Ñ │
  1384.              │  ∙   │   └──────────┘
  1385.              │  ∙   │
  1386.              │  ∙   │
  1387.              │  ∙   │
  1388.              └──────┘
  1389.  
  1390.          É¿ßπ¡«¬ 11.16. æΓαπ¬Γπαδ ó«ßßΓá¡«ó½Ñ¡¿∩ ßѼáΣ«α«ó
  1391.  
  1392.  
  1393. α«¼ ¿ »«α∩ñ¬«óδ¼ ¡«¼Ñα«¼ ßѼáΣ«αá, τΓ« ¿  ó  Σ«α¼áΓÑ  ó맮óá  Σπ¡¬µ¿¿.  àß½¿
  1394. ßΓαπ¬Γπαá  «í¡áαπªÑ¡á,  ∩ñα«  óδτ¿ΓáÑΓ  º¡áτÑ¡¿Ñ »α«¿ºóÑñÑ¡¡«⌐ ¡áñ ßѼáΣ«α«¼
  1395. «»Ñαᵿ¿ ¿º πßΓá¡«ó«τ¡«ú« º¡áτÑ¡¿∩. Æá¬¿¼ «íαẫ¼, ó ßΓαπ¬ΓπαÑ  ó«ßßΓá¡«ó½Ñ-
  1396. ¡¿∩ σαá¡¿Γß∩ αѺπ½∞ΓáΓ óδτ¿Γá¡¿∩ ßπ¼¼δ º¡áτÑ¡¿⌐ óßÑσ «»Ñαᵿ⌐, »α«¿ºóÑñÑ¡¡δσ
  1397. ¡áñ  ßѼáΣ«α«¼,  ñ½∩ ¬«Γ«α«ú« πßΓá¡«ó½Ñ¡ Σ½áú SEM_UNDO. àß½¿ ß««ΓóÑΓßΓóπεΘÑ⌐
  1398. ßΓαπ¬Γπαδ ¡ÑΓ, ∩ñα« ß«ºñáÑΓ ÑÑ, ß«αΓ¿απ∩ »α¿ φΓ«¼ ß»¿ß«¬ ßΓαπ¬Γπα »« ¿ñÑ¡Γ¿-
  1399. Σ¿¬áΓ«αá¼ ¿ ¡«¼Ñαá¼ ßѼáΣ«α«ó. àß½¿ πßΓá¡«ó«τ¡«Ñ º¡áτÑ¡¿Ñ ßΓá¡«ó¿Γß∩  αáó¡δ¼
  1400. 0, ∩ñα« πñá½∩ÑΓ ßΓαπ¬Γπαπ ¿º ß»¿ß¬á. è«úñá »α«µÑßß ºáóÑαΦáÑΓß∩, ∩ñα« óδºδóá-
  1401.  
  1402.   ┌───────────────┬┬───────┐  ┌───────────────┬┬───────┬───────┐
  1403.   │ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ││       │  │ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ││       │       │
  1404.   │   ßѼáΣ«αá    ││ semid │  │   ßѼáΣ«αá    ││ semid │ semid │
  1405.   ├───────────────┼┼───────┤  ├───────────────┼┼───────┼───────┤
  1406.   │ ¡«¼Ñα ßѼáΣ«αá││   0   │  │ ¡«¼Ñα ßѼáΣ«αá││   0   │   1   │
  1407.   ├───────────────┼┼───────┤  ├───────────────┼┼───────┼───────┤
  1408.   │  πßΓá¡«ó«τ¡«Ñ ││       │  │  πßΓá¡«ó«τ¡«Ñ ││       │       │
  1409.   │    º¡áτÑ¡¿Ñ   ││   1   │  │    º¡áτÑ¡¿Ñ   ││   1   │   1   │
  1410.   └───────────────┴┴───────┘  └───────────────┴┴───────┴───────┘
  1411.  
  1412.    (á) Å«ß½Ñ »Ñαó«⌐ «»Ñαᵿ¿       (í) Å«ß½Ñ óΓ«α«⌐ «»Ñαᵿ¿
  1413.  
  1414.   ┌───────────────┬┬───────┐
  1415.   │ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ││       │
  1416.   │   ßѼáΣ«αá    ││ semid │
  1417.   ├───────────────┼┼───────┤
  1418.   │ ¡«¼Ñα ßѼáΣ«αá││   0   │                  »πßΓ«
  1419.   ├───────────────┼┼───────┤
  1420.   │  πßΓá¡«ó«τ¡«Ñ ││       │
  1421.   │    º¡áτÑ¡¿Ñ   ││   1   │
  1422.   └───────────────┴┴───────┘
  1423.  
  1424.    (ó) Å«ß½Ñ ΓαÑΓ∞Ñ⌐ «»Ñαᵿ¿      (ú) Å«ß½Ñ τÑΓóÑαΓ«⌐ «»Ñαᵿ¿
  1425.  
  1426.  É¿ßπ¡«¬ 11.17. Å«ß½Ññ«óáΓѽ∞¡«ßΓ∞ ß«ßΓ«∩¡¿⌐ ß»¿ß¬á ßΓαπ¬Γπα ó«ßßΓá¡«ó½Ñ¡¿∩
  1427.  
  1428.  
  1429.                                     352
  1430.  
  1431.  
  1432.  
  1433. ÑΓ  ß»Ñµ¿á½∞¡πε  »α«µÑñπαπ,  ¬«Γ«αá∩ »α«ß¼áΓα¿óáÑΓ óßÑ ßó∩ºá¡¡δÑ ß »α«µÑßß«¼
  1434. ßΓαπ¬Γπαδ ó«ßßΓá¡«ó½Ñ¡¿∩ ¿ óδ»«½¡∩ÑΓ ¡áñ π¬áºá¡¡δ¼ ßѼáΣ«α«¼ óßÑ «íπß½«ó½Ñ¡-
  1435. ¡δÑ ñÑ⌐ßΓó¿∩.
  1436.     ƒñα« ß«ºñáÑΓ ßΓαπ¬Γπαπ ó«ßßΓá¡«ó½Ñ¡¿∩ óß∩¬¿⌐ αáº, ¬«úñá »α«µÑßß π¼Ñ¡∞Φá-
  1437. ÑΓ º¡áτÑ¡¿Ñ ßѼáΣ«αá, á πñá½∩ÑΓ ÑÑ, ¬«úñá »α«µÑßß πóѽ¿τ¿óáÑΓ º¡áτÑ¡¿Ñ ßѼá-
  1438. Σ«αá, »«ß¬«½∞¬π πßΓá¡«ó«τ¡«Ñ º¡áτÑ¡¿Ñ
  1439. ßΓαπ¬Γπαδ αáó¡« 0. ìá É¿ßπ¡¬Ñ 11.17  »«¬áºá¡á  »«ß½Ññ«óáΓѽ∞¡«ßΓ∞  ß«ßΓ«∩¡¿⌐
  1440. ß»¿ß¬á ßΓαπ¬Γπα »α¿ óδ»«½¡Ñ¡¿¿ »α«úαá¼¼δ ß »áαá¼ÑΓα«¼ 'a'. Å«ß½Ñ »Ñαó«⌐ «»Ñ-
  1441. αᵿ¿ »α«µÑßß ¿¼ÑÑΓ «ñ¡π ßΓαπ¬Γπαπ, ß«ßΓ«∩Θπε ¿º ¿ñÑ¡Γ¿Σ¿¬áΓ«αá semid, ¡«¼Ñ-
  1442. αá  ßѼáΣ«αá, αáó¡«ú« 0, ¿ πßΓá¡«ó«τ¡«ú« º¡áτÑ¡¿∩, αáó¡«ú« 1, á »«ß½Ñ óΓ«α«⌐
  1443. «»Ñαᵿ¿ »«∩ó½∩ÑΓß∩ óΓ«αá∩ ßΓαπ¬Γπαá ß ¡«¼Ñα«¼ ßѼáΣ«αá, αáó¡δ¼ 1, ¿ πßΓá¡«-
  1444. ó«τ¡δ¼ º¡áτÑ¡¿Ñ¼, αáó¡δ¼ 1. àß½¿ »α«µÑßß ¡Ñ«ª¿ñá¡¡« ºáóÑαΦáÑΓß∩, ∩ñα« »α«σ«-
  1445. ñ¿Γ »« óßѼ ßΓαπ¬Γπαá¼ ¿ »α¿íáó½∩ÑΓ ¬ ¬áªñ«¼π ßѼáΣ«απ »«  Ññ¿¡¿µÑ,  ó«ßßΓá-
  1446. ¡áó½¿óá∩  ¿σ º¡áτÑ¡¿∩ ó 0. é τáßΓ¡«¼ ß½πτáÑ ∩ñα« π¼Ñ¡∞ΦáÑΓ πßΓá¡«ó«τ¡«Ñ º¡á-
  1447. τÑ¡¿Ñ ñ½∩ ßѼáΣ«αá 1 ¡á ΓαÑΓ∞Ñ⌐ «»Ñαᵿ¿, ó ß««ΓóÑΓßΓó¿¿ ß πóѽ¿τÑ¡¿Ñ¼  º¡á-
  1448. τÑ¡¿∩ ßἫú« ßѼáΣ«αá, ¿ πñá½∩ÑΓ óßε ßΓαπ¬Γπαπ µÑ½¿¬«¼, »«ß¬«½∞¬π πßΓá¡«ó«τ-
  1449. ¡«Ñ  º¡áτÑ¡¿Ñ ßΓá¡«ó¿Γß∩ ¡π½Ñóδ¼. Å«ß½Ñ τÑΓóÑαΓ«⌐ «»Ñαᵿ¿ π »α«µÑßßá í«½∞ΦÑ
  1450. ¡ÑΓ ßΓαπ¬Γπα ó«ßßΓá¡«ó½Ñ¡¿∩, »«ß¬«½∞¬π óßÑ πßΓá¡«ó«τ¡δÑ º¡áτÑ¡¿∩ ßΓ὿ ¡π½Ñ-
  1451. ó묨.
  1452.     éÑ¬Γ«α¡δÑ «»Ñαᵿ¿ ¡áñ ßѼáΣ«αἿ »«ºó«½∩εΓ ¿ºíѪáΓ∞  óºá¿¼¡δσ  í½«¬¿α«-
  1453. ó«¬, ¬á¬ í佫 »«¬áºá¡« óδΦÑ, «ñ¡á¬« «¡¿ »αÑñßΓáó½∩εΓ ¿ºóÑßΓ¡πε Γαπñ¡«ßΓ∞ ñ½∩
  1454. »«¡¿¼á¡¿∩  ¿  αÑ὿ºáµ¿¿, ¿ ó í«½∞Φ¿¡ßΓóÑ »α¿½«ªÑ¡¿⌐ »«½¡δ⌐ ¡áí«α ¿σ ó«º¼«ª-
  1455. ¡«ßΓÑ⌐ ¡Ñ ∩ó½∩ÑΓß∩ «í∩ºáΓѽ∞¡δ¼. Åα«úαá¼¼δ, ¿ß»δΓδóáεΘ¿Ñ »«ΓαÑí¡«ßΓ∞  ó  ¿ß-
  1456. »«½∞º«óá¡¿¿  ¡áí«αá ßѼáΣ«α«ó, ßΓὬ¿óáεΓß∩ ß ó«º¡¿¬¡«óÑ¡¿Ñ¼ óºá¿¼¡δσ í½«¬¿-
  1457. α«ó«¬ ¡á »«½∞º«óáΓѽ∞߬«¼ πα«ó¡Ñ, ¿ ∩ñαπ πªÑ ¡ÑΓ ¡Ñ«íσ«ñ¿¼«ßΓ¿  »«ññÑনóáΓ∞
  1458. ΓᬿѠ߽«ª¡δÑ Σ«α¼δ ß¿ßΓѼ¡δσ Σπ¡¬µ¿⌐.
  1459.     æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ semctl:
  1460.  
  1461.     semctl(id,number,cmd,arg);
  1462.  
  1463.     Åáαá¼ÑΓα arg «íΩ∩ó½Ñ¡ ¬á¬ «íΩÑñ¿¡Ñ¡¿Ñ Γ¿»«ó ñá¡¡δσ:
  1464.  
  1465.     union semunion {
  1466.           int val;
  1467.           struct semid_ds *semstat; /* «»¿ßá¡¿Ñ Γ¿»«ó ß¼.  ó Åα¿-
  1468.                                      * ½«ªÑ¡¿¿ */
  1469.           unsigned short *array;
  1470.     } arg;
  1471.  
  1472.     ƒñα«  ¿¡ΓÑα»αÑΓ¿απÑΓ  »áαá¼ÑΓα  arg  ó ºáó¿ß¿¼«ßΓ¿ «Γ º¡áτÑ¡¿∩ »áαá¼ÑΓαá
  1473. cmd, »«ñ«í¡« Γ«¼π, ¬á¬ ¿¡ΓÑα»αÑΓ¿απÑΓ ¬«¼á¡ñδ ioctl (ú½áóá 10). Æ¿»δ  ñÑ⌐ßΓ-
  1474. ó¿⌐,  ¬«Γ«αδÑ  ¼«úπΓ ¿ß»«½∞º«óáΓ∞ß∩ ó »áαá¼ÑΓαÑ cmd: »«½πτ¿Γ∞ ¿½¿ πßΓá¡«ó¿Γ∞
  1475. º¡áτÑ¡¿∩ π»αáó½∩εΘ¿σ »áαá¼ÑΓα«ó (»αáóá ñ«ßΓπ»á ¿ ñα.),  πßΓá¡«ó¿Γ∞  º¡áτÑ¡¿∩
  1476. «ñ¡«ú« ¿½¿ óßÑσ ßѼáΣ«α«ó ó ¡áí«αÑ, »α«τ¿ΓáΓ∞ º¡áτÑ¡¿∩ ßѼáΣ«α«ó. Å«ñα«í¡«ß-
  1477. Γ¿  »« ¬áªñ«¼π ñÑ⌐ßΓó¿ε ß«ñÑαªáΓß∩ ó Åα¿½«ªÑ¡¿¿. àß½¿ π¬áºá¡á ¬«¼á¡ñá πñá½Ñ-
  1478. ¡¿∩, IPC_RMID, ∩ñα« óÑñÑΓ »«¿ß¬ óßÑσ »α«µÑßß«ó, ß«ñÑαªáΘ¿σ ßΓαπ¬Γπαδ ó«ßßΓá-
  1479. ¡«ó½Ñ¡¿∩ ñ½∩ ñá¡¡«ú« ßѼáΣ«αá, ¿ πñá½∩ÑΓ ß««ΓóÑΓßΓóπεΘ¿Ñ ßΓαπ¬Γπαδ ¿º ß¿ßΓÑ-
  1480. ¼δ. çáΓѼ ∩ñα« ¿¡¿µ¿á½¿º¿απÑΓ ¿ß»«½∞ºπѼδÑ ßѼáΣ«α«¼ ßΓαπ¬Γπαδ ñá¡¡δσ ¿  óδ-
  1481. ó«ñ¿Γ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ »α«µÑßßδ, «ª¿ñáεΘ¿Ñ ¡áßΓπ»½Ñ¡¿∩ ¡Ñ¬«Γ«α«-
  1482. ú« ßó∩ºá¡¡«ú« ß ßѼáΣ«α«¼ ß«íδΓ¿∩: ¬«úñá »α«µÑßßδ ó«º«í¡«ó½∩εΓ ßó«Ñ óδ»«½¡Ñ-
  1483. ¡¿Ñ, «¡¿ «í¡áαπª¿óáεΓ, τΓ« ¿ñÑ¡Γ¿Σ¿¬áΓ«α ßѼáΣ«αá í«½∞ΦÑ ¡Ñ ∩ó½∩ÑΓß∩ ¬«ααѬ-
  1484. Γ¡δ¼, ¿ ó«ºóαáΘáεΓ óδºδóáεΘÑ⌐ »α«úαἼѠ«Φ¿í¬π.
  1485.  
  1486.  
  1487.     E11.2.4 ÄíΘ¿Ñ ºá¼Ñτá¡¿∩F
  1488.  
  1489.     îÑσá¡¿º¼  Σπ¡¬µ¿«¡¿α«óá¡¿∩  Σá⌐½«ó«⌐  ß¿ßΓÑ¼δ ¿ ¼Ñσá¡¿º¼δ óºá¿¼«ñÑ⌐ßΓó¿∩
  1490.  
  1491.                                     353
  1492.  
  1493. »α«µÑß߫󠿼ÑεΓ α∩ñ «íΘ¿σ τÑαΓ. æ¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ Γ¿»á "get" »«σ«ª¿ ¡á Σπ¡¬-
  1494. µ¿¿ creat ¿ open, Σπ¡¬µ¿¿ Γ¿»á "control" »αÑñ«ßΓáó½∩εΓ  ó«º¼«ª¡«ßΓ∞  πñá½∩Γ∞
  1495. ñÑß¬α¿»Γ«αδ  ¿º ß¿ßΓѼδ, τѼ »«σ«ª¿ ¡á Σπ¡¬µ¿ε unlink. ÆÑ¼ ¡Ñ ¼Ñ¡ÑÑ, ó ¼Ñσá-
  1496. ¡¿º¼áσ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó «ΓßπΓßΓóπεΓ «»Ñαᵿ¿, á¡á½«ú¿τ¡δÑ «»Ñαᵿ∩¼,
  1497. óδ»«½¡∩Ñ¼δ¼ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿Ñ⌐ close.  æ½Ññ«óáΓѽ∞¡«,  ∩ñα«  ¡Ñ  αáß»«½áúáÑΓ
  1498. ßóÑñÑ¡¿∩¼¿  « Γ«¼, ¬á¬¿Ñ »α«µÑßßδ ¼«úπΓ ¿ß»«½∞º«óáΓ∞ ¼Ñσá¡¿º¼ IPC, ¿, ñÑ⌐ßΓ-
  1499. ó¿Γѽ∞¡«, »α«µÑßßδ ¼«úπΓ »α¿íÑúáΓ∞ ¬ πß½πúá¼ φΓ«ú« ¼Ñσá¡¿º¼á, Ñß½¿ »αáó¿½∞¡«
  1500. πúáñδóáεΓ ß««ΓóÑΓßΓóπεΘ¿⌐ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ¿ Ñß½¿  π  ¡¿σ  ¿¼ÑεΓß∩  ¡Ñ«íσ«ñ¿¼δÑ
  1501. »αáóá ñ«ßΓπ»á, ñáªÑ Ñß½¿ «¡¿ ¡Ñ óδ»«½¡¿½¿ »αÑñóáα¿Γѽ∞¡« Σπ¡¬µ¿ε Γ¿»á "get".
  1502. ƒñα« ¡Ñ ¼«ªÑΓ áóΓ«¼áΓ¿τÑ߬¿ «τ¿ΘáΓ∞ ¡Ñ¿ß»«½∞ºπѼδÑ ßΓαπ¬Γπαδ ¼Ñσá¡¿º¼á óºá¿-
  1503. ¼«ñÑ⌐ßΓó¿∩  »α«µÑßß«ó,  »«ß¬«½∞¬π  ∩ñαπ  ¡Ñ¿ºóÑßΓ¡«,  ¬á¬¿Ñ ¿º φΓ¿σ ßΓαπ¬Γπα
  1504. í«½∞ΦÑ ¡Ñ ¡πª¡δ. Æá¬¿¼ «íαẫ¼, ºáóÑαΦ¿óΦ¿Ñß∩ óß½ÑñßΓó¿Ñ ó«º¡¿¬¡«óÑ¡¿∩ «Φ¿í-
  1505. ¬¿ »α«µÑßßδ ¼«úπΓ «ßΓáó¿Γ∞ »«ß½Ñ ßÑí∩ ¡Ñ¡πª¡δÑ ¿  ¡Ñ¿ß»«½∞ºπѼδÑ  ßΓαπ¬Γπαδ,
  1506. »ÑαÑúαπªáεΘ¿Ñ  ¿  ºáß«α∩εΘ¿Ñ ß¿ßΓѼπ. ìÑß¼«Γα∩ ¡á Γ«, τΓ« ó ßΓαπ¬Γπαáσ ¼Ñσá-
  1507. ¡¿º¼á óºá¿¼«ñÑ⌐ßΓó¿∩ »«ß½Ñ ºáóÑαΦÑ¡¿∩ ßπΘÑßΓó«óá¡¿∩ »α«µÑßßá ∩ñα« ¼«ªÑΓ ß«σ-
  1508. αá¡¿Γ∞ ¿¡Σ«α¼áµ¿ε « ß«ßΓ«∩¡¿¿ ¿ ñá¡¡δÑ, ½πτΦÑ óßÑ-Γᬿ ñ½∩  φΓ¿σ  µÑ½Ñ⌐  ¿ß-
  1509. »«½∞º«óáΓ∞ Σá⌐½δ.
  1510.     é¼ÑßΓ« Γαáñ¿µ¿«¡¡δσ, »«½πτ¿óΦ¿σ Φ¿α«¬«Ñ αáß»α«ßΓαá¡Ñ¡¿Ñ Σá⌐½«ó ¼Ñσá¡¿º¼δ
  1511. óºá¿¼«ñÑ⌐ßΓó¿∩  »α«µÑß߫󠠿߻«½∞ºπεΓ  ¡«ó«Ñ »α«ßΓαá¡ßΓó« ¿¼Ñ¡, ß«ßΓ«∩ΘÑÑ ¿º
  1512. ¬½ετÑ⌐ (keys). ÉáßΦ¿α¿Γ∞ ßѼá¡Γ¿¬π ¬½ετÑ⌐ ¡á óßε ßÑΓ∞ ñ«ó«½∞¡« Γαπñ¡«,  »«ß-
  1513. ¬«½∞¬π ¡á αạδσ ¼áΦ¿¡á󠬽ετ¿ ¼«úπΓ «»¿ßδóáΓ∞ αẽ¿τ¡δÑ «íΩѬΓδ. è«α«τÑ ú«-
  1514. ó«α∩, ¬½ετ¿ ó «ß¡«ó¡«¼ »αÑñ¡áº¡áτÑ¡δ ñ½∩ ¿ß»«½∞º«óá¡¿∩ ó «ñ¡«¼áΦ¿¡¡δσ ß¿ßΓÑ-
  1515. ¼áσ.  ê¼Ñ¡á Σá⌐½«ó ó í«½∞ΦÑ⌐ ßΓѻѡ¿ »«ñσ«ñ∩Γ ñ½∩ αáß»αÑñѽѡ¡δσ ß¿ßΓѼ (ß¼.
  1516. ú½áóπ 13). êß»«½∞º«óá¡¿Ñ ¬½ετÑ⌐ ó¼ÑßΓ« ¿¼Ñ¡ Σá⌐½«ó ΓᬪѠ ßó¿ñÑΓѽ∞ßΓóπÑΓ  «
  1517. Γ«¼, τΓ« ßαÑñßΓóá óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó ∩ó½∩εΓß∩ "óÑΘ∞ε ó ßÑíÑ", »«½Ñº¡«⌐
  1518. ó  ß»Ñµ¿á½∞¡δσ »α¿½«ªÑ¡¿∩σ, ¡« ¡Ñ ¿¼ÑεΘÑ⌐ ΓÑσ ó«º¼«ª¡«ßΓÑ⌐, ¬«Γ«α묨 «í½áñá-
  1519. εΓ, ¡á»α¿¼Ñα, ¬á¡á½δ ¿ Σá⌐½δ.  ü«½∞Φá∩  τáßΓ∞  Σπ¡¬µ¿«¡á½∞¡δσ  ó«º¼«ª¡«ßΓÑ⌐,
  1520. »αÑñ«ßΓáó½∩Ѽδσ  ñá¡¡δ¼¿ ßαÑñßΓóἿ, ¼«ªÑΓ íδΓ∞ αÑ὿º«óá¡á ß »«¼«Θ∞ε ñαπú¿σ
  1521. ß¿ßΓѼ¡δσ ßαÑñßΓó, »«φΓ«¼π ó¬½ετáΓ∞ ¿σ ó ß«ßΓáó ∩ñαá óα∩ñ ½¿  ß½Ññ«óὫ  íδ.
  1522. ÆÑ¼ ¡Ñ ¼Ñ¡ÑÑ, ¿σ ¿ß»«½∞º«óá¡¿Ñ ó ß«ßΓáóÑ »á¬ÑΓ«ó »α¿¬½áñ¡δσ »α«úαá¼¼ ΓÑß¡«ú«
  1523. óºá¿¼«ñÑ⌐ßΓó¿∩ ñáÑΓ ½πτΦ¿Ñ αѺπ½∞ΓáΓδ »« ßαáó¡Ñ¡¿ε ß« ßΓá¡ñáαΓ¡δ¼¿ Σá⌐½«ó묨
  1524. ßαÑñßΓóἿ (ß¼. ô»α᪡ѡ¿∩).
  1525.  
  1526.  
  1527.     E11.3 éçÇêîÄäàëæÆéêà é æàÆêF
  1528.  
  1529.     Åα«úαá¼¼δ, »«ññÑনóáεΘ¿Ñ ¼Ñª¼áΦ¿¡¡πε ßó∩º∞, ΓᬿÑ, ¬á¬ φ½Ñ¬Γα«¡¡á∩ »«τ-
  1530. Γá, »α«úαá¼¼δ ñ¿ßΓᡵ¿«¡¡«⌐ »ÑαÑß佬¿ Σá⌐½«ó ¿ πñá½Ñ¡¡«⌐ αÑú¿ßΓαᵿ¿, ¿ºñáó-
  1531. ¡á ¿ß»«½∞ºπεΓß∩ ó ¬áτÑßΓóѠ߻ѵ¿á½∞¡δσ ßαÑñßΓó «αúá¡¿ºáµ¿¿ »«ñ¬½ετÑ¡¿⌐ ¿ ¿¡-
  1532. Σ«α¼áµ¿«¡¡«ú«  «í¼Ñ¡á.  Æá¬,  ¡á»α¿¼Ñα,  ßΓá¡ñáαΓ¡δÑ »α«úαá¼¼δ, αáí«ΓáεΘ¿Ñ ó
  1533. ß«ßΓáóÑ φ½Ñ¬Γα«¡¡«⌐ »«τΓδ, ß«σαá¡∩εΓ ΓѬßΓ »«τΓ«óδσ ß««íΘÑ¡¿⌐ »«½∞º«óáΓѽ∩ ó
  1534. «Γñѽ∞¡«¼   Σá⌐½Ñ   (ñ½∩   »«½∞º«óáΓѽ∩   "mjb"   φëà  Σá⌐½   ¿¼ÑÑΓ    ¿¼∩
  1535. "/usr/mail/mjb").  è«úñá «ñ¿¡ »«½∞º«óáΓѽ∞ »«ßδ½áÑΓ ñαπú«¼π »«τΓ«ó«Ñ ß««íΘÑ-
  1536. ¡¿Ñ ¡á Γπ ªÑ ¼áΦ¿¡π, »α«úαá¼¼á mail (»«τΓá) ñ«íáó½∩ÑΓ ß««íΘÑ¡¿Ñ ó ¬«¡Ñµ Σá⌐-
  1537. ½á áñαÑßáΓá, ¿ß»«½∞ºπ∩ ó µÑ½∩σ ß«σαá¡Ñ¡¿∩ µÑ½«ßΓ¡«ßΓ¿ αẽ¿τ¡δÑ  í½«¬¿απεΘ¿Ñ
  1538. ¿  óαѼѡ¡δÑ  Σá⌐½δ.  è«úñá áñαÑßáΓ »«½πτáÑΓ »«τΓπ, »α«úαá¼¼á mail «Γ¬αδóáÑΓ
  1539. »α¿¡áñ½ÑªáΘ¿⌐ Ñ¼π »«τΓ«óδ⌐ Σá⌐½ ¿ τ¿ΓáÑΓ ß««íΘÑ¡¿∩. ä½∩ Γ«ú«, τΓ«íδ  »«ß½áΓ∞
  1540. ß««íΘÑ¡¿Ñ  ¡á ñαπúπε ¼áΦ¿¡π, »α«úαá¼¼á mail ñ«½ª¡á ó ¬«¡Ñτ¡«¼ ¿Γ«úÑ «Γδ߬áΓ∞
  1541. ¡á ¡Ñ⌐ ß««ΓóÑΓßΓóπεΘ¿⌐ »«τΓ«óδ⌐ Σá⌐½. Å«ß¬«½∞¬π »α«úαἼᠡѠ¼«ªÑΓ  αáí«ΓáΓ∞
  1542. ß πñá½Ñ¡¡δ¼¿ Σá⌐½á¼¿ ¡Ñ»«ßαÑñßΓóÑ¡¡«, »α«µÑßß, »α«ΓѬáεΘ¿⌐ ¡á ñαπú«⌐ ¼áΦ¿¡Ñ,
  1543. ñ«½ªÑ¡ ñÑ⌐ßΓó«óáΓ∞ ó ¬áτÑßΓóÑ áúÑ¡Γá ½«¬á½∞¡«ú« »«τΓ«ó«ú« »α«µÑßßá; ß½Ññ«óá-
  1544. Γѽ∞¡«,  ½«¬á½∞¡«¼π »α«µÑßßπ ¡Ñ«íσ«ñ¿¼ ß»«ß«í ßó∩º¿ ß« ßó«¿¼ πñá½Ñ¡¡δ¼ áúÑ¡-
  1545. Γ«¼ τÑαѺ ¼Ñª¼áΦ¿¡¡δÑ úαá¡¿µδ. ï«¬á½∞¡δ⌐ »α«µÑßß ∩ó½∩ÑΓß∩ ¬½¿Ñ¡Γ«¼ πñá½Ñ¡¡«-
  1546. ú« «íß½πª¿óáεΘÑú« (ßÑαóÑα¡«ú«) »α«µÑßßá.
  1547.     Å«ß¬«½∞¬π ó ß¿ßΓѼѠUNIX ¡«óδÑ »α«µÑßßδ ß«ºñáεΓß∩  ß  »«¼«Θ∞ε  ß¿ßΓѼ¡«⌐
  1548. Σπ¡¬µ¿¿ fork, ¬ Γ«¼π ¼«¼Ñ¡Γπ, ¬«úñá ¬½¿Ñ¡Γ »«»δΓáÑΓß∩ óδ»«½¡¿Γ∞ »«ñ¬½ετÑ¡¿Ñ,
  1549. «íß½πª¿óáεΘ¿⌐ »α«µÑßß πªÑ ñ«½ªÑ¡ ßπΘÑßΓó«óáΓ∞. àß½¿ íδ ó ¼«¼Ñ¡Γ ß«ºñá¡¿∩ ¡«-
  1550. ó«ú« »α«µÑßßá πñá½Ñ¡¡«Ñ ∩ñα« »«½πτὫ ºá»α«ß ¡á »«ñ¬½ετÑ¡¿Ñ (»« ¬á¡á½á¼ ¼Ñª-
  1551. ¼áΦ¿¡¡«⌐ ßó∩º¿), ó«º¡¿¬½á íδ ¡Ñß«ú½áß«óá¡¡«ßΓ∞ ß áασ¿ΓѬΓπα«⌐ ß¿ßΓѼδ. ùΓ«íδ
  1552.  
  1553.                                     354
  1554.  
  1555. ¿ºíѪáΓ∞ φΓ«ú«, ¡Ñ¬¿⌐ »α«µÑßß, «íδτ¡« init, »«α«ªñáÑΓ «íß½πª¿óáεΘ¿⌐ »α«µÑßß,
  1556. ¬«Γ«αδ⌐  óÑñÑΓ τΓÑ¡¿Ñ ¿º ¬á¡á½á ßó∩º¿, »«¬á ¡Ñ »«½πτáÑΓ ºá»α«ß ¡á «íß½πª¿óá-
  1557. ¡¿Ñ, »«ß½Ñ τÑú« ó ß««ΓóÑΓßΓó¿¿ ß ¡Ñ¬«Γ«αδ¼  »α«Γ«¬«½«¼  óδ»«½¡∩ÑΓ  πßΓá¡«ó¬π
  1558. ß«Ññ¿¡Ñ¡¿∩.  éδí«α  ßÑΓÑóδσ  ßαÑñßΓó ¿ »α«Γ«¬«½«ó «íδτ¡« óδ»«½¡∩εΓ »α«úαá¼¼δ
  1559. ¬½¿Ñ¡Γá ¿ ßÑαóÑαá, «ß¡«óδóá∩ß∞ ¡á ¿¡Σ«α¼áµ¿¿, σαá¡∩ΘÑ⌐ß∩ ó »α¿¬½áñ¡δσ  íáºáσ
  1560. ñá¡¡δσ;  ß ñαπú«⌐ ßΓ«α«¡δ, óδíαá¡¡δÑ »«½∞º«óáΓѽѼ ßαÑñßΓóá ¼«úπΓ íδΓ∞ ºá¬«-
  1561. ñ¿α«óá¡δ ó ßἿσ »α«úαá¼¼áσ.
  1562.     é ¬áτÑßΓóÑ »α¿¼Ñαá αáßß¼«Γα¿¼ »α«úαá¼¼π uucp, ¬«Γ«αá∩ «íß½πª¿óáÑΓ  »ÑαÑ-
  1563. ß佬π  Σá⌐½«ó ó ßÑΓ¿ ¿ ¿ß»«½¡Ñ¡¿Ñ ¬«¼á¡ñ ¡á πñá½Ñ¡¿¿ (ß¼. [Nowitz 80]). Åα«-
  1564. µÑßß-¬½¿Ñ¡Γ ºá»αáΦ¿óáÑΓ ó íáºÑ ñá¡¡δσ áñαÑß ¿ ñαπúπε  ¼áαΦαπΓ¡πε  ¿¡Σ«α¼áµ¿ε
  1565. (¡á»α¿¼Ñα,  ¡«¼Ñα ΓѽÑΣ«¡á), «Γ¬αδóáÑΓ áóΓ«¬«¼¼πΓáΓ«α, ºá»¿ßδóáÑΓ ¿½¿ »α«óÑ-
  1566. α∩ÑΓ ¿¡Σ«α¼áµ¿ε ó ñÑß¬α¿»Γ«αÑ «Γ¬αδóáѼ«ú« Σá⌐½á ¿ óδºδóáÑΓ πñá½Ñ¡¡πε  ¼áΦ¿-
  1567. ¡π. ôñá½Ñ¡¡á∩ ¼áΦ¿¡á ¼«ªÑΓ ¿¼ÑΓ∞ ß»Ñµ¿á½∞¡δÑ ½¿¡¿¿, óδñѽѡ¡δÑ ñ½∩ ¿ß»«½∞º«-
  1568. óá¡¿∩  »α«úαá¼¼«⌐  uucp; óδ»«½¡∩εΘ¿⌐ß∩ ¡á φΓ«⌐ ¼áΦ¿¡Ñ »α«µÑßß init »«α«ªñáÑΓ
  1569. getty-»α«µÑßßδ - ßÑαóÑαδ, ¬«Γ«αδÑ π»αáó½∩εΓ ½¿¡¿∩¼¿ ¿ »«½πτáεΓ  ¿ºóÑΘÑ¡¿∩  «
  1570. »«ñ¬½ετÑ¡¿∩σ. Å«ß½Ñ óδ»«½¡Ñ¡¿∩ á»»áαáΓ¡«ú« »«ñ¬½ετÑ¡¿∩ »α«µÑßß-¬½¿Ñ¡Γ αÑú¿ß-
  1571. Γα¿απÑΓß∩  ó  ß¿ßΓѼѠ ó  ß««ΓóÑΓßΓó¿¿  ß  «íδτ¡δ¼  »α«Γ«¬«½«¼  αÑú¿ßΓαᵿ¿:
  1572. getty-»α«µÑßß ºá»π߬áÑΓ ß»Ñµ¿á½∞¡δ⌐ ¿¡ΓÑα»αÑΓáΓ«α ¬«¼á¡ñ, uucico,  π¬áºá¡¡δ⌐
  1573. ó  Σá⌐½Ñ "/etc/passwd", á »α«µÑßß-¬½¿Ñ¡Γ »ÑαÑñáÑΓ ¡á πñá½Ñ¡¡πε ¼áΦ¿¡π »«ß½Ñ-
  1574. ñ«óáΓѽ∞¡«ßΓ∞ ¬«¼á¡ñ, ΓѼ ßá¼δ¼ ºáßΓáó½∩∩ ÑÑ ¿ß»«½¡∩Γ∞ »α«µÑßßδ «Γ ¿¼Ñ¡¿ ½«-
  1575. ¬á½∞¡«⌐ ¼áΦ¿¡δ.
  1576.     æÑΓÑó«Ñ óºá¿¼«ñÑ⌐ßΓó¿Ñ ó ß¿ßΓѼѠUNIX »αÑñßΓáó½∩ÑΓ  ßÑα∞Ѻ¡πε  »α«í½Ñ¼π,
  1577. »«ß¬«½∞¬π  ß««íΘÑ¡¿∩ ñ«½ª¡δ ó¬½ετáΓ∞ ó ßÑí∩ ¬á¬ ¿¡Σ«α¼áµ¿«¡¡πε, Γᬠ¿ π»αáó-
  1578. ½∩εΘπε τáßΓ¿. é π»αáó½∩εΘÑ⌐ τáßΓ¿ ß««íΘÑ¡¿∩ ¼«ªÑΓ αáß»«½áúáΓ∞ß∩ áñαÑß ¡áº¡á-
  1579. τÑ¡¿∩ ß««íΘÑ¡¿∩. é ßó«ε «τÑαÑñ∞, ßΓαπ¬Γπαá áñαÑß¡δσ ñá¡¡δσ ºáó¿ß¿Γ  «Γ  Γ¿»á
  1580. ßÑΓ¿ ¿ ¿ß»«½∞ºπѼ«ú« »α«Γ«¬«½á. æ½Ññ«óáΓѽ∞¡«, »α«µÑßßá¼ ¡πª¡« º¡áΓ∞ Γ¿» ßÑ-
  1581. Γ¿,  á  φΓ« ¿ñÑΓ óαáºαѺ ß ΓѼ »α¿¡µ¿»«¼, »« ¬«Γ«α«¼π »«½∞º«óáΓѽ¿ ¡Ñ ñ«½ª¡δ
  1582. «íαáΘáΓ∞ ó¡¿¼á¡¿∩ ¡á Γ¿» Σá⌐½á, ¿í« óßÑ πßΓα«⌐ßΓóá ñ½∩ »«½∞º«óáΓѽÑ⌐  óδú½∩-
  1583. ñ∩Γ  ¬á¬  Σá⌐½δ.  Æαáñ¿µ¿«¡¡δÑ ¼ÑΓ«ñδ αÑ὿ºáµ¿¿ ßÑΓÑó«ú« óºá¿¼«ñÑ⌐ßΓó¿∩ »α¿
  1584. πßΓá¡«ó¬Ñ π»αáó½∩εΘ¿σ »áαá¼ÑΓα«ó ó ß¿½∞¡«⌐ ßΓѻѡ¿ »«½áúáεΓß∩ ¡á »«¼«Θ∞ ß¿ß-
  1585. ΓѼ¡«⌐ Σπ¡¬µ¿¿ ioctl, «ñ¡á¬« ó αạδσ Γ¿»áσ ßÑΓÑ⌐  φëà ¼«¼Ñ¡Γ  ó«»½«ΘáÑΓß∩
  1586. »«-αạ«¼π. ÄΓßεñá ó«º¡¿¬áÑΓ ¡ÑªÑ½áΓѽ∞¡δ⌐ »«í«τ¡δ⌐ φΣΣѬΓ, ßó∩ºá¡¡δ⌐ ß ΓѼ,
  1587. τΓ« »α«úαá¼¼δ, αáºαáí«Γá¡¡δÑ ñ½∩ «ñ¡«⌐ ßÑΓ¿, ó ñαπú¿σ ßÑΓ∩σ ¼«úπΓ ¡Ñ ºáαáí«-
  1588. ΓáΓ∞.
  1589.     ùΓ«íδ  αáºαáí«ΓáΓ∞ ßÑΓÑóδÑ ¿¡ΓÑαΣÑ⌐ßδ ñ½∩ ß¿ßΓѼδ UNIX, í뫨 »αÑñ»α¿¡∩Γδ
  1590. º¡áτ¿Γѽ∞¡δÑ πß¿½¿∩. ÉÑ὿ºáµ¿∩ »«Γ«¬«ó ó »«ß½Ññ¡¿σ αÑñᬵ¿∩σ óÑαß¿¿ V  αáß-
  1591. »«½áúáÑΓ  φ½Ñúá¡Γ¡δ¼ ¼Ñσá¡¿º¼«¼ »«ññÑ᪬¿ ßÑΓÑó«ú« óºá¿¼«ñÑ⌐ßΓó¿∩, «íÑß»Ñτ¿-
  1592. óáεΘ¿¼ ú¿í¬«Ñ ß«τÑΓá¡¿Ñ «Γñѽ∞¡δσ ¼«ñπ½Ñ⌐ »α«Γ«¬«½«ó ¿ ¿σ ß«ú½áß«óá¡¡«Ñ  ¿ß-
  1593. »«½∞º«óá¡¿Ñ ¡á πα«ó¡Ñ ºáñáτ. æ½ÑñπεΘ¿⌐ αáºñѽ »«ßó∩ΘÑ¡ ¬αáΓ¬«¼π «»¿ßá¡¿ε ¼Ñ-
  1594. Γ«ñá  αÑΦÑ¡¿∩  ñá¡¡δσ  »α«í½Ñ¼  ó  ß¿ßΓѼѠBSD, «ß¡«óá¡¡«ú« ¡á ¿ß»«½∞º«óá¡¿¿
  1595. ú¡Ñºñ.
  1596.  
  1597.  
  1598.     E11.4 âìàçäÇF
  1599.  
  1600.     é »αÑñδñπΘѼ αáºñѽѠí佫 »«¬áºá¡«, ¬á¬¿¼ «íαẫ¼ óºá¿¼«ñÑ⌐ßΓóπεΓ  ¼Ñªñπ
  1601. ß«í«⌐  »α«µÑßßδ, »α«ΓѬáεΘ¿Ñ ¡á αạδσ ¼áΦ¿¡áσ, »α¿ φΓ«¼ «íαáΘὫß∞ ó¡¿¼á¡¿Ñ
  1602. ¡á Γ«, τΓ« ß»«ß«íδ αÑ὿ºáµ¿¿ óºá¿¼«ñÑ⌐ßΓó¿∩ ¼«úπΓ íδΓ∞ αẽ¿τáΓ∞ß∩ ó  ºáó¿-
  1603. ß¿¼«ßΓ¿ «Γ ¿ß»«½∞ºπѼδσ »α«Γ«¬«½«ó ¿ ßÑΓÑóδσ ßαÑñßΓó. ü«½ÑÑ Γ«ú«, φΓ¿ ß»«ß«-
  1604. íδ  ¡Ñ óßÑúñá »α¿¼Ñ¡¿¼δ ñ½∩ «íß½πª¿óá¡¿∩ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó, óδ»«½¡∩ε-
  1605. Θ¿σß∩ ¡á «ñ¡«⌐ ¿ Γ«⌐ ªÑ ¼áΦ¿¡Ñ, »«ß¬«½∞¬π ó ¡¿σ »αÑñ»«½áúáÑΓß∩ ßπΘÑßΓó«óá¡¿Ñ
  1606. «íß½πª¿óáεΘÑú« (ßÑαóÑα¡«ú«) »α«µÑßßá, ¬«Γ«αδ⌐ »α¿ óδ»«½¡Ñ¡¿¿ ß¿ßΓѼ¡δσ Σπ¡¬-
  1607. µ¿⌐ open ¿½¿ read íπñÑΓ »α¿«ßΓá¡áó½¿óáΓ∞ß∩ ñαá⌐óÑα«¼. é µÑ½∩σ ß«ºñá¡¿∩ í«½ÑÑ
  1608. π¡¿óÑαßá½∞¡δσ ¼ÑΓ«ñ«ó óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó ¡á «ß¡«óÑ ¿ß»«½∞º«óá¡¿∩  ¼¡«-
  1609. ú«πα«ó¡Ñóδσ  ßÑΓÑóδσ »α«Γ«¬«½«ó ñ½∩ ß¿ßΓѼδ BSD íδ½ αáºαáí«Γá¡ ¼Ñσá¡¿º¼, »«-
  1610. ½πτ¿óΦ¿⌐ ¡áºóá¡¿Ñ "sockets" (ú¡Ñºñá) (ß¼. [Berkeley 83]). é  ñá¡¡«¼  αáºñѽÑ
  1611. ¼δ αáßß¼«Γα¿¼ ¡Ñ¬«Γ«αδÑ á߻ѬΓδ »α¿¼Ñ¡Ñ¡¿∩ ú¡Ñºñ (¡á »«½∞º«óáΓѽ∞߬«¼ πα«ó¡Ñ
  1612. »αÑñßΓáó½Ñ¡¿∩).
  1613.  
  1614.  
  1615.                                     355
  1616.  
  1617.                Åα«µÑßß-¬½¿Ñ¡Γ       Åα«µÑßß-ßÑαóÑα
  1618.                        │                 │
  1619.                        └──┐           ┌──┘
  1620. ┌─────────────────────────┼──┐     ┌──┼──────────────────────────┐
  1621. │ ôα«óÑ¡∞ ú¡Ñºñ              │     │          ôα«óÑ¡∞ ú¡Ñºñ      │
  1622. ├─────────────────────────┼──┤     ├──┼──────────────────────────┤
  1623. │                        TCP │     │ TCP                         │
  1624. │ ôα«óÑ¡∞ »α«Γ«¬«½«ó      │  │     │  │       ôα«óÑ¡∞ »α«Γ«¬«½«ó │
  1625. │                        IP  │     │ IP                          │
  1626. ├─────────────────────────┼──┤     ├──┼──────────────────────────┤
  1627. │                     äαá⌐óÑα│     │ äαá⌐óÑα                     │
  1628. │ ôα«óÑ¡∞ πßΓα«⌐ßΓó  Ethernet│     │Ethernet  ôα«óÑ¡∞ πßΓα«⌐ßΓó  │
  1629. └─────────────────────────┼──┘     └──┼──────────────────────────┘
  1630.                           └───┐   ┌───┘
  1631.                               │   │
  1632.                              æ Ñ Γ ∞
  1633.  
  1634.            É¿ßπ¡«¬ 11.18. î«ñѽ∞ ß ¿ß»«½∞º«ó᡿Ѽ ú¡Ñºñ
  1635.  
  1636.     æΓαπ¬Γπαá  ∩ñαá ¿¼ÑÑΓ Γα¿ πα«ó¡∩: ú¡Ñºñ, »α«Γ«¬«½«ó ¿ πßΓα«⌐ßΓó (É¿ßπ¡«¬
  1637. 11.18). ôα«óÑ¡∞ ú¡Ñºñ óδ»«½¡∩ÑΓ Σπ¡¬µ¿¿ ¿¡ΓÑαΣÑ⌐ßᠼѪñπ «íαáΘÑ¡¿∩¼¿ ¬  «»Ñ-
  1638. αᵿ«¡¡«⌐  ß¿ßΓѼѠ(ß¿ßΓѼ¡δ¼ Σπ¡¬µ¿∩¼) ¿ ßαÑñßΓóἿ ¡¿º¬¿σ πα«ó¡Ñ⌐, πα«óÑ¡∞
  1639. »α«Γ«¬«½«ó ß«ñÑαª¿Γ ¼«ñπ½¿, «íÑß»Ñτ¿óáεΘ¿Ñ óºá¿¼«ñÑ⌐ßΓó¿Ñ »α«µÑßß«ó (¡á  α¿-
  1640. ßπ¡¬Ñ  π»«¼∩¡πΓδ »α«Γ«¬«½δ TCP ¿ IP), á πα«óÑ¡∞ πßΓα«⌐ßΓó ß«ñÑαª¿Γ ñαá⌐óÑαδ,
  1641. π»αáó½∩εΘ¿Ñ ßÑΓÑó묨 πßΓα«⌐ßΓóἿ. ä«»πßΓ¿¼δÑ ß«τÑΓá¡¿∩ »α«Γ«¬«½«ó ¿ ñαá⌐óÑ-
  1642. α«ó π¬áºδóáεΓß∩ »α¿ »«ßΓα«Ñ¡¿¿ ß¿ßΓѼδ (ó ßѬµ¿¿ ¬«¡Σ¿úπαᵿ¿); φëà ß»«ß«í
  1643. πßΓπ»áÑΓ  »« ú¿í¬«ßΓ¿ óδΦÑπ»«¼∩¡πΓ«¼π »«Γ«¬«ó«¼π ¼Ñσá¡¿º¼π. Åα«µÑßßδ óºá¿¼«-
  1644. ñÑ⌐ßΓóπεΓ ¼Ñªñπ ß«í«⌐ »« ßσѼѠ¬½¿Ñ¡Γ-ßÑαóÑα: ßÑαóÑα ªñÑΓ ß¿ú¡á½á «Γ ú¡Ñºñá,
  1645. ¡áσ«ñ∩ß∞ ¡á «ñ¡«¼ ¬«¡µÑ ñπ»½Ñ¬ß¡«⌐ ½¿¡¿¿ ßó∩º¿, á  »α«µÑßßδ-¬½¿Ñ¡Γδ  óºá¿¼«-
  1646. ñÑ⌐ßΓóπεΓ  ß ßÑαóÑα«¼ τÑαѺ ú¡Ñºñ«, ¡áσ«ñ∩ΘÑÑß∩ ¡á ñαπú«¼ ¬«¡µÑ, ¬«Γ«αδ⌐ ¼«-
  1647. ªÑΓ αáß»«½áúáΓ∞ß∩ ¡á ñαπú«⌐ ¼áΦ¿¡Ñ. ƒñα« «íÑß»Ñτ¿óáÑΓ ó¡πΓαÑ¡¡εε ßó∩º∞ ¿ »Ñ-
  1648. αÑñáÑΓ ñá¡¡δÑ «Γ ¬½¿Ñ¡Γá ¬ ßÑαóÑαπ.
  1649.     â¡Ñºñá, «í½áñáεΘ¿Ñ «ñ¿¡á¬«ó묨 ßó«⌐ßΓóἿ, ¡á»α¿¼Ñα, «»¿αáεΘ¿Ñß∩ ¡á  «í-
  1650. Θ¿Ñ  ß«ú½áΦÑ¡¿∩ »« ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ ¿ Σ«α¼áΓδ áñαÑß«ó (ó »α«Γ«¬«½áσ), úαπ»»¿απ-
  1651. εΓß∩ ó ñ«¼Ñ¡δ (π»αáó½∩ѼδÑ «ñ¡¿¼ πº½«¼). é ß¿ßΓѼѠ BSD  4.2  »«ññÑনóáεΓß∩
  1652. ñ«¼Ñ¡δ:  "UNIX  system" - ñ½∩ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó ó¡πΓα¿ «ñ¡«⌐ ¼áΦ¿¡δ ¿
  1653. "Internet" (¼ÑªßÑΓÑó«⌐) - ñ½∩ óºá¿¼«ñÑ⌐ßΓó¿∩ τÑαѺ ßÑΓ∞ ß »«¼«Θ∞ε  »α«Γ«¬«½á
  1654. DARPA  (ô»αáó½Ñ¡¿Ñ »Ñαß»Ñ¬Γ¿ó¡δσ ¿ßß½Ññ«óá¡¿⌐ ¿ αáºαáí«Γ«¬ î¿¡¿ßΓÑαßΓóá «í«-
  1655. α«¡δ æÿÇ) (ß¼. [Postel 80] ¿ [Postel 81]). â¡Ñºñá íδóáεΓ ñóπσ Γ¿»«ó:  ó¿αΓπ-
  1656. á½∞¡δ⌐  ¬á¡á½  (»«Γ«¬«ó«Ñ  ú¡Ñºñ«, Ñß½¿ »«½∞º«óáΓ∞ß∩ ΓÑନ¡«½«ú¿Ñ⌐ üÑᬽ¿) ¿
  1657. ñÑ⌐Γáúαá¼¼á. é¿αΓπá½∞¡δ⌐ ¬á¡á½ «íÑß»Ñτ¿óáÑΓ ¡áñѪ¡πε ñ«ßΓáó¬π ñá¡¡δσ ß  ß«σ-
  1658. αá¡Ñ¡¿Ñ¼  ¿ßσ«ñ¡«⌐  »«ß½Ññ«óáΓѽ∞¡«ßΓ¿.  äÑ⌐Γáúαá¼¼δ ¡Ñ úáαá¡Γ¿απεΓ ¡áñѪ¡πε
  1659. ñ«ßΓáó¬π ß ß«σαá¡Ñ¡¿Ñ¼ π¡¿¬á½∞¡«ßΓ¿ ¿ »«ß½Ññ«óáΓѽ∞¡«ßΓ¿, ¡« «¡¿ í«½ÑÑ  φ¬«-
  1660. ¡«¼¡δ  ó ß¼δ߽Ѡ¿ß»«½∞º«óá¡¿∩ αÑßπαß«ó, »«ß¬«½∞¬π ñ½∩ ¡¿σ ¡Ñ ΓαÑíπεΓß∩ ß½«ª-
  1661. ¡δÑ πßΓá¡«ó«τ¡δÑ «»Ñαᵿ¿; Γᬿ¼ «íαẫ¼, ñÑ⌐Γáúαá¼¼δ  »«½Ñº¡δ  ó  «Γñѽ∞¡δσ
  1662. ß½πτá∩σ óºá¿¼«ñÑ⌐ßΓó¿∩. ä½∩ ¬áªñ«⌐ ñ«»πßΓ¿¼«⌐ ¬«¼í¿¡áµ¿¿ Γ¿»á ñ«¼Ñ¡-ú¡Ñºñ« ó
  1663. ß¿ßΓѼѠ »«ññÑনóáÑΓß∩  π¼«½τá¡¿Ñ  ¡á ¿ß»«½∞ºπѼδ⌐ »α«Γ«¬«½. Æá¬, ¡á»α¿¼Ñα,
  1664. ñ½∩ ñ«¼Ñ¡á "Internet" πß½πú¿ ó¿αΓπá½∞¡«ú« ¬á¡á½á óδ»«½¡∩ÑΓ  »α«Γ«¬«½  Γαá¡ß-
  1665. »«αΓ¡«⌐  ßó∩º¿ (TCP), á Σπ¡¬µ¿¿ ñÑ⌐Γáúαá¼¼δ - »«½∞º«óáΓѽ∞߬¿⌐ ñÑ⌐Γáúαá¼¼¡δ⌐
  1666. »α«Γ«¬«½ (UDP).
  1667.     æπΘÑßΓóπÑΓ ¡Ñ߬«½∞¬« ß¿ßΓѼ¡δσ Σπ¡¬µ¿⌐ αáí«Γδ ß ú¡ÑºñἿ. öπ¡¬µ¿∩ socket
  1668. πßΓá¡áó½¿óáÑΓ «¬«¡Ñτ¡πε Γ«τ¬π ½¿¡¿¿ ßó∩º¿.
  1669.  
  1670.     sd = socket(format,type,protocol);
  1671.  
  1672. Format «í«º¡áτáÑΓ ñ«¼Ñ¡ ("UNIX system" ¿½¿ "Internet"), type - Γ¿» ßó∩º¿ τÑ-
  1673. αѺ ú¡Ñºñ« (ó¿αΓπá½∞¡δ⌐ ¬á¡á½ ¿½¿ ñÑ⌐Γáúαá¼¼á), á protocol - Γ¿»  »α«Γ«¬«½á,
  1674. π»αáó½∩εΘÑú«  óºá¿¼«ñÑ⌐ßΓó¿Ñ¼.  äÑß¬α¿»Γ«α  ú¡Ñºñá sd, ó«ºóαáΘáѼδ⌐ Σπ¡¬µ¿Ñ⌐
  1675. socket, ¿ß»«½∞ºπÑΓß∩ ñαπú¿¼¿ ß¿ßΓѼ¡δ¼¿ Σπ¡¬µ¿∩¼¿. çá¬αδΓ¿Ñ ú¡Ñºñ  óδ»«½¡∩ÑΓ
  1676.  
  1677.                                     356
  1678.  
  1679. Σπ¡¬µ¿∩ close.
  1680.     öπ¡¬µ¿∩ bind ßó∩ºδóáÑΓ ñÑß¬α¿»Γ«α ú¡Ñºñá ß ¿¼Ñ¡Ñ¼:
  1681.  
  1682.     bind(sd,address,length);
  1683.  
  1684. úñÑ  sd - ñÑß¬α¿»Γ«α ú¡Ñºñá, address - áñαÑß ßΓαπ¬Γπαδ, «»αÑñѽ∩εΘÑ⌐ ¿ñÑ¡Γ¿-
  1685. Σ¿¬áΓ«α, σáαá¬ΓÑα¡δ⌐ ñ½∩ ñá¡¡«⌐ ¬«¼í¿¡áµ¿¿ ñ«¼Ñ¡á  ¿  »α«Γ«¬«½á  (ó  Σπ¡¬µ¿¿
  1686. socket). Length - ñ½¿¡á ßΓαπ¬Γπαδ address; íѺ φΓ«ú« »áαá¼ÑΓαá ∩ñα« ¡Ñ º¡á½«
  1687. íδ,  ¬á¬«óá  ñ½¿¡á  ßΓαπ¬Γπαδ, »«ß¬«½∞¬π ñ½∩ αạδσ ñ«¼Ñ¡«ó ¿ »α«Γ«¬«½«ó «¡á
  1688. ¼«ªÑΓ íδΓ∞ αẽ¿τ¡«⌐. ìá»α¿¼Ñα, ñ½∩ ñ«¼Ñ¡á "UNIX system" ßΓαπ¬Γπαá  ß«ñÑনΓ
  1689. ¿¼∩  Σá⌐½á. Åα«µÑßßδ-ßÑαóÑαδ ßó∩ºδóáεΓ ú¡Ñºñá ß ¿¼Ñ¡á¼¿ ¿ «íΩ∩ó½∩εΓ « ß«ßΓ«-
  1690. ∩óΦѼß∩ »α¿ßó«Ñ¡¿¿ ¿¼Ñ¡ »α«µÑßßá¼-¬½¿Ñ¡Γá¼.
  1691.     æ »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ connect ñѽáÑΓß∩ ºá»α«ß ¡á »«ñ¬½ετÑ¡¿Ñ ¬ ßπ-
  1692. ΘÑßΓóπεΘѼπ ú¡Ñºñπ:
  1693.  
  1694.     connect(sd,address,length);
  1695.  
  1696. æÑ¼á¡Γ¿τÑ߬¿⌐ ß¼δß½ »áαá¼ÑΓα«ó Σπ¡¬µ¿¿ «ßΓáÑΓß∩ »αѪ¡¿¼ (ß¼. Σπ¡¬µ¿ε  bind),
  1697. ¡«  address π¬áºδóáÑΓ πªÑ ¡á óδσ«ñ¡«Ñ ú¡Ñºñ«, «íαáºπεΘÑÑ »α«Γ¿ó«»«½«ª¡δ⌐ ¬«-
  1698. ¡Ñµ ½¿¡¿¿ ßó∩º¿. Äíá ú¡Ñºñá ñ«½ª¡δ ¿ß»«½∞º«óáΓ∞ «ñ¡¿ ¿ ΓÑ ªÑ ñ«¼Ñ¡ ¿  »α«Γ«-
  1699. ¬«½ ßó∩º¿, ¿ Γ«úñá ∩ñα« πñ«ßΓ«óÑα¿Γ »αáó¿½∞¡«ßΓ∞ πßΓᡫ󬿠½¿¡¿¿ ßó∩º¿. àß½¿
  1700. Γ¿»  ú¡Ñºñá  - ñÑ⌐Γáúαá¼¼á, ß««íΘáѼδ⌐ Σπ¡¬µ¿Ñ⌐ connect ∩ñαπ áñαÑß íπñÑΓ ¿ß-
  1701. »«½∞º«óáΓ∞ß∩ ó »«ß½ÑñπεΘ¿σ «íαáΘÑ¡¿∩σ ¬ Σπ¡¬µ¿¿ send τÑαѺ ñá¡¡«Ñ ú¡Ñºñ«;  ó
  1702. ¼«¼Ñ¡Γ ó맮óá ¡¿¬á¬¿σ ß«Ññ¿¡Ñ¡¿⌐ ¡Ñ »α«¿ºó«ñ¿Γß∩.
  1703.     Å«¬á »α«µÑßß-ßÑαóÑα ú«Γ«ó¿Γß∩ ¬ »α¿Ñ¼π ßó∩º¿ »« ó¿αΓπá½∞¡«¼π ¬á¡á½π, ∩ñ-
  1704. απ  ß½ÑñπÑΓ  óδßΓα«¿Γ∞ »«ßΓπ»áεΘ¿Ñ ºá»α«ßδ ó «τÑαÑñ∞ ¡á «íß½πª¿óá¡¿Ñ. îá¬ß¿-
  1705. ¼á½∞¡á∩ ñ½¿¡á «τÑαÑñ¿ ºáñáÑΓß∩ ß »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ listen:
  1706.  
  1707.     listen(sd,qlength)
  1708.  
  1709. úñÑ sd - ñÑß¬α¿»Γ«α ú¡Ñºñá, á qlength - ¼á¬ß¿¼á½∞¡«-ñ«»πßΓ¿¼«Ñ τ¿ß½«  ºá»α«-
  1710. ß«ó, «ª¿ñáεΘ¿σ «íαáí«Γ¬¿.
  1711.  
  1712.  
  1713.     ┌────────────────────┐         ┌─────────────────────────┐
  1714.     │   Åα«µÑßß-¬½¿Ñ¡Γ   │         │     Åα«µÑßß-ßÑαóÑα      │
  1715.     │         │          │         │          │  ∙           │
  1716.     │         │          │         │     ┌────┘  ∙∙∙∙∙∙      │
  1717.     │         │          │         │     │            ∙      │
  1718.     │         │          │         │listen addr   accept addr│
  1719.     └─────────┼──────────┘         └─────┼────────────∙──────┘
  1720.               │                          │            ∙
  1721.               └──────────────────────────┘∙∙∙∙∙∙∙∙∙∙∙∙∙
  1722.  
  1723.                É¿ßπ¡«¬ 11.19. Åα¿Ñ¼ ó맮óá ßÑαóÑα«¼
  1724.  
  1725.  
  1726.     æ¿ßΓѼ¡á∩  Σπ¡¬µ¿∩  accept »α¿¡¿¼áÑΓ ºá»α«ßδ ¡á »«ñ¬½ετÑ¡¿Ñ, »«ßΓπ»áεΘ¿Ñ
  1727. ¡á óσ«ñ »α«µÑßßá-ßÑαóÑαá:
  1728.  
  1729.     nsd = accept(sd,address,addrlen);
  1730.  
  1731. úñÑ sd - ñÑß¬α¿»Γ«α ú¡Ñºñá, address - π¬áºáΓѽ∞ ¡á »«½∞º«óáΓѽ∞߬¿⌐  ¼áßß¿ó,
  1732. ó  ¬«Γ«α«¼  ∩ñα«  ó«ºóαáΘáÑΓ  áñαÑß  »«ñ¬½ετáѼ«ú« ¬½¿Ñ¡Γá, addrlen - αẼÑα
  1733. »«½∞º«óáΓѽ∞߬«ú« ¼áßß¿óá. Å« ºáóÑαΦÑ¡¿¿ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ ∩ñα«  ºá»¿ßδóáÑΓ
  1734. ó »ÑαѼѡ¡πε addrlen αẼÑα »α«ßΓαá¡ßΓóá, Σá¬Γ¿τÑ߬¿ ºá¡∩Γ«ú« ¼áßß¿ó«¼. öπ¡-
  1735. ¬µ¿∩  ó«ºóαáΘáÑΓ  ¡«óδ⌐ ñÑß¬α¿»Γ«α ú¡Ñºñá (nsd), «Γ½¿τ¡δ⌐ «Γ ñÑß¬α¿»Γ«αá sd.
  1736. Åα«µÑßß-ßÑαóÑα ¼«ªÑΓ »α«ñ«½ªáΓ∞ ß½ÑªÑ¡¿Ñ ºá ß«ßΓ«∩¡¿Ñ¼ «íΩ∩ó½Ñ¡¡«ú«  ú¡Ñºñá,
  1737. »«ññÑনóá∩ ßó∩º∞ ß ¬½¿Ñ¡Γ«¼ »« «Γñѽ∞¡«¼π ¬á¡á½π (É¿ßπ¡«¬ 11.19).
  1738.  
  1739.                                     357
  1740.  
  1741.     öπ¡¬µ¿¿ send ¿ recv óδ»«½¡∩εΓ »ÑαÑñáτπ ñá¡¡δσ τÑαѺ »«ñ¬½ετÑ¡¡«Ñ ú¡Ñºñ«.
  1742. æ¿¡Γá¬ß¿ß ó맮óá Σπ¡¬µ¿¿ send:
  1743.  
  1744.     count = send(sd,msg,length,flags);
  1745.  
  1746. úñÑ  sd  - ñÑß¬α¿»Γ«α ú¡Ñºñá, msg - π¬áºáΓѽ∞ ¡á »«ßδ½áѼδÑ ñá¡¡δÑ, length -
  1747. αẼÑα ñá¡¡δσ, count - ¬«½¿τÑßΓó« Σá¬Γ¿τÑ߬¿ »ÑαÑñá¡¡δσ íá⌐Γ. Åáαá¼ÑΓα flags
  1748. ¼«ªÑΓ ß«ñÑαªáΓ∞ º¡áτÑ¡¿Ñ SOF_OOB (»«ß½áΓ∞ ñá¡¡δÑ out-of-band - "τÑαѺ ΓἫª-
  1749. ¡ε"), Ñß½¿ »«ßδ½áѼδÑ ñá¡¡δÑ ¡Ñ πτ¿ΓδóáεΓß∩ ó  «íΘѼ  ¿¡Σ«α¼áµ¿«¡¡«¼  «í¼Ñ¡Ñ
  1750. ¼Ñªñπ óºá¿¼«ñÑ⌐ßΓóπεΘ¿¼¿ »α«µÑßßἿ. Åα«úαá¼¼á πñá½Ñ¡¡«⌐ αÑú¿ßΓαᵿ¿, ¡á»α¿-
  1751. ¼Ñα,  ¼«ªÑΓ »«ß½áΓ∞ out-of-band ß««íΘÑ¡¿Ñ, ¿¼¿Γ¿απεΘÑÑ ¡áªáΓ¿Ñ ¡á ¬½áó¿áΓπαÑ
  1752. ΓÑନ¡á½á ¬½áó¿Φ¿ "delete". æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ recv:
  1753.  
  1754.     count = recv(sd,buf,length,flags);
  1755.  
  1756. úñÑ buf - ¼áßß¿ó ñ½∩ »α¿Ñ¼á ñá¡¡δσ, length - «ª¿ñáѼδ⌐ «íΩѼ ñá¡¡δσ, count -
  1757. ¬«½¿τÑßΓó« íá⌐Γ, Σá¬Γ¿τÑ߬¿  »ÑαÑñá¡¡δσ  »«½∞º«óáΓѽ∞߬«⌐  »α«úαá¼¼Ñ.  ö½áú¿
  1758. (flags) ¼«úπΓ íδΓ∞ πßΓá¡«ó½Ñ¡δ Γᬿ¼ «íαẫ¼, τΓ« »«ßΓπ»¿óΦÑÑ ß««íΘÑ¡¿Ñ »«ß-
  1759. ½Ñ τΓÑ¡¿∩ ¿ á¡á½¿ºá Ñú« ß«ñÑন¼«ú« ¡Ñ íπñÑΓ πñá½Ñ¡« ¿º «τÑαÑñ¿, ¿½¿ ¡áßΓα«-
  1760. Ñ¡δ ¡á »«½πτÑ¡¿Ñ ñá¡¡δσ out-of-band. é ñÑ⌐Γáúαá¼¼¡δσ óÑαß¿∩σ π¬áºá¡¡δσ Σπ¡¬-
  1761. µ¿⌐, sendto ¿ recvfrom, ó ¬áτÑßΓóÑ ñ«»«½¡¿Γѽ∞¡δσ »áαá¼ÑΓα«ó π¬áºδóáεΓß∩ áñ-
  1762. αÑßá.  Å«ß½Ñ óδ»«½¡Ñ¡¿∩ »«ñ¬½ετÑ¡¿∩ ¬ ú¡Ñºñá¼ »«Γ«¬«ó«ú« Γ¿»á »α«µÑßßδ ¼«úπΓ
  1763. ó¼ÑßΓ« Σπ¡¬µ¿⌐ send ¿ recv ¿ß»«½∞º«óáΓ∞ Σπ¡¬µ¿¿ read ¿ write. Æá¬¿¼ «íαẫ¼,
  1764. ß«ú½áß«óáó Γ¿» »α«Γ«¬«½á, ßÑαóÑαδ ¼«ú½¿ íδ  »«α«ªñáΓ∞  »α«µÑßßδ,  αáí«ΓáεΘ¿Ñ
  1765. Γ«½∞¬« ß Σπ¡¬µ¿∩¼¿ read ¿ write, ß½«ó¡« ¿¼ÑεΓ ñѽ« ß «íδτ¡δ¼¿ Σá⌐½á¼¿.
  1766.     öπ¡¬µ¿∩ shutdown ºá¬αδóáÑΓ ú¡Ñºñ«óπε ßó∩º∞:
  1767.  
  1768.     shutdown(sd,mode)
  1769.  
  1770. úñÑ mode π¬áºδóáÑΓ, ¬á¬«⌐ ¿º ßΓ«α«¡ (»«ßδ½áεΘÑ⌐, »α¿¡¿¼áεΘÑ⌐ ¿½¿ «íÑ¿¼ ó¼Ñß-
  1771. ΓÑ)  «Γ¡δ¡Ñ  ºá»αÑΘÑ¡«  πτáßΓ¿Ñ ó »α«µÑßßÑ »ÑαÑñáτ¿ ñá¡¡δσ. öπ¡¬µ¿∩ ß««íΘáÑΓ
  1772. ¿ß»«½∞ºπѼ«¼π »α«Γ«¬«½π « ºáóÑαΦÑ¡¿¿ ßÑá¡ßá ßÑΓÑó«ú« óºá¿¼«ñÑ⌐ßΓó¿∩,  «ßΓáó-
  1773. ½∩∩,  ΓѼ  ¡Ñ  ¼Ñ¡ÑÑ,  ñÑß¬α¿»Γ«αδ ú¡Ñºñ ó ¡Ñ»α¿¬«ß¡«óÑ¡¡«ßΓ¿. Äßó«í«ªñáÑΓß∩
  1774. ñÑß¬α¿»Γ«α ú¡Ñºñá Γ«½∞¬« ó αѺπ½∞ΓáΓÑ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ close.
  1775.     æ¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ getsockname »«½πτáÑΓ ¿¼∩ ú¡Ñºñ«ó«⌐ ßó∩º¿,  πßΓá¡«ó½Ñ¡-
  1776. ¡«⌐ αá¡ÑÑ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ bind:
  1777.  
  1778.     getsockname(sd,name,length);
  1779.  
  1780.     öπ¡¬µ¿¿  getsockopt  ¿ setsockopt »«½πτáεΓ ¿ πßΓá¡áó½¿óáεΓ º¡áτÑ¡¿∩ αáº-
  1781. ½¿τ¡δσ ßó∩ºá¡¡δσ ß ú¡Ñºñ«¼ »áαá¼ÑΓα«ó ó ß««ΓóÑΓßΓó¿¿ ß Γ¿»«¼ ñ«¼Ñ¡á ¿ »α«Γ«-
  1782. ¬«½á.
  1783.     Éáßß¼«Γα¿¼ «íß½πª¿óáεΘπε »α«úαá¼¼π,  »αÑñßΓáó½Ñ¡¡πε  ¡á  É¿ßπ¡¬Ñ  11.20.
  1784. Åα«µÑßß  ß«ºñáÑΓ ó ñ«¼Ñ¡Ñ "UNIX system" ú¡Ñºñ« »«Γ«¬«ó«ú« Γ¿»á ¿ »α¿ßóá¿óáÑΓ
  1785. Ñ¼π ¿¼∩ sockname. çáΓѼ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ listen πßΓá¡áó½¿óáÑΓß∩ ñ½¿¡á  «τÑ-
  1786. αÑñ¿  »«ßΓπ»áεΘ¿σ ß««íΘÑ¡¿⌐ ¿ ¡áτ¿¡áÑΓß∩ µ¿¬½ «ª¿ñá¡¿∩ »«ßΓπ»½Ñ¡¿∩ ºá»α«ß«ó.
  1787. öπ¡¬µ¿∩ accept »α¿«ßΓá¡áó½¿óáÑΓ ßó«Ñ óδ»«½¡Ñ¡¿Ñ ñ« ΓÑσ »«α, »«¬á  »α«Γ«¬«½«¼
  1788. ¡Ñ íπñÑΓ ºáαÑú¿ßΓα¿α«óá¡ ºá»α«ß ¡á »«ñ¬½ετÑ¡¿Ñ ¬ ú¡Ñºñπ ß «º¡áτÑ¡¡δ¼ ¿¼Ñ¡Ñ¼;
  1789. »«ß½Ñ  φΓ«ú« Σπ¡¬µ¿∩ ºáóÑαΦáÑΓß∩, ó«ºóαáΘá∩ »«ßΓπ»¿óΦѼπ ºá»α«ßπ ¡«óδ⌐ ñÑ߬-
  1790. α¿»Γ«α ú¡Ñºñá. Åα«µÑßß-ßÑαóÑα »«α«ªñáÑΓ »«Γ«¼¬á, τÑαѺ ¬«Γ«α«ú«  íπñÑΓ  »«ñ-
  1791. ñÑনóáΓ∞ß∩ ßó∩º∞ ß »α«µÑßß«¼-¬½¿Ñ¡Γ«¼; α«ñ¿Γѽ∞ ¿ »«Γ«¼«¬ »α¿ φΓ«¼ ºá¬αδóá-
  1792. εΓ  ßó«¿ ñÑß¬α¿»Γ«αδ, τΓ«íδ «¡¿ ¡Ñ ßΓᡫ󿽿ß∞ »«¼Ñσ«⌐ ñ½∩ ¬«¼¼π¡¿¬áµ¿«¡¡«ú«
  1793. ΓαáΣΣ¿¬á ñαπú«ú« »α«µÑßßá. Åα«µÑßß-»«Γ«¼«¬ óÑñÑΓ αáºú«ó«α ß ¬½¿Ñ¡Γ«¼  ¿  ºá-
  1794. óÑαΦáÑΓß∩ »«ß½Ñ óδσ«ñá ¿º Σπ¡¬µ¿¿ read. Åα«µÑßß-ßÑαóÑα ó«ºóαáΘá-
  1795. ÑΓß∩ ¬ ¡áτá½π µ¿¬½á ¿ ªñÑΓ »«ßΓπ»½Ñ¡¿∩ ß½ÑñπεΘÑú« ºá»α«ßá ¡á »«ñ¬½ετÑ¡¿Ñ.
  1796.     ìá  É¿ßπ¡¬Ñ  11.21  »«¬áºá¡  »α¿¼Ñα »α«µÑßßá-¬½¿Ñ¡Γá, óÑñπΘÑú« «íΘÑ¡¿Ñ ß
  1797. ßÑαóÑα«¼. è½¿Ñ¡Γ ß«ºñáÑΓ ú¡Ñºñ« ó Γ«¼ ªÑ ñ«¼Ñ¡Ñ, τΓ« ¿  ßÑαóÑα,  ¿  »«ßδ½áÑΓ
  1798. ºá»α«ß  ¡á  »«ñ¬½ετÑ¡¿Ñ ¬ ú¡Ñºñπ ß ¿¼Ñ¡Ñ¼ sockname. é αѺπ½∞ΓáΓÑ »«ñ¬½ετÑ¡¿∩
  1799.  
  1800.  
  1801.                                     358
  1802.  
  1803.     ┌────────────────────────────────────────────────────────────┐
  1804.     │ #include <sys/types.h>                                     │
  1805.     │ #include <sys/socket.h>                                    │
  1806.     │                                                            │
  1807.     │ main()                                                     │
  1808.     │ {                                                          │
  1809.     │     int sd,ns;                                             │
  1810.     │     char buf[256];                                         │
  1811.     │     struct sockaddr sockaddr;                              │
  1812.     │     int fromlen;                                           │
  1813.     │                                                            │
  1814.     │     sd = socket(AF_UNIX,SOCK_STREAM,0);                    │
  1815.     │                                                            │
  1816.     │     /* ¿¼∩ ú¡Ñºñá - ¡Ñ ¼«ªÑΓ ó¬½ετáΓ∞ »πßΓ«⌐ ß¿¼ó«½ */     │
  1817.     │     bind(sd,"sockname",sizeof("sockname") - 1);            │
  1818.     │     listen(sd,1);                                          │
  1819.     │                                                            │
  1820.     │     for (;;)                                               │
  1821.     │     {                                                      │
  1822.     │                                                            │
  1823.     │          ns = accept(sd,&sockaddr,&fromlen);               │
  1824.     │          if (fork() == 0)                                  │
  1825.     │          {                                                 │
  1826.     │              /* »«Γ«¼«¬ */                                 │
  1827.     │              close(sd);                                    │
  1828.     │              read(ns,buf,sizeof(buf));                     │
  1829.     │              printf("ßÑαóÑα τ¿ΓáÑΓ '%s'\n",buf);           │
  1830.     │              exit();                                       │
  1831.     │          }                                                 │
  1832.     │          close(ns);                                        │
  1833.     │     }                                                      │
  1834.     │ }                                                          │
  1835.     └────────────────────────────────────────────────────────────┘
  1836.  
  1837.         É¿ßπ¡«¬ 11.20. Åα«µÑßß-ßÑαóÑα ó ñ«¼Ñ¡Ñ "UNIX system"
  1838.  
  1839.     ┌────────────────────────────────────────────────────────────┐
  1840.     │ #include <sys/types.h>                                     │
  1841.     │ #include <sys/socket.h>                                    │
  1842.     │                                                            │
  1843.     │ main()                                                     │
  1844.     │ {                                                          │
  1845.     │    int sd,ns;                                              │
  1846.     │    char buf[256];                                          │
  1847.     │    struct sockaddr sockaddr;                               │
  1848.     │    int fromlen;                                            │
  1849.     │                                                            │
  1850.     │    sd = socket(AF_UNIX,SOCK_STREAM,0);                     │
  1851.     │                                                            │
  1852.     │    /* ¿¼∩ ó ºá»α«ßÑ ¡á »«ñ¬½ετÑ¡¿Ñ ¡Ñ ¼«ªÑΓ ó¬½ετáΓ∞       │
  1853.     │    /* »πßΓ«⌐ ß¿¼ó«½ */                                     │
  1854.     │    if (connect(sd,"sockname",sizeof("sockname") - 1) == -1)│
  1855.     │         exit();                                            │
  1856.     │                                                            │
  1857.     │    write(sd,"hi guy",6);                                   │
  1858.     │ }                                                          │
  1859.     └────────────────────────────────────────────────────────────┘
  1860.  
  1861.          É¿ßπ¡«¬ 11.21. Åα«µÑßß-¬½¿Ñ¡Γ ó ñ«¼Ñ¡Ñ "UNIX system"
  1862.  
  1863.                                     359
  1864.  
  1865.  
  1866.  
  1867. »α«µÑßß-¬½¿Ñ¡Γ »«½πτáÑΓ ó¿αΓπá½∞¡δ⌐ ¬á¡á½ ßó∩º¿ ß ßÑαóÑα«¼. é  αáßß¼áΓα¿óáÑ-
  1868. ¼«¼ »α¿¼ÑαÑ ¬½¿Ñ¡Γ »ÑαÑñáÑΓ «ñ¡« ß««íΘÑ¡¿Ñ ¿ ºáóÑαΦáÑΓß∩.
  1869.     àß½¿ ßÑαóÑα «íß½πª¿óáÑΓ »α«µÑßßδ ó ßÑΓ¿, π¬áºá¡¿Ñ « Γ«¼, τΓ« ú¡Ñºñ« »α¿-
  1870. ¡áñ½Ñª¿Γ ñ«¼Ñ¡π "Internet", ¼«ª¡« ßñѽáΓ∞ ß½ÑñπεΘ¿¼ «íαẫ¼:
  1871.  
  1872.     socket(AF_INET,SOCK_STREAM,0);
  1873.  
  1874. ¿  ßó∩ºáΓ∞ß∩ ß ßÑΓÑóδ¼ áñαÑß«¼, »«½πτÑ¡¡δ¼ «Γ ßÑαóÑαá. é ß¿ßΓѼѠBSD ¿¼ÑεΓß∩
  1875. í¿í½¿«ΓÑτ¡δÑ Σπ¡¬µ¿¿, óδ»«½¡∩εΘ¿Ñ φΓ¿ ñÑ⌐ßΓó¿∩. éΓ«α«⌐  »áαá¼ÑΓα  óδºδóáѼ«⌐
  1876. ¬½¿Ñ¡Γ«¼ Σπ¡¬µ¿¿ connect ß«ñÑαª¿Γ áñαÑß¡πε ¿¡Σ«α¼áµ¿ε, ¡Ñ«íσ«ñ¿¼πε ñ½∩ ¿ñÑ¡-
  1877. Γ¿Σ¿¬áµ¿¿ ¼áΦ¿¡δ ó ßÑΓ¿ (¿½¿ áñαÑßá ¼áαΦαπΓ«ó »«ß佬¿ ß««íΘÑ¡¿⌐ τÑαѺ »α«¼Ñ-
  1878. ªπΓ«τ¡δÑ ¼áΦ¿¡δ), á ΓᬪѠñ«»«½¡¿Γѽ∞¡πε ¿¡Σ«α¼áµ¿ε, ¿ñÑ¡Γ¿Σ¿µ¿απεΘπε »α¿Ñ¼-
  1879. ¡«Ñ  ú¡Ñºñ« ¼áΦ¿¡δ-áñαÑßáΓá. àß½¿ ßÑαóÑαπ ¡πª¡« «ñ¡«óαѼѡ¡« ß½Ññ¿Γ∞ ºá ß«ß-
  1880. Γ«∩¡¿Ñ¼ ßÑΓ¿ ¿ óδ»«½¡Ñ¡¿Ñ¼ ½«¬á½∞¡δσ »α«µÑßß«ó, «¡ ¿ß»«½∞ºπÑΓ ñóá ú¡Ñºñá ¿ ß
  1881. »«¼«Θ∞ε Σπ¡¬µ¿¿ select «»αÑñѽ∩ÑΓ, ß ¬á¬¿¼ ¬½¿Ñ¡Γ«¼ πßΓá¡áó½¿óáÑΓß∩ ßó∩º∞  ó
  1882. ñá¡¡δ⌐ ¼«¼Ñ¡Γ.
  1883.  
  1884.  
  1885.     E11.5 é¢éÄä¢F
  1886.  
  1887.     îδ  αáßß¼«Γαѽ¿  ¡Ñ߬«½∞¬« Σ«α¼ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó. ÅÑαó«⌐ Σ«α¼«⌐,
  1888. »«½«ª¿óΦÑ⌐ ¡áτὫ «íßπªñÑ¡¿ε, ∩ó¿½áß∞ Γαáßß¿α«ó¬á »α«µÑßß«ó - óºá¿¼«ñÑ⌐ßΓó¿Ñ
  1889. ñóπσ »α«µÑßß«ó, óδßΓπ»áεΘÑÑ ó ¬áτÑßΓóÑ »«½Ñº¡«ú« ßαÑñßΓóá «Γ½áñ¬¿  »α«úαá¼¼.
  1890. Åα¿  óßÑσ ßó«¿σ »αÑ¿¼πΘÑßΓóáσ Γαáßß¿α«ó¬á »α«µÑßß«ó ß »«¼«Θ∞ε Σπ¡¬µ¿¿ ptrace
  1891. óßÑ ªÑ ñ«ßΓáΓ«τ¡« ñ«α«ú«ßΓ«∩ΘÑÑ ¿ »α¿¼¿Γ¿ó¡«Ñ ¼Ñα«»α¿∩Γ¿Ñ, »«ß¬«½∞¬π ºá «ñ¿¡
  1892. ßÑá¡ß Σπ¡¬µ¿∩ ß»«ß«í¡á »ÑαÑñáΓ∞ ßΓα«ú« «úαá¡¿τÑ¡¡δ⌐ «íΩѼ ñá¡¡δσ,  ΓαÑíπÑΓß∩
  1893. í«½∞Φ«Ñ  ¬«½¿τÑßΓó«  »ÑαѬ½ετÑ¡¿⌐  ¬«¡ΓѬßΓá,  óºá¿¼«ñÑ⌐ßΓó¿Ñ «úαá¡¿τ¿óáÑΓß∩
  1894. Γ«½∞¬« Σ«α¼«⌐ «Γ¡«ΦÑ¡¿⌐ α«ñ¿Γѽ∞-»«Γ«¼«¬, ¿ ¡á¬«¡Ñµ, ßá¼á Γαáßß¿α«ó¬á »α«¿º-
  1895. ó«ñ¿Γß∩ Γ«½∞¬« »« «í«εñ¡«¼π ß«ú½áß¿ε πτáßΓóπεΘ¿σ ó ¡Ñ⌐ »α«µÑßß«ó. é óÑαß¿¿ V
  1896. ß¿ßΓѼδ UNIX ¿¼ÑÑΓß∩ »á¬ÑΓ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó (IPC), ó¬½ετáεΘ¿⌐ ó ßÑí∩
  1897. ¼Ñσá¡¿º¼δ «í¼Ñ¡á ß««íΘÑ¡¿∩¼¿, αáí«Γδ ß ßѼáΣ«αἿ ¿ αáºñѽѡ¿∩ »á¼∩Γ¿. è ß«-
  1898. ªá½Ñ¡¿ε, óßÑ φΓ¿ ¼Ñσá¡¿º¼δ ¿¼ÑεΓ πº¬«ß»Ñµ¿á½∞¡«Ñ ¡áº¡áτÑ¡¿Ñ, ¡Ñ ¿¼ÑεΓ  σ«α«-
  1899. ΦÑ⌐  ßΓδ¬«ó¬¿ ß ñαπú¿¼¿ φ½Ñ¼Ñ¡ΓἿ «»Ñαᵿ«¡¡«⌐ ß¿ßΓÑ¼δ ¿ ¡Ñ ñÑ⌐ßΓóπεΓ ó ßÑ-
  1900. Γ¿. ÆÑ¼ ¡Ñ ¼Ñ¡ÑÑ, «¡¿ ¿ß»«½∞ºπεΓß∩ ó« ¼¡«ú¿σ »α¿½«ªÑ¡¿∩σ ¿  »«  ßαáó¡Ñ¡¿ε  ß
  1901. ñαπú¿¼¿ ßσѼἿ «Γ½¿τáεΓß∩ í«½ÑÑ óδß«¬«⌐ φΣΣÑ¬Γ¿ó¡«ßΓ∞ε.
  1902.     æ¿ßΓѼᠠUNIX »«ññÑনóáÑΓ Φ¿α«¬¿⌐ ß»Ñ¬Γα óδτ¿ß½¿Γѽ∞¡δσ ßÑΓÑ⌐. Æαáñ¿µ¿-
  1903. «¡¡δÑ ¼ÑΓ«ñδ ß«ú½áß«óá¡¿∩ »α«Γ«¬«½«ó ó ß¿½∞¡«⌐ ßΓѻѡ¿ »«½áúáεΓß∩ ¡á  »«¼«Θ∞
  1904. ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ioctl, «ñ¡á¬« ó αạδσ Γ¿»áσ ßÑΓÑ⌐ «¡¿ αÑ὿ºπεΓß∩ »«-αáº-
  1905. ¡«¼π. é ß¿ßΓѼѠBSD ¿¼ÑεΓß∩ ß¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ ñ½∩ αáí«Γδ ß ú¡ÑºñἿ, »«ññÑα-
  1906. ª¿óáεΘ¿Ñ  í«½ÑÑ π¡¿óÑαßá½∞¡πε ßΓαπ¬Γπαπ ßÑΓÑó«ú« óºá¿¼«ñÑ⌐ßΓó¿∩. é íπñπΘѼ ó
  1907. óÑαß¿ε V »αÑñ»«½áúáÑΓß∩ ó¬½ετ¿Γ∞ «»¿ßá¡¡δ⌐ ó ú½áóÑ  10  »«Γ«¬«óδ⌐  ¼Ñσá¡¿º¼,
  1908. »«óδΦáεΘ¿⌐ ß«ú½áß«óá¡¡«ßΓ∞ αáí«Γδ ó ßÑΓ¿.
  1909.  
  1910.  
  1911.     E11.6 ôÅÉÇåìàìêƒF
  1912.  
  1913.   1. ùΓ« »α«¿º«⌐ñÑΓ ó Γ«¼ ß½πτáÑ, Ñß½¿ ó »α«úαἼѠdebug íπñÑΓ «ΓßπΓßΓó«óáΓ∞
  1914.      ó맮ó Σπ¡¬µ¿¿ wait (É¿ßπ¡«¬ 11.3) ? (ìá¼Ñ¬: ó«º¼«ª¡δ ñóá ¿ßσ«ñá.)
  1915.   2.  æ  »«¼«Θ∞ε  Σπ¡¬µ¿¿  ptrace  «Γ½áñτ¿¬ ßτ¿ΓδóáÑΓ ñá¡¡δÑ ¿º »α«ßΓαá¡ßΓóá
  1916.      Γαáßß¿απѼ«ú« »α«µÑßßá »« «ñ¡«¼π ß½«óπ ºá «ñ¡π «»Ñαᵿε. èᬿѠ ¿º¼Ñ¡Ñ-
  1917.      ¡¿∩ ß½ÑñπÑΓ »α«¿ºóÑßΓ¿ ó ∩ñαÑ «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼδ ñ½∩ Γ«ú«, τΓ«íδ πóÑ-
  1918.      ½¿τ¿Γ∞ ¬«½¿τÑßΓó« ßτ¿ΓδóáѼδσ ß½«ó ? èᬿѠ¿º¼Ñ¡Ñ¡¿∩ »α¿ φΓ«¼ ¡Ñ«íσ«ñ¿-
  1919.      ¼« ßñѽáΓ∞ ó ßἫ⌐ Σπ¡¬µ¿¿ ptrace ?
  1920.   3.  ÉáßΦ¿α∞ΓÑ  «í½áßΓ∞ ñÑ⌐ßΓó¿∩ Σπ¡¬µ¿¿ ptrace Γá¬, τΓ«íδ ó ¬áτÑßΓóÑ »áαá-
  1921.      ¼ÑΓαá pid ¼«ª¡« í佫 π¬áºδóáΓ∞ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑßßá,  ¡Ñ  ∩ó½∩εΘÑú«ß∩
  1922.      »«Γ«¼¬«¼ ΓѬπΘÑú« »α«µÑßßá. Å«ñπ¼á⌐ΓÑ ¡áñ ó«»α«ßἿ, ßó∩ºá¡¡δ¼¿ ß ºáΘ¿-
  1923.      Γ«⌐ ¿¡Σ«α¼áµ¿¿: Åα¿ ¬á¬¿σ «íßΓ«∩Γѽ∞ßΓóáσ »α«µÑßßπ ¼«ªÑΓ íδΓ∞ »«ºó«½Ñ¡«
  1924.  
  1925.                                     360
  1926.  
  1927.      τ¿ΓáΓ∞ ñá¡¡δÑ ¿º áñαÑß¡«ú« »α«ßΓαá¡ßΓóá ñαπú«ú«, »α«¿ºó«½∞¡«ú« »α«µÑßßá
  1928.      ?  Åα¿ ¬á¬¿σ «íßΓ«∩Γѽ∞ßΓóáσ αáºαÑΦáÑΓß∩ óÑßΓ¿ ºá»¿ß∞ ó áñαÑß¡«Ñ »α«ßΓ-
  1929.      αá¡ßΓó« ñαπú«ú« »α«µÑßßá ?
  1930.   4. Äαúá¡¿ºπ⌐ΓÑ ¿º Σπ¡¬µ¿⌐ αáí«Γδ ß ß««íΘÑ¡¿∩¼¿ í¿í½¿«ΓÑ¬π »«½∞º«óáΓѽ∞߬«-
  1931.      ú« πα«ó¡∩ ß ¿ß»«½∞º«ó᡿Ѽ «íδτ¡δσ Σá⌐½«ó, »«¿¼Ñ¡«óá¡¡δσ ¬á¡á½«ó ¿ φ½Ñ-
  1932.      ¼Ñ¡Γ«ó í½«¬¿α«ó¬¿. æ«ºñáóá∩  «τÑαÑñ∞  ß««íΘÑ¡¿⌐,  «Γ¬α«⌐ΓÑ  π»αáó½∩εΘ¿⌐
  1933.      Σá⌐½  ñ½∩ ºá»¿ß¿ ó ¡Ñú« ¿¡Σ«α¼áµ¿¿ « ß«ßΓ«∩¡¿¿ «τÑαÑñ¿; ºáΘ¿Γ¿ΓÑ Σá⌐½ ß
  1934.      »«¼«Θ∞ε ßαÑñßΓó ºáσóáΓá Σá⌐½«ó ¿ ñαπú¿σ πñ«í¡δσ ñ½∩ óáß ¼Ñσá¡¿º¼«ó. Å«-
  1935.      ßδ½á∩ ß««íΘÑ¡¿Ñ ñá¡¡«ú« Γ¿»á, ß«ºñáóá⌐ΓÑ »«¿¼Ñ¡«óá¡¡δ⌐ ¬á¡á½  ñ½∩  óßÑσ
  1936.      ß««íΘÑ¡¿⌐ φΓ«ú« Γ¿»á, Ñß½¿ Γᬫú« ¬á¡á½á ÑΘÑ ¡Ñ í佫, ¿ »ÑαÑñáóá⌐ΓÑ ß«-
  1937.      «íΘÑ¡¿Ñ τÑαѺ ¡Ñú« (ß »«ñßτÑΓ«¼ »ÑαÑñá¡¡δσ íá⌐Γ). ô»αáó½∩εΘ¿⌐ Σá⌐½ ñ«½-
  1938.      ªÑ¡ ß««Γ¡«ß¿Γ∞ Γ¿» ß««íΘÑ¡¿∩ ß ¿¼Ñ¡Ñ¼ »«¿¼Ñ¡«óá¡¡«ú« ¬á¡á½á. Åα¿ τΓÑ¡¿¿
  1939.      ß««íΘÑ¡¿⌐ π»αáó½∩εΘ¿⌐ Σá⌐½ ¡á»αáó½∩ÑΓ »α«µÑßß ¬ ß««ΓóÑΓßΓóπεΘÑ¼π »«¿¼Ñ-
  1940.      ¡«óá¡¡«¼π  ¬á¡á½π. æαáó¡¿ΓÑ φΓπ ßσѼπ ß ¼Ñσá¡¿º¼«¼, «»¿ßá¡¡δ¼ ó ¡áßΓ«∩-
  1941.      ΘÑ⌐ ú½áóÑ, »« φΣΣÑ¬Γ¿ó¡«ßΓ¿, ß½«ª¡«ßΓ¿ αÑ὿ºáµ¿¿ ¿ Σπ¡¬µ¿«¡á½∞¡δ¼ ó«º-
  1942.      ¼«ª¡«ßΓ∩¼.
  1943.   5. èᬿѠñÑ⌐ßΓó¿∩ »δΓáÑΓß∩ óδ»«½¡¿Γ∞ »α«úαá¼¼á, »αÑñßΓáó½Ñ¡¡á∩ ¡á  É¿ßπ¡¬Ñ
  1944.      11.22 ?
  1945.  *6.  ìá»¿Φ¿ΓÑ  »α«úαá¼¼π,  ¬«Γ«αá∩ »«ñ¬½ετá½á íδ «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿
  1946.      ß½¿Φ¬«¼ í½¿º¬« ¬ óÑαΦ¿¡Ñ ßΓѬᠺáñáτ¿ ¿ »«ºó«½∩½á íδ ßΓѬπ »α¿ πóѽ¿τÑ-
  1947.      ¡¿¿ »ÑαÑßѬáΓ∞ úαá¡¿µπ αáºñѽ∩Ѽ«⌐ «í½áßΓ¿. é ¬á¬«⌐  ¼«¼Ñ¡Γ  »α«¿º«⌐ñÑΓ
  1948.      ΣáΓá½∞¡á∩ «Φ¿í¬á »á¼∩Γ¿ ?
  1949.   7.   êß»«½∞ºπ⌐ΓÑ  ó  »α«úαá¼¼Ñ,  »αÑñßΓáó½Ñ¡¡«⌐  ¡á  É¿ßπ¡¬Ñ  11.14,  Σ½áú
  1950.      IPC_NOWAIT, αÑ὿ºπ∩ πß½«ó¡δ⌐ Γ¿» ßѼáΣ«αá. Åα«ñѼ«¡ßΓα¿απ⌐ΓÑ,  ¬á¬  ºá
  1951.      ßτÑΓ φΓ«ú« ¼«ª¡« ¿ºíѪáΓ∞ ó«º¡¿¬¡«óÑ¡¿∩ óºá¿¼¡δσ í½«¬¿α«ó«¬.
  1952.   8. Å«¬áª¿ΓÑ, ¬á¬ «»Ñαᵿ¿ ¡áñ ßѼáΣ«αἿ Γ¿»á P ¿ V αÑ὿ºπεΓß∩ »α¿ αáí«ΓÑ
  1953.      ß  »«¿¼Ñ¡«óá¡¡δ¼¿  ¬á¡á½á¼¿. èᬠíδ óδ αÑ὿º«ó὿ «»Ñαᵿε P πß½«ó¡«ú«
  1954.      Γ¿»á ?
  1955.   9. æ«ßΓáó∞ΓÑ »α«úαá¼¼δ ºáσóáΓá αÑßπαß«ó,  ¿ß»«½∞ºπεΘ¿Ñ  (á)  »«¿¼Ñ¡«óá¡¡δÑ
  1956.      ¬á¡á½δ,  (í) ß¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ creat ¿ unlink, (ó) Σπ¡¬µ¿¿ «í¼Ñ¡á ß««í-
  1957.      ΘÑ¡¿∩¼¿. Åα«óÑñ¿ΓÑ ßαáó¡¿Γѽ∞¡δ⌐ á¡á½¿º ¿σ φΣΣÑ¬Γ¿ó¡«ßΓ¿.
  1958.  10. ìá »αá¬Γ¿τÑ߬¿σ »α¿¼Ñαáσ αáí«Γδ ß »«¿¼Ñ¡«óá¡¡δ¼¿ ¬á¡á½á¼¿ ßαáó¡¿ΓÑ  φΣ-
  1959.      ΣÑ¬Γ¿ó¡«ßΓ∞  ¿ß»«½∞º«óá¡¿∩ Σπ¡¬µ¿⌐ «í¼Ñ¡á ß««íΘÑ¡¿∩¼¿, ß «ñ¡«⌐ ßΓ«α«¡δ,
  1960.      ß Σπ¡¬µ¿∩¼¿ read ¿ write, ß ñαπú«⌐.
  1961.  11. æαáó¡¿ΓÑ ¡á ¬«¡¬αÑΓ¡δσ »α«úαá¼¼áσ ß¬«α«ßΓ∞ »ÑαÑñáτ¿ ñá¡¡δσ »α¿ αáí«ΓÑ ß
  1962.      αáºñѽ∩Ѽ«⌐ »á¼∩Γ∞ε ¿ »α¿ ¿ß»«½∞º«óá¡¿¿ ¼Ñσá¡¿º¼á  «í¼Ñ¡á  ß««íΘÑ¡¿∩¼¿.
  1963.      Åα«úαá¼¼δ,  ¿ß»«½∞ºπεΘ¿Ñ αáºñѽ∩Ѽπε »á¼∩Γ∞, ñ½∩ ß¿¡σα«¡¿ºáµ¿¿ ºáóÑαΦÑ-
  1964.      ¡¿∩ «»Ñαᵿ⌐ τΓÑ¡¿∩-ºá»¿ß¿ ñ«½ª¡δ «»¿αáΓ∞ß∩ ¡á ßѼáΣ«αδ.
  1965.  
  1966.     ┌────────────────────────────────────────────────────────────┐
  1967.     │ #include <sys/types.h>                                     │
  1968.     │ #include <sys/ipc.h>                                       │
  1969.     │ #include <sys/msg.h>                                       │
  1970.     │ #define ALLTYPES 0                                         │
  1971.     │                                                            │
  1972.     │ main()                                                     │
  1973.     │ {                                                          │
  1974.     │    struct msgform                                          │
  1975.     │    {                                                       │
  1976.     │        long mtype;                                         │
  1977.     │        char mtext[1024];                                   │
  1978.     │    } msg;                                                  │
  1979.     │    register unsigned int id;                               │
  1980.     │                                                            │
  1981.     │    for (id = 0; ; id++)                                    │
  1982.     │        while (msgrcv(id,&msg,1024,ALLTYPES,IPC_NOWAIT) > 0)│
  1983.     │              ;                                             │
  1984.     │ }                                                          │
  1985.     └────────────────────────────────────────────────────────────┘
  1986.  
  1987.                                     361
  1988.