home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-11-06 | 115.6 KB | 1,988 lines |
-
-
-
- âïÇéÇ 11
-
- EéçÇêîÄäàëæÆéêà ÅÉÄûàææÄéF
-
-
-
-
- ì὿τ¿Ñ ¼Ñσá¡¿º¼«ó óºá¿¼«ñÑ⌐ßΓó¿∩ ñáÑΓ »α«¿ºó«½∞¡δ¼ »α«µÑßßἠ󫺼«ª-
- ¡«ßΓ∞ «ßπΘÑßΓó½∩Γ∞ «í¼Ñ¡ ñá¡¡δ¼¿ ¿ ß¿¡σα«¡¿º¿α«óáΓ∞ ßó«Ñ óδ»«½¡Ñ¡¿Ñ ß ñαπú¿-
- ¼¿ »α«µÑßßἿ. îδ πªÑ αáßß¼«Γαѽ¿ ¡Ñ߬«½∞¬« Σ«α¼ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó,
- Γá¬¿Ñ ¬á¬ ¬á¡á½∞¡á∩ ßó∩º∞, ¿ß»«½∞º«óá¡¿Ñ »«¿¼Ñ¡«óá¡¡δσ ¬á¡á½«ó ¿ »«ß佬á
- ß¿ú¡á½«ó. èá¡á½δ (¡Ñ»«¿¼Ñ¡«óá¡¡δÑ) ¿¼ÑεΓ ¡Ññ«ßΓáΓ«¬, ßó∩ºá¡¡δ⌐ ß ΓѼ, τΓ«
- «¡¿ ¿ºóÑßΓ¡δ Γ«½∞¬« »«Γ«¼¬á¼ »α«µÑßßá, óδºóáóΦÑú« ß¿ßΓѼ¡πε Σπ¡¬µ¿ε pipe: ¡Ñ
- ¿¼ÑεΘ¿Ñ α«ñßΓóÑ¡¡δσ ßó∩ºÑ⌐ »α«µÑßßδ ¡Ñ ¼«úπΓ óºá¿¼«ñÑ⌐ßΓó«óáΓ∞ ¼Ñªñπ ß«í«⌐ ß
- »«¼«Θ∞ε ¡Ñ»«¿¼Ñ¡«óá¡¡δσ ¬á¡á½«ó. ìÑß¼«Γα∩ ¡á Γ«, τΓ« »«¿¼Ñ¡«óá¡¡δÑ ¬á¡á½δ
- »«ºó«½∩εΓ óºá¿¼«ñÑ⌐ßΓó«óáΓ∞ ¼Ñªñπ ß«í«⌐ »α«µÑßßá¼, ¡Ñ ¿¼ÑεΘ¿¼ α«ñßΓóÑ¡¡δσ
- ßó∩ºÑ⌐, «¡¿ ¡Ñ ¼«úπΓ ¿ß»«½∞º«óáΓ∞ß∩ ¡¿ ó ßÑΓ¿ (ß¼. ú½áóπ 13), ¡¿ ó «αúá¡¿ºá-
- µ¿¿ ¼¡«ªÑßΓóÑ¡¡δσ ßó∩ºÑ⌐ ¼Ñªñπ αẽ¿τ¡δ¼¿ úαπ»»á¼¿ óºá¿¼«ñÑ⌐ßΓóπεΘ¿σ »α«µÑß-
- ß«ó: »«¿¼Ñ¡«óá¡¡δ⌐ ¬á¡á½ ¡Ñ »«ññáÑΓß∩ Γᬫ¼π ¼π½∞Γ¿»½Ñ¬ß¿α«óá¡¿ε, »α¿ ¬«Γ«-
- α«¼ π ¬áªñ«⌐ »áαδ óºá¿¼«ñÑ⌐ßΓóπεΘ¿σ »α«µÑßß«ó ¿¼Ñ½ß∩ íδ ßó«⌐ óδñѽѡ¡δ⌐ ¬á-
- ¡á½. Åα«¿ºó«½∞¡δÑ »α«µÑßßδ ¼«úπΓ Γá¬ªÑ ßó∩ºδóáΓ∞ß∩ ¼Ñªñπ ß«í«⌐ í½áú«ñáα∩ »«-
- ßδ½¬Ñ ß¿ú¡á½«ó ß »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ kill, «ñ¡á¬« Γá¬«Ñ "ß««íΘÑ¡¿Ñ"
- ß«ßΓ«¿Γ ¿º «ñ¡«ú« Γ«½∞¬« ¡«¼Ñαá ß¿ú¡á½á.
- é ñá¡¡«⌐ ú½áóÑ «»¿ßδóáεΓß∩ ñαπú¿Ñ Σ«α¼δ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó. é ¡á-
- τá½Ñ αÑτ∞ ¿ñÑΓ « Γαáßß¿α«ó¬Ñ »α«µÑßß«ó, « Γ«¼, ¬á¬¿¼ «íαẫ¼ «ñ¿¡ »α«µÑßß
- ß½Ññ¿Γ ºá σ«ñ«¼ óδ»«½¡Ñ¡¿∩ ñαπú«ú« »α«µÑßßá, ºáΓѼ αáßß¼áΓα¿óáÑΓß∩ »á¬ÑΓ
- IPC: ß««íΘÑ¡¿∩, αáºñѽ∩Ѽá∩ »á¼∩Γ∞ ¿ ßѼáΣ«αδ. äѽáÑΓß∩ «íº«α Γαáñ¿µ¿«¡¡δσ
- ¼ÑΓ«ñ«ó ßÑΓÑó«ú« óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó, óδ»«½¡∩εΘ¿σß∩ ¡á αạδσ ¼áΦ¿¡áσ,
- ¿, ¡á¬«¡Ñµ, ñáÑΓß∩ »αÑñßΓáó½Ñ¡¿Ñ « "ú¡Ñºñáσ", »α¿¼Ñ¡∩εΘ¿σß∩ ó ß¿ßΓÑ¼Ñ BSD.
- é«»α«ßδ ßÑΓÑó«ú« óºá¿¼«ñÑ⌐ßΓó¿∩, ¿¼ÑεΘ¿Ñ ß»Ñµ¿á½∞¡δ⌐ σáαá¬ΓÑα, Γá¬¿Ñ ¬á¬
- »α«Γ«¬«½δ, áñαÑßᵿ∩ ¿ ñα., ¡Ñ αáßß¼áΓα¿óáεΓß∩, »«ß¬«½∞¬π «¡¿ óδσ«ñ∩Γ ºá
- αἬ¿ ¡áßΓ«∩ΘÑ⌐ αáí«Γδ.
-
-
- E11.1 ÆÉÇææêÉÄéèÇ ÅÉÄûàææÄéF
-
- é ß¿ßΓÑ¼Ñ UNIX ¿¼ÑÑΓß∩ »α«ßΓÑ⌐Φá∩ Σ«α¼á óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó, ¿ß-
- »«½∞ºπѼá∩ ó µÑ½∩σ «Γ½áñ¬¿, - Γαáßß¿α«ó¬á »α«µÑßß«ó. Åα«µÑßß-«Γ½áñτ¿¬, ¡á»-
-
- ┌───────────────────────────────────────────────────────┐
- │ if ((pid = fork()) == 0) │
- │ { │
- │ /* »«Γ«¼«¬ - Γαáßß¿απѼδ⌐ »α«µÑßß */ │
- │ ptrace(0,0,0,0); │
- │ exec("¿¼∩ Γαáßß¿απѼ«ú« »α«µÑßßá"); │
- │ } │
- │ /* »α«ñ«½ªÑ¡¿Ñ óδ»«½¡Ñ¡¿∩ »α«µÑßßá-«Γ½áñτ¿¬á */ │
- │ for (;;) │
- │ { │
- │ wait((int *) 0); │
- │ read(óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩ ñ½∩ Γαáßß¿α«ó¬¿ ¬«¼á¡ñ) │
- │ ptrace(cmd,pid,...); │
- │ if (πß½«ó¿Ñ ºáóÑαΦÑ¡¿∩ Γαáßß¿α«ó¬¿) │
- │ break; │
- │ } │
- └───────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.1. æΓαπ¬Γπαá »α«µÑßßá «Γ½áñ¬¿
-
- 330
-
-
-
- α¿¼Ñα sdb, »«α«ªñáÑΓ Γαáßß¿απѼδ⌐ »α«µÑßß ¿ π»αáó½∩ÑΓ Ñú« óδ»«½¡Ñ¡¿Ñ¼ ß »«-
- ¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ptrace, αáßßΓáó½∩∩ ¿ ßíαáßδóá∩ ¬«¡Γα«½∞¡δÑ Γ«τ¬¿,
- ßτ¿Γδóá∩ ¿ ºá»¿ßδóá∩ ñá¡¡δÑ ó Ñú« ó¿αΓπá½∞¡«Ñ áñαÑß¡«Ñ »α«ßΓαá¡ßΓó«. Æαáßß¿-
- α«ó¬á »α«µÑßß«ó, Γᬿ¼ «íαẫ¼, ó¬½ετáÑΓ ó ßÑí∩ ß¿¡σα«¡¿ºáµ¿ε óδ»«½¡Ñ¡¿∩
- »α«µÑßßá-«Γ½áñτ¿¬á ¿ Γαáßß¿απѼ«ú« »α«µÑßßá ¿ π»αáó½Ñ¡¿Ñ óδ»«½¡Ñ¡¿Ñ¼ »«ß½Ññ-
- ¡Ñú«.
- ÅßÑóñ«»α«úαá¼¼á, »αÑñßΓáó½Ñ¡¡á∩ ¡á É¿ßπ¡¬Ñ 11.1, ¿¼ÑÑΓ Γ¿»¿τ¡πε ßΓαπ¬Γπ-
- απ «Γ½áñ«τ¡«⌐ »α«úαá¼¼δ. ÄΓ½áñτ¿¬ »«α«ªñáÑΓ ¡«óδ⌐ »α«µÑßß, ºá»π߬áεΘ¿⌐ ß¿ß-
- ΓѼ¡πε Σπ¡¬µ¿ε ptrace, ó αѺπ½∞ΓáΓÑ τÑú« ó ß««ΓóÑΓßΓóπεΘÑ⌐ »α«µÑßßπ-»«Γ«¼¬π
- ºá»¿ß¿ Γáí½¿µδ »α«µÑßß«ó ∩ñα« πßΓá¡áó½¿óáÑΓ í¿Γ Γαáßß¿α«ó¬¿. Åα«µÑßß-»«Γ«¼«¬
- »αÑñ¡áº¡áτÑ¡ ñ½∩ ºá»π߬á (exec) Γαáßß¿απѼ«⌐ »α«úαá¼¼δ. ìá»α¿¼Ñα, Ñß½¿ »«½∞-
- º«óáΓѽ∞ óÑñÑΓ «Γ½áñ¬π »α«úαá¼¼δ a.out, »α«µÑßß-»«Γ«¼«¬ ºá»π߬áÑΓ Σá⌐½ ß ΓѼ
- ªÑ ¿¼Ñ¡Ñ¼. ƒñα« «ΓαáíáΓδóáÑΓ Σπ¡¬µ¿ε exec «íδτ¡δ¼ »«α∩ñ¬«¼, ¡« ó Σ¿¡á½Ñ ºá-
- ¼ÑτáÑΓ, τΓ« í¿Γ Γαáßß¿α«ó¬¿ πßΓá¡«ó½Ñ¡, ¿ »«ßδ½áÑΓ »α«µÑßßπ-»«Γ«¼¬π ß¿ú¡á½
- »αÑαδóá¡¿∩. ìá óδσ«ñÑ ¿º Σπ¡¬µ¿¿ exec, ¬á¬ ¿ ¡á óδσ«ñÑ ¿º ½εí«⌐ ñαπú«⌐ Σπ¡¬-
- µ¿¿, ∩ñα« »α«óÑα∩ÑΓ ¡á½¿τ¿Ñ ß¿ú¡á½«ó, «í¡áαπª¿óáÑΓ Γ«½∞¬« τΓ« »«ß½á¡¡δ⌐ ß¿ú-
- ¡á½ »αÑαδóá¡¿∩ ¿ ¿ß»«½¡∩ÑΓ »α«úαá¼¼π Γαáßß¿α«ó¬¿ »α«µÑßßá ¬á¬ «ß«íδ⌐ ß½πτá⌐
- «íαáí«Γ¬¿ ß¿ú¡á½«ó. çá¼ÑΓ¿ó πßΓá¡«ó¬π í¿Γá Γαáßß¿α«ó¬¿, »α«µÑßß-»«Γ«¼«¬ óδ-
- ó«ñ¿Γ ßó«Ñú« α«ñ¿Γѽ∩ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá, ó ¬«Γ«α«¼ »«ß½Ññ¡¿⌐ ¡áσ«ñ¿Γ-
- ß∩ óß½ÑñßΓó¿Ñ ¿ß»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ wait, ßá¼ »ÑαÑσ«ñ¿Γ ó ß«ßΓ«∩¡¿Ñ Γαáßß¿α«ó-
- ¬¿, »«ñ«í¡«Ñ ß«ßΓ«∩¡¿ε »α¿«ßΓá¡«óá (¡« ¡Ñ »«¬áºá¡¡«Ñ ¡á ñ¿áúαá¼¼Ñ ß«ßΓ«∩¡¿⌐
- »α«µÑßßá, ß¼. É¿ßπ¡«¬ 6.1), ¿ óδ»«½¡∩ÑΓ »ÑαѬ½ετÑ¡¿Ñ ¬«¡ΓѬßΓá.
- ÆÑ¼ óαѼѡѼ ó «íδτ¡«⌐ ß¿Γπᵿ¿ »α«µÑßß-α«ñ¿Γѽ∞ («Γ½áñτ¿¬) »ÑαÑσ«ñ¿Γ ¡á
- »«½∞º«óáΓѽ∞߬¿⌐ πα«óÑ¡∞, «ª¿ñá∩ »«½πτÑ¡¿∩ ¿ºóÑßΓ¿∩ «Γ Γαáßß¿απѼ«ú« »α«µÑß-
- ßá. è«úñá ß««ΓóÑΓßΓóπεΘÑÑ ¿ºóÑßΓ¿Ñ »α«µÑßß«¼-α«ñ¿ΓѽѼ íπñÑΓ »«½πτÑ¡«, «¡
- óδ⌐ñÑΓ ¿º ß«ßΓ«∩¡¿∩ «ª¿ñá¡¿∩ (wait), »α«τ¿ΓáÑΓ (read) óóÑñÑ¡¡δÑ »«½∞º«óáΓÑ-
- ½Ñ¼ ¬«¼á¡ñδ ¿ »αÑóαáΓ¿Γ ¿σ ó ßÑα¿ε «íαáΘÑ¡¿⌐ ¬ Σπ¡¬µ¿¿ ptrace, π»αáó½∩εΘ¿σ
- Γαáßß¿α«ó¬«⌐ »α«µÑßßá-»«Γ«¼¬á. æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ptrace:
-
- ptrace(cmd,pid,addr,data);
-
- úñÑ ó ¬áτÑßΓóÑ cmd π¬áºδóáεΓß∩ αẽ¿τ¡δÑ ¬«¼á¡ñδ, ¡á»α¿¼Ñα, τΓÑ¡¿∩ ñá¡¡δσ,
- ºá»¿ß¿ ñá¡¡δσ, ó«º«í¡«ó½Ñ¡¿∩ óδ»«½¡Ñ¡¿∩ ¿ Γ.»., pid - ¿ñÑ¡Γ¿Σ¿¬áΓ«α Γαáßß¿-
- απѼ«ú« »α«µÑßßá, addr - ó¿αΓπá½∞¡δ⌐ áñαÑß ∩τÑ⌐¬¿ ó Γαáßß¿απѼ«¼ »α«µÑßßÑ,
- úñÑ íπñÑΓ »α«¿ºó«ñ¿Γ∞ß∩ τΓÑ¡¿Ñ ¿½¿ ºá»¿ß∞, data - µÑ½«Ñ º¡áτÑ¡¿Ñ, »αÑñ¡áº¡á-
- τÑ¡¡«Ñ ñ½∩ ºá»¿ß¿. é« óαѼ∩ ¿ß»«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ptrace ∩ñα« »α«óÑ-
- α∩ÑΓ, ¿¼ÑÑΓß∩ ½¿ π «Γ½áñτ¿¬á »«Γ«¼«¬ ß ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼ pid ¿ ¡áσ«ñ¿Γß∩ ½¿
- φëà »«Γ«¼«¬ ó ß«ßΓ«∩¡¿¿ Γαáßß¿α«ó¬¿, »«ß½Ñ τÑú« ºáó«ñ¿Γ ú½«íá½∞¡πε ßΓαπ¬Γπ-
- απ ñá¡¡δσ, »αÑñ¡áº¡áτÑ¡¡πε ñ½∩ »ÑαÑñáτ¿ ñá¡¡δσ ¼Ñªñπ ñóπ¼∩ »α«µÑßßἿ. ùΓ«íδ
- ñαπú¿Ñ »α«µÑßßδ, óδ»«½¡∩εΘ¿Ñ Γαáßß¿α«ó¬π, ¡Ñ ¼«ú½¿ ºáΓÑαÑΓ∞ ß«ñÑন¼«Ñ φΓ«⌐
- ßΓαπ¬Γπαδ, «¡á í½«¬¿απÑΓß∩ ∩ñα«¼, ∩ñα« ºá»¿ßδóáÑΓ ó ¡ÑÑ »áαá¼ÑΓαδ cmd, addr
- ¿ data, ó«º«í¡«ó½∩ÑΓ »α«µÑßß-»«Γ«¼«¬, »ÑαÑó«ñ¿Γ Ñú« ó ß«ßΓ«∩¡¿Ñ "ú«Γ«ó¡«ßΓ¿
- ¬ óδ»«½¡Ñ¡¿ε" ¿ »α¿«ßΓá¡áó½¿óáÑΓß∩ ñ« »«½πτÑ¡¿∩ «Γ ¡Ñú« «ΓóÑΓá. è«úñá »α«-
- µÑßß-»«Γ«¼«¬ »α«ñ«½ª¿Γ ßó«Ñ óδ»«½¡Ñ¡¿Ñ (ó αѪ¿¼Ñ ∩ñαá), «¡ ¿ß»«½¡¿Γ ß««ΓóÑΓ-
- ßΓóπεΘπε (Γαáßß¿απѼπε) ¬«¼á¡ñπ, ºá»¿ΦÑΓ αѺπ½∞ΓáΓ ó ú½«íá½∞¡πε ßΓαπ¬Γπαπ ¿
- "αáºíπñ¿Γ" «Γ½áñτ¿¬á. é ºáó¿ß¿¼«ßΓ¿ «Γ Γ¿»á ¬«¼á¡ñδ »«Γ«¼«¬ ¼«ªÑΓ ó¡«ó∞ »Ñ-
- αÑ⌐Γ¿ ó ß«ßΓ«∩¡¿Ñ Γαáßß¿α«ó¬¿ ¿ «ª¿ñáΓ∞ »«ßΓπ»½Ñ¡¿∩ ¡«ó«⌐ ¬«¼á¡ñδ ¿½¿ ªÑ
- óδ⌐Γ¿ ¿º µ¿¬½á «íαáí«Γ¬¿ ß¿ú¡á½«ó ¿ »α«ñ«½ª¿Γ∞ ßó«Ñ óδ»«½¡Ñ¡¿Ñ. Åα¿ ó«º«í-
- ¡«ó½Ñ¡¿¿ αáí«Γδ «Γ½áñτ¿¬á ∩ñα« ºá»«¼¿¡áÑΓ º¡áτÑ¡¿Ñ, ó«ºóαáΘÑ¡¡«Ñ Γαáßß¿απÑ-
- ¼δ¼ »α«µÑßß«¼, ß¡¿¼áÑΓ ß ú½«íá½∞¡«⌐ ßΓαπ¬Γπαδ í½«¬¿α«ó¬π ¿ ó«ºóαáΘáÑΓ π»αáó-
- ½Ñ¡¿Ñ »«½∞º«óáΓѽε.
- àß½¿ ó ¼«¼Ñ¡Γ »ÑαÑσ«ñá »α«µÑßßá-»«Γ«¼¬á ó ß«ßΓ«∩¡¿Ñ Γαáßß¿α«ó¬¿ «Γ½áñτ¿¬
- ¡Ñ ¡áσ«ñ¿Γß∩ ó ß«ßΓ«∩¡¿¿ »α¿«ßΓá¡«óá (wait), «¡ ¡Ñ «í¡áαπª¿Γ »«Γ«¼¬á, »«¬á
- ¡Ñ «íαáΓ¿Γß∩ ¬ Σπ¡¬µ¿¿ wait, »«ß½Ñ τÑú« ¡Ñ¼Ññ½Ñ¡¡« óδ⌐ñÑΓ ¿º Σπ¡¬µ¿¿ ¿ »α«-
- ñ«½ª¿Γ αáí«Γπ »« óδΦÑ«»¿ßá¡¡«¼π »½á¡π.
-
-
-
- 331
- ┌──────────────────────────────────────────────────────┐
- │ int data[32]; │
- │ main() │
- │ { │
- │ int i; │
- │ for (i = 0; i < 32; i++) │
- │ printf("data[%d] = %d\n@,i,data[i]); │
- │ printf("ptrace data addr Ox%x\n",data); │
- │ } │
- └──────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.2. Åα«úαá¼¼á trace (Γαáßß¿απѼδ⌐ »α«µÑßß)
-
-
- Éáßß¼«Γα¿¼ ñóÑ »α«úαá¼¼δ, »α¿óÑñÑ¡¡δÑ ¡á É¿ßπ¡¬áσ 11.2 ¿ 11.3 ¿ ¿¼Ñ¡πÑ-
- ¼δÑ trace ¿ debug, ß««ΓóÑΓßΓóÑ¡¡«. Åα¿ ºá»π᪥ »α«úαá¼¼δ trace ß ΓÑନ¡á½á
- ¼áßß¿ó data íπñÑΓ ß«ñÑαªáΓ∞ ¡π½ÑóδÑ º¡áτÑ¡¿∩; »α«µÑßß óδó«ñ¿Γ áñαÑß ¼áßß¿óá
- ¿ ºáóÑαΦáÑΓ αáí«Γπ. Åα¿ ºá»π᪥ »α«úαá¼¼δ debug ß »ÑαÑñáτÑ⌐ Ñ⌐ ó ¬áτÑßΓóÑ
- »áαá¼ÑΓαá º¡áτÑ¡¿∩, óδóÑñÑ¡¡«ú« »α«úαá¼¼«⌐ trace, »α«¿ßσ«ñ¿Γ ß½ÑñπεΘÑÑ:
- »α«úαá¼¼á ºá»«¼¿¡áÑΓ º¡áτÑ¡¿Ñ »áαá¼ÑΓαá ó »ÑαѼѡ¡«⌐ addr, ß«ºñáÑΓ ¡«óδ⌐
- »α«µÑßß, ß »«¼«Θ∞ε Σπ¡¬µ¿¿ ptrace »«ñú«Γáó½¿óáεΘ¿⌐ ßÑí∩ ¬ Γαáßß¿α«ó¬Ñ, ¿ ºá-
- »π߬áÑΓ »α«úαá¼¼π trace. ìá óδσ«ñÑ ¿º Σπ¡¬µ¿¿ exec ∩ñα« »«ßδ½áÑΓ »α«µÑß-
- ßπ-»«Γ«¼¬π (¡áº«óѼ Ñú« Γ«ªÑ trace) ß¿ú¡á½ SIGTRAP (ß¿ú¡á½ »αÑαδóá¡¿∩), »α«-
-
- ┌────────────────────────────────────────────────────────────┐
- │ #define TR_SETUP 0 │
- │ #define TR_WRITE 5 │
- │ #define TR_RESUME 7 │
- │ int addr; │
- │ │
- │ main(argc,argv) │
- │ int argc; │
- │ char *argv[]; │
- │ { │
- │ int i,pid; │
- │ │
- │ sscanf(argv[1],"%x",&addr); │
- │ │
- │ if ((pid = fork() == 0) │
- │ { │
- │ ptrace(TR_SETUP,0,0,0); │
- │ execl("trace","trace",0); │
- │ exit(); │
- │ } │
- │ for (i = 0; i < 32, i++) │
- │ { │
- │ wait((int *) 0); │
- │ /* ºá»¿ßáΓ∞ º¡áτÑ¡¿Ñ i ó »α«ßΓαá¡ßΓó« »α«µÑßßá ß │
- │ * ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼ pid »« áñαÑßπ, ß«ñÑαªáΘѼπß∩ ó │
- │ * »ÑαѼѡ¡«⌐ addr */ │
- │ if (ptrace(TR_WRITE,pid,addr,i) == -1) │
- │ exit(); │
- │ addr += sizeof(int); │
- │ } │
- │ /* Γαáßß¿απѼδ⌐ »α«µÑßß ó«º«í¡«ó½∩ÑΓ óδ»«½¡Ñ¡¿Ñ */ │
- │ ptrace(TR_RESUME,pid,1,0); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.3. Åα«úαá¼¼á debug (Γαáßß¿απεΘ¿⌐ »α«µÑßß)
-
- 332
-
-
-
- µÑßß trace »ÑαÑσ«ñ¿Γ ó ß«ßΓ«∩¡¿Ñ Γαáßß¿α«ó¬¿, «ª¿ñá∩ »«ßΓπ»½Ñ¡¿∩ ¬«¼á¡ñδ «Γ
- »α«úαá¼¼δ debug. àß½¿ »α«µÑßß, αÑ὿ºπεΘ¿⌐ »α«úαá¼¼π debug, ¡áσ«ñ¿½ß∩ ó ß«ß-
- Γ«∩¡¿¿ »α¿«ßΓá¡«óá, ßó∩ºá¡¡«ú« ß óδ»«½¡Ñ¡¿Ñ¼ Σπ¡¬µ¿¿ wait, «¡ "»α«íπªñáÑΓ-
- ß∩", «í¡áαπª¿óáÑΓ ¡á½¿τ¿Ñ »«α«ªñÑ¡¡«ú« Γαáßß¿απѼ«ú« »α«µÑßßá ¿ óδσ«ñ¿Γ ¿º
- Σπ¡¬µ¿¿ wait. çáΓѼ »α«µÑßß debug óδºδóáÑΓ Σπ¡¬µ¿ε ptrace, ºá»¿ßδóáÑΓ º¡áτÑ-
- ¡¿Ñ »ÑαѼѡ¡«⌐ µ¿¬½á i ó »α«ßΓαá¡ßΓó« ñá¡¡δσ »α«µÑßßá trace »« áñαÑßπ, ß«-
- ñÑαªáΘѼπß∩ ó »ÑαѼѡ¡«⌐ addr, ¿ πóѽ¿τ¿óáÑΓ º¡áτÑ¡¿Ñ »ÑαѼѡ¡«⌐ addr; ó
- »α«úαá¼¼Ñ trace »ÑαѼѡ¡á∩ addr σαá¡¿Γ áñαÑß Γ«τ¬¿ óσ«ñá ó ¼áßß¿ó data. Å«ß-
- ½Ññ¡ÑÑ «íαáΘÑ¡¿Ñ »α«µÑßßá debug ¬ Σπ¡¬µ¿¿ ptrace óδºδóáÑΓ ºá»π߬ »α«úαá¼¼δ
- trace, ¿ ó φëà ¼«¼Ñ¡Γ ¼áßß¿ó data ß«ñÑαª¿Γ º¡áτÑ¡¿∩ «Γ 0 ñ« 31. ÄΓ½áñ-
- τ¿¬¿, »«ñ«í¡δÑ sdb, ¿¼ÑεΓ ñ«ßΓπ» ¬ Γáí½¿µÑ ¿ñÑ¡Γ¿Σ¿¬áΓ«α«ó Γαáßß¿απѼ«ú«
- »α«µÑßßá, ¿º ¬«Γ«α«⌐ «¡¿ »«½πτáεΓ ¿¡Σ«α¼áµ¿ε «í áñαÑßáσ ñá¡¡δσ, ¿ß»«½∞ºπѼδσ
- ó ¬áτÑßΓóÑ »áαá¼ÑΓα«ó Σπ¡¬µ¿¿ ptrace.
- êß»«½∞º«óá¡¿Ñ Σπ¡¬µ¿¿ ptrace ñ½∩ Γαáßß¿α«ó¬¿ »α«µÑßß«ó ∩ó½∩ÑΓß∩ «íδτ¡δ¼
- ñѽ«¼, ¡« «¡« ¿¼ÑÑΓ α∩ñ ¡Ññ«ßΓáΓ¬«ó.
- * ä½∩ Γ«ú«, τΓ«íδ »α«¿ºóÑßΓ¿ »ÑαÑñáτπ »«αµ¿¿ ñá¡¡δσ ñ½¿¡«ε ó ß½«ó« ¼Ñªñπ
- »α«µÑßß«¼-«Γ½áñτ¿¬«¼ ¿ Γαáßß¿απÑ¼δ¼ »α«µÑßß«¼, ∩ñα« ñ«½ª¡« óδ»«½¡¿Γ∞ τÑ-
- ΓδαÑ »ÑαѬ½ετÑ¡¿∩ ¬«¡ΓѬßΓá: «¡« »ÑαѬ½ετáÑΓ ¬«¡ΓѬßΓ ó« óαѼ∩ ó맮óá
- «Γ½áñτ¿¬«¼ Σπ¡¬µ¿¿ ptrace, ºáúαπªáÑΓ ¿ óδúαπªáÑΓ ¬«¡ΓѬßΓ Γαáßß¿απѼ«ú«
- »α«µÑßßá ¿ »ÑαѬ½ετáÑΓ ¬«¡ΓѬßΓ ó¡«ó∞ ¡á »α«µÑßß-«Γ½áñτ¿¬ »« »«½πτÑ¡¿¿
- «ΓóÑΓá «Γ Γαáßß¿απѼ«ú« »α«µÑßßá. éßÑ óδΦÑπ¬áºá¡¡«Ñ ¡Ñ«íσ«ñ¿¼«, »«ß¬«½∞-
- ¬π π «Γ½áñτ¿¬á ¡ÑΓ ¿¡«ú« ß»«ß«íá »«½πτ¿Γ∞ ñ«ßΓπ» ¬ ó¿αΓπá½∞¡«¼π áñαÑß¡«-
- ¼π »α«ßΓαá¡ßΓóπ Γαáßß¿απѼ«ú« »α«µÑßßá, «Γßεñá ºá¼Ññ½Ñ¡¡«ßΓ∞ »α«ΓѬ᡿∩
- »α«µÑñπαδ Γαáßß¿α«ó¬¿.
- * Åα«µÑßß-«Γ½áñτ¿¬ ¼«ªÑΓ óÑßΓ¿ «ñ¡«óαѼѡ¡πε Γαáßß¿α«ó¬π ¡Ñ߬«½∞¬¿σ »α«-
- µÑßß«ó-»«Γ«¼¬«ó, σ«Γ∩ ¡á »αá¬Γ¿¬Ñ φΓá 󫺼«ª¡«ßΓ∞ ¿ß»«½∞ºπÑΓß∩ αÑñ¬«.
- àß½¿ íδΓ∞ í«½ÑÑ ¬α¿Γ¿τ¡δ¼, ß½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞, τΓ« «Γ½áñτ¿¬ ¼«ªÑΓ Γαáßß¿-
- α«óáΓ∞ Γ«½∞¬« ßó«¿σ í½¿ªá⌐Φ¿σ »«Γ«¼¬«ó: Ñß½¿ Γαáßß¿απѼδ⌐ »α«µÑßß-»«Γ«-
- ¼«¬ ó맮óÑΓ Σπ¡¬µ¿ε fork, «Γ½áñτ¿¬ ¡Ñ íπñÑΓ ¿¼ÑΓ∞ ¬«¡Γα«½∩ ¡áñ »«α«ªñáÑ-
- ¼δ¼, ó¡πτáΓδ¼ ñ½∩ ¡Ñú«, »α«µÑßß«¼, τΓ« ∩ó½∩ÑΓß∩ ßÑα∞Ѻ¡δ¼ »αÑ»∩ΓßΓó¿Ñ¼ ó
- «Γ½áñ¬Ñ ¼¡«ú«πα«ó¡Ñóδσ »α«úαá¼¼. àß½¿ Γαáßß¿απѼδ⌐ »α«µÑßß óδºδóáÑΓ Σπ¡-
- ¬µ¿ε exec, ºá»π߬áѼδÑ «íαáºδ ºáñáτ Γ«ªÑ »«ñóÑαúáεΓß∩ Γαáßß¿α«ó¬Ñ »«ñ
- π»αáó½Ñ¡¿Ñ¼ αá¡ÑÑ óδºóá¡¡«⌐ Σπ¡¬µ¿¿ ptrace, «ñ¡á¬« «Γ½áñτ¿¬ ¼«ªÑΓ ¡Ñ
- º¡áΓ∞ ¿¼Ñ¡¿ ¿ß»«½¡∩Ѽ«ú« «íαáºá, τΓ« ºáΓαπñ¡∩ÑΓ »α«óÑñÑ¡¿Ñ ß¿¼ó«½∞¡«⌐
- «Γ½áñ¬¿.
- * ÄΓ½áñτ¿¬ ¡Ñ ¼«ªÑΓ óÑßΓ¿ Γαáßß¿α«ó¬π πªÑ óδ»«½¡∩εΘÑú«ß∩ »α«µÑßßá, Ñß½¿
- «Γ½áª¿óáѼδ⌐ »α«µÑßß ¡Ñ óδºóá½ »αÑñóáα¿Γѽ∞¡« Σπ¡¬µ¿ε ptrace, ñáó ΓѼ
- ßá¼δ¼ ∩ñαπ ßó«Ñ ß«ú½áᨥ ¡á Γαáßß¿α«ó¬π. ¥Γ« ¡Ñπñ«í¡«, Γᬠ¬á¬ ó π¬áºá¡-
- ¡«¼ ß½πτáÑ óδ»«½¡∩εΘ¿⌐ß∩ »α«µÑßß »α¿ñÑΓß∩ πñ὿Γ∞ ¿º ß¿ßΓÑ¼δ ¿ »ÑαѺá-
- »πßΓ¿Γ∞ ó αѪ¿¼Ñ Γαáßß¿α«ó¬¿.
- * ìÑ αáºαÑΦáÑΓß∩ Γαáßß¿α«óáΓ∞ setuid-»α«úαá¼¼δ, »«ß¬«½∞¬π φΓ« ¼«ªÑΓ »α¿-
- óÑßΓ¿ ¬ ¡áαπΦÑ¡¿ε ºáΘ¿Γδ ñá¡¡δσ (¿í« ó αѺπ½∞ΓáΓÑ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿
- ptrace ó ¿σ áñαÑß¡«Ñ »α«ßΓαá¡ßΓó« »α«¿ºó«ñ¿½áß∞ íδ ºá»¿ß∞ ñá¡¡δσ) ¿ ¬
- óδ»«½¡Ñ¡¿ε ¡Ññ«»πßΓ¿¼δσ ñÑ⌐ßΓó¿⌐. ÅαÑñ»«½«ª¿¼, ¡á»α¿¼Ñα, τΓ«
- setuid-»α«úαá¼¼á ºá»π߬áÑΓ Σá⌐½ ß ¿¼Ñ¡Ñ¼ "privatefile". ô¼Ñ½δ⌐ »«½∞º«óá-
- Γѽ∞ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ ptrace ¼«ú íδ ºá¼Ñ¡¿Γ∞ ¿¼∩ Σá⌐½á ¡á "/bin/sh",
- ºá»πßΓ¿ó ¡á óδ»«½¡Ñ¡¿Ñ ¬«¼á¡ñ¡δ⌐ »α«µÑßß«α shell (¿ óßÑ »α«úαá¼¼δ, ¿ß-
- »«½¡∩ѼδÑ shell'«¼), ¡Ñ ¿¼Ñ∩ ¡á Γ« ß««ΓóÑΓßΓóπεΘ¿σ »«½¡«¼«τ¿⌐. öπ¡¬µ¿∩
- exec ¿ú¡«α¿απÑΓ í¿Γ setuid, Ñß½¿ »α«µÑßß »«ñóÑαúáÑΓß∩ Γαáßß¿α«ó¬Ñ, ΓѼ
- ßá¼δ¼ áñαÑß¡«Ñ »α«ßΓαá¡ßΓó« setuid-»α«úαá¼¼ ºáΘ¿ΘáÑΓß∩ «Γ »«½∞º«óáΓѽ∞-
- ߬«⌐ ºá»¿ß¿.
-
- 追½¿á¡ [Killian 84] «»¿ßδóáÑΓ ñαπúπε ßσѼπ Γαáßß¿α«ó¬¿ »α«µÑßß«ó, «ß¡«-
- óá¡¡πε ¡á »ÑαѬ½ετÑ¡¿¿ Σá⌐½«óδσ ß¿ßΓѼ (ß¼. ú½áóπ 5). Çñ¼¿¡¿ßΓαáΓ«α ¼«¡Γ¿απ-
- ÑΓ Σá⌐½«óπε ß¿ßΓÑ¼π »«ñ ¿¼Ñ¡Ñ¼ "/proc"; »«½∞º«óáΓѽ¿ ¿ñÑ¡Γ¿Σ¿µ¿απεΓ »α«µÑßßδ
- ß »«¼«Θ∞ε ¬«ñ«ó ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ ¿ Γαá¬ΓπεΓ ¿σ ¬á¬ Σá⌐½δ, »α¿¡áñ½ÑªáΘ¿Ñ ¬áΓὫ-
- úπ "/proc". ƒñα« ñáÑΓ αáºαÑΦÑ¡¿Ñ ¡á «Γ¬αδΓ¿Ñ Σá⌐½«ó, ¿ßσ«ñ∩ ¿º ¬«ñá ¿ñÑ¡Γ¿-
-
- 333
-
- Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩ »α«µÑßßá ¿ ¬«ñá ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ úαπ»»δ. Å«½∞º«óáΓѽ¿ ¼«-
- úπΓ «íαáΘáΓ∞ß∩ ¬ áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »α«µÑßßá »πΓѼ τΓÑ¡¿∩ (read) Σá⌐½á ¿
- πßΓá¡áó½¿óáΓ∞ Γ«τ¬¿ »αÑαδóá¡¿⌐ »πΓѼ ºá»¿ß¿ (write) ó Σá⌐½. öπ¡¬µ¿∩ stat ß«-
- «íΘáÑΓ αẽ¿τ¡πε ßΓáΓ¿ßΓ¿τÑ߬πε ¿¡Σ«α¼áµ¿ε, ¬áßáεΘπεß∩ »α«µÑßßá. é ñá¡¡«¼
- »«ñσ«ñÑ πßΓαá¡Ñ¡δ Γα¿ ¡Ññ«ßΓáΓ¬á, »α¿ßπΘ¿Ñ Σπ¡¬µ¿¿ ptrace. é«-»Ñαóδσ, φΓá
- ßσѼá αáí«ΓáÑΓ íδßΓαÑÑ, »«ß¬«½∞¬π »α«µÑßß-«Γ½áñτ¿¬ ºá «ñ¡« «íαáΘÑ¡¿Ñ ¬ π¬á-
- ºá¡¡δ¼ ß¿ßΓѼ¡δ¼ Σπ¡¬µ¿∩¼ ¼«ªÑΓ »ÑαÑñáóáΓ∞ í«½∞ΦÑ ¿¡Σ«α¼áµ¿¿, τѼ »α¿ αáí«ΓÑ
- ß ptrace. é«-óΓ«αδσ, «Γ½áñτ¿¬ ºñÑß∞ ¼«ªÑΓ óÑßΓ¿ Γαáßß¿α«ó¬π ß«óÑαΦÑ¡¡« »α«-
- ¿ºó«½∞¡δσ »α«µÑßß«ó, á ¡Ñ Γ«½∞¬« ßó«¿σ »«Γ«¼¬«ó. ìᬫ¡Ñµ, Γαáßß¿απѼδ⌐ »α«-
- µÑßß ¡Ñ ñ«½ªÑ¡ »αÑñ»α¿¡¿¼áΓ∞ »αÑñóáα¿Γѽ∞¡« ¡¿¬á¬¿σ ñÑ⌐ßΓó¿⌐ »« »«ñú«Γ«ó¬Ñ ¬
- Γαáßß¿α«ó¬Ñ; «Γ½áñτ¿¬ ¼«ªÑΓ Γαáßß¿α«óáΓ∞ ¿ ßπΘÑßΓóπεΘ¿Ñ »α«µÑßßδ. 髺¼«ª-
- ¡«ßΓ∞ óÑßΓ¿ «Γ½áñ¬π setuid-»α«úαá¼¼, »αÑñ«ßΓáó½∩Ѽá∩ Γ«½∞¬« ßπ»Ñα»«½∞º«óáΓÑ-
- ½ε, αÑ὿ºπÑΓß∩ ¬á¬ ß«ßΓáó¡á∩ τáßΓ∞ Γαáñ¿µ¿«¡¡«ú« ¼Ñσá¡¿º¼á ºáΘ¿Γδ Σá⌐½«ó.
-
-
- E11.2 éçÇêîÄäàëæÆéêà ÅÉÄûàææÄé é éàÉæêê V æêæÆàî¢F
-
- Åá¬ÑΓ IPC (interprocess communication) ó óÑαß¿¿ V ß¿ßΓѼδ UNIX ó¬½ετáÑΓ
- ó ßÑí∩ Γα¿ ¼Ñσá¡¿º¼á. îÑσá¡¿º¼ ß««íΘÑ¡¿⌐ ñáÑΓ »α«µÑßßἠ󫺼«ª¡«ßΓ∞ »«ßδ½áΓ∞
- ñαπú¿¼ »α«µÑßßá¼ »«Γ«¬¿ ßΣ«α¼áΓ¿α«óá¡¡δσ ñá¡¡δσ, ¼Ñσá¡¿º¼ αáºñѽѡ¿∩ »á¼∩Γ¿
- »«ºó«½∩ÑΓ »α«µÑßßá¼ ß«ó¼ÑßΓ¡« ¿ß»«½∞º«óáΓ∞ «Γñѽ∞¡δÑ τáßΓ¿ ó¿αΓπá½∞¡«ú« áñ-
- αÑß¡«ú« »α«ßΓαá¡ßΓóá, á ßѼáΣ«αδ - ß¿¡σα«¡¿º¿α«óáΓ∞ ßó«Ñ óδ»«½¡Ñ¡¿Ñ ß óδ»«½-
- ¡Ñ¡¿Ñ¼ »áαώѽ∞¡δσ »α«µÑßß«ó. ìÑß¼«Γα∩ ¡á Γ«, τΓ« «¡¿ αÑ὿ºπεΓß∩ ó ó¿ñÑ
- «Γñѽ∞¡δσ í½«¬«ó, ¿¼ »α¿ßπΘ¿ «íΘ¿Ñ ßó«⌐ßΓóá.
- * æ ¬áªñδ¼ ¼Ñσá¡¿º¼«¼ ßó∩ºá¡á Γáí½¿µá, ó ºá»¿ß∩σ ¬«Γ«α«⌐ «»¿ßδóáεΓß∩ óßÑ
- Ñú« ñÑΓ὿.
- * é ¬áªñ«⌐ ºá»¿ß¿ ß«ñÑনΓß∩ τ¿ß½«ó«⌐ ¬½ετ (key), ¬«Γ«αδ⌐ »αÑñßΓáó½∩ÑΓ ß«-
- í«⌐ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ºá»¿ß¿, óδíαá¡¡δ⌐ »«½∞º«óáΓѽѼ.
- * é ¬áªñ«¼ ¼Ñσá¡¿º¼Ñ ¿¼ÑÑΓß∩ ß¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ Γ¿»á "get", ¿ß»«½∞ºπѼá∩
- ñ½∩ ß«ºñá¡¿∩ ¡«ó«⌐ ¿½¿ »«¿ß¬á ßπΘÑßΓóπεΘÑ⌐ ºá»¿ß¿; »áαá¼ÑΓαἿ Σπ¡¬µ¿¿
- ∩ó½∩εΓß∩ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ºá»¿ß¿ ¿ αẽ¿τ¡δÑ Σ½áú¿ (flag). ƒñα« óÑñÑΓ »«¿ß¬
- ºá»¿ß¿ »« ÑÑ ¿ñÑ¡Γ¿Σ¿¬áΓ«απ ó ß««ΓóÑΓßΓóπεΘÑ⌐ Γáí½¿µÑ. Åα«µÑßßδ ¼«úπΓ ß
- »«¼«Θ∞ε Σ½áúá IPC_PRIVATE úáαá¡Γ¿α«óáΓ∞ »«½πτÑ¡¿Ñ ÑΘÑ ¡Ñ¿ß»«½∞ºπѼ«⌐ ºá-
- »¿ß¿. æ »«¼«Θ∞ε Σ½áúá IPC_CREAT «¡¿ ¼«úπΓ ß«ºñáΓ∞ ¡«óπε ºá»¿ß∞, Ñß½¿ ºá-
- »¿ß¿ ß π¬áºá¡¡δ¼ ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼ ¡ÑΓ, á Ñß½¿ ÑΘÑ ¬ Γ«¼π ªÑ πßΓá¡«ó¿Γ∞
- Σ½áú IPC_EXCL, ¼«ª¡« »«½πτ¿Γ∞ πóÑñ«¼½Ñ¡¿Ñ «í «Φ¿í¬Ñ ó Γ«¼ ß½πτáÑ, Ñß½¿
- ºá»¿ß∞ ß Γᬿ¼ ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼ ßπΘÑßΓóπÑΓ. öπ¡¬µ¿∩ ó«ºóαáΘáÑΓ ¡Ñ¬¿⌐ óδí-
- αá¡¡δ⌐ ∩ñα«¼ ñÑß¬α¿»Γ«α, »αÑñ¡áº¡áτÑ¡¡δ⌐ ñ½∩ »«ß½ÑñπεΘÑú« ¿ß»«½∞º«óá¡¿∩
- ó ñαπú¿σ ß¿ßΓѼ¡δσ Σπ¡¬µ¿∩σ, Γᬿ¼ «íαẫ¼, «¡á αáí«ΓáÑΓ á¡á½«ú¿τ¡« ß¿ß-
- ΓѼ¡δ¼ Σπ¡¬µ¿∩¼ creat ¿ open.
- * é ¬áªñ«¼ ¼Ñσá¡¿º¼Ñ ∩ñα« ¿ß»«½∞ºπÑΓ ß½ÑñπεΘπε Σ«α¼π½π ñ½∩ »«¿ß¬á »« ñÑ߬-
- α¿»Γ«απ π¬áºáΓѽ∩ ¡á ºá»¿ß∞ ó Γáí½¿µÑ ßΓαπ¬Γπα ñá¡¡δσ:
-
- π¬áºáΓѽ∞ = º¡áτÑ¡¿Ñ ñÑß¬α¿»Γ«αá »« ¼«ñπ½ε «Γ τ¿ß½á ºá»¿ßÑ⌐ ó Γáí½¿µÑ
-
- àß½¿, ¡á»α¿¼Ñα, Γáí½¿µá ßΓαπ¬Γπα ß««íΘÑ¡¿⌐ ß«ßΓ«¿Γ ¿º 100 ºá»¿ßÑ⌐, ñÑ߬-
- α¿»Γ«αδ, ßó∩ºá¡¡δÑ ß ºá»¿ß∞ε ¡«¼Ñα 1, ¿¼ÑεΓ º¡áτÑ¡¿∩, αáó¡δÑ 1, 101, 201
- ¿ Γ.ñ. è«úñá »α«µÑßß πñá½∩ÑΓ ºá»¿ß∞, ∩ñα« πóѽ¿τ¿óáÑΓ º¡áτÑ¡¿Ñ ßó∩ºá¡¡«-
- ú« ß ¡Ñ⌐ ñÑß¬α¿»Γ«αá ¡á τ¿ß½« ºá»¿ßÑ⌐ ó Γáí½¿µÑ: »«½πτÑ¡¡δ⌐ ñÑß¬α¿»Γ«α
- ßΓá¡ÑΓ ¡«óδ¼ ñÑß¬α¿»Γ«α«¼ φΓ«⌐ ºá»¿ß¿, ¬«úñá ¬ ¡Ñ⌐ ó¡«ó∞ íπñÑΓ »α«¿ºóÑ-
- ñÑ¡« «íαáΘÑ¡¿Ñ »α¿ »«¼«Θ¿ Σπ¡¬µ¿¿ Γ¿»á "get". Åα«µÑßßδ, ¬«Γ«αδÑ íπñπΓ
- »δΓáΓ∞ß∩ «íαáΓ¿Γ∞ß∩ ¬ ºá»¿ß¿ »« ÑÑ ßΓáα«¼π ñÑß¬α¿»Γ«απ, »«ΓÑα»∩Γ ¡Ñπñá-
- τπ. ÄíαáΓ¿¼ß∩ ó¡«ó∞ ¬ »αÑñδñπΘѼπ »α¿¼Ñαπ. àß½¿ ß ºá»¿ß∞ε 1 ßó∩ºá¡ ñÑ߬-
- α¿»Γ«α, ¿¼ÑεΘ¿⌐ º¡áτÑ¡¿Ñ 201, »α¿ Ñú« πñá½Ñ¡¿¿ ∩ñα« ¡áº¡áτ¿Γ ºá»¿ß¿ ¡«-
- óδ⌐ ñÑß¬α¿»Γ«α, ¿¼ÑεΘ¿⌐ º¡áτÑ¡¿Ñ 301. Åα«µÑßßδ, »δΓáεΘ¿Ñß∩ «íαáΓ¿Γ∞ß∩ ¬
- ñÑß¬α¿»Γ«απ 201, »«½πτáΓ «Φ¿í¬π, »«ß¬«½∞¬π φΓ«ú« ñÑß¬α¿»Γ«αá í«½∞ΦÑ ¡ÑΓ.
- é ¬«¡Ñτ¡«¼ ¿Γ«úÑ ∩ñα« »α«¿ºóÑñÑΓ »ÑαÑ¡π¼Ñαᵿε ñÑß¬α¿»Γ«α«ó, ¡« »«¬á φΓ«
- »α«¿º«⌐ñÑΓ, ¼«ªÑΓ »α«⌐Γ¿ º¡áτ¿Γѽ∞¡δ⌐ »α«¼ÑªπΓ«¬ óαѼѡ¿.
- * èáªñá∩ ºá»¿ß∞ ¿¼ÑÑΓ ¡Ñ¬πε ßΓαπ¬Γπαπ ñá¡¡δσ, «»¿ßδóáεΘπε »αáóá ñ«ßΓπ»á ¬
-
- 334
-
- ¡Ñ⌐ ¿ ó¬½ετáεΘπε ó ßÑí∩ »«½∞º«óáΓѽ∞߬¿⌐ ¿ úαπ»»«ó«⌐ ¬«ñδ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿,
- ¬«Γ«αδÑ ¿¼ÑÑΓ »α«µÑßß, ß«ºñáóΦ¿⌐ ºá»¿ß∞, á Γá¬ªÑ »«½∞º«óáΓѽ∞߬¿⌐ ¿
- úαπ»»«ó«⌐ ¬«ñδ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿, πßΓá¡«ó½Ñ¡¡δÑ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿Ñ⌐ Γ¿»á
- "control" («í φΓ«¼ ¡¿ªÑ), ¿ ñó«¿τ¡δÑ ¬«ñδ αáºαÑΦÑ¡¿⌐ τΓÑ¡¿∩-ºá»¿ß¿-¿ß-
- »«½¡Ñ¡¿∩ ñ½∩ ó½áñѽ∞µá, úαπ»»δ ¿ »α«τ¿σ »«½∞º«óáΓѽÑ⌐, »« á¡á½«ú¿¿ ß πß-
- Γá¡«ó¬«⌐ »αáó ñ«ßΓπ»á ¬ Σá⌐½á¼.
- * é ¬áªñ«⌐ ºá»¿ß¿ ¿¼ÑÑΓß∩ ñαπúá∩ ¿¡Σ«α¼áµ¿∩, «»¿ßδóáεΘá∩ ß«ßΓ«∩¡¿Ñ ºá»¿ß¿,
- ó τáßΓ¡«ßΓ¿, ¿ñÑ¡Γ¿Σ¿¬áΓ«α »«ß½Ññ¡Ñú« ¿º »α«µÑßß«ó, ó¡ÑßΦ¿σ ¿º¼Ñ¡Ñ¡¿∩ ó
- ºá»¿ß∞ (»«ß佬á ß««íΘÑ¡¿∩, »α¿Ñ¼ ß««íΘÑ¡¿∩, »«ñ¬½ετÑ¡¿Ñ αáºñѽ∩Ѽ«⌐ »á-
- ¼∩Γ¿ ¿ Γ.ñ.), ¿ óαѼ∩ »«ß½Ññ¡Ñú« «íαáΘÑ¡¿∩ ¿½¿ ¬«ααÑ¬Γ¿α«ó¬¿.
- * é ¬áªñ«¼ ¼Ñσá¡¿º¼Ñ ¿¼ÑÑΓß∩ ß¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ Γ¿»á "control", ºá»αáΦ¿óáε-
- Θá∩ ¿¡Σ«α¼áµ¿ε « ß«ßΓ«∩¡¿¿ ºá»¿ß¿, ¿º¼Ñ¡∩εΘá∩ φΓπ ¿¡Σ«α¼áµ¿ε ¿½¿ πñá½∩ε-
- Θá∩ ºá»¿ß∞ ¿º ß¿ßΓѼδ. è«úñá »α«µÑßß ºá»αáΦ¿óáÑΓ ¿¡Σ«α¼áµ¿ε « ß«ßΓ«∩¡¿¿
- ºá»¿ß¿, ∩ñα« »α«óÑα∩ÑΓ, ¿¼ÑÑΓ ½¿ »α«µÑßß αáºαÑΦÑ¡¿Ñ ¡á τΓÑ¡¿Ñ ºá»¿ß¿,
- »«ß½Ñ τÑú« ¬«»¿απÑΓ ñá¡¡δÑ ¿º ºá»¿ß¿ Γáí½¿µδ »« áñαÑßπ, π¬áºá¡¡«¼π »«½∞-
- º«óáΓѽѼ. Åα¿ πßΓá¡«ó¬Ñ º¡áτÑ¡¿⌐ »α¿¡áñ½ÑªáΘ¿σ ºá»¿ß¿ »áαá¼ÑΓα«ó ∩ñα«
- »α«óÑα∩ÑΓ, ß«ó»áñáεΓ ½¿ ¼Ñªñπ ß«í«⌐ »«½∞º«óáΓѽ∞߬¿⌐ ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿
- »α«µÑßßá ¿ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »«½∞º«óáΓѽ∩ (¿½¿ ß«ºñáΓѽ∩), π¬áºá¡¡δ⌐ ó ºá»¿-
- ß¿, ¡Ñ ºá»πΘÑ¡ ½¿ »α«µÑßß »«ñ π»αáó½Ñ¡¿Ñ¼ ßπ»Ñα»«½∞º«óáΓѽ∩; «ñ¡«ú« αáº-
- αÑΦÑ¡¿∩ ¡á ºá»¿ß∞ ¡Ññ«ßΓáΓ«τ¡« ñ½∩ πßΓá¡«ó¬¿ »áαá¼ÑΓα«ó. ƒñα« ¬«»¿απÑΓ
- ß««íΘÑ¡¡πε »«½∞º«óáΓѽѼ ¿¡Σ«α¼áµ¿ε ó ºá»¿ß∞ Γáí½¿µδ, πßΓá¡áó½¿óá∩ º¡á-
- τÑ¡¿∩ »«½∞º«óáΓѽ∞߬«ú« ¿ úαπ»»«ó«ú« ¬«ñ«ó ¿ñÑ¡Γ¿Σ¿¬áµ¿¿, αѪ¿¼δ ñ«ßΓπ»á
- ¿ ñαπú¿Ñ »áαá¼ÑΓαδ (ó ºáó¿ß¿¼«ßΓ¿ «Γ Γ¿»á ¼Ñσá¡¿º¼á). ƒñα« ¡Ñ ¿º¼Ñ¡∩ÑΓ
- º¡áτÑ¡¿∩ »«½Ñ⌐, «»¿ßδóáεΘ¿σ »«½∞º«óáΓѽ∞߬¿⌐ ¿ úαπ»»«ó«⌐ ¬«ñδ ¿ñÑ¡Γ¿Σ¿-
- ¬áµ¿¿ ß«ºñáΓѽ∩ ºá»¿ß¿, »«φΓ«¼π »«½∞º«óáΓѽ∞, ß«ºñáóΦ¿⌐ ºá»¿ß∞, ß«σαá¡∩-
- ÑΓ π»αáó½∩εΘ¿Ñ »αáóá ¡á ¡ÑÑ. Å«½∞º«óáΓѽ∞ ¼«ªÑΓ πñ὿Γ∞ ºá»¿ß∞, ½¿í« Ñß-
- ½¿ «¡ ∩ó½∩ÑΓß∩ ßπ»Ñα»«½∞º«óáΓѽѼ, ½¿í« Ñß½¿ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑßßá ß«ó-
- »áñáÑΓ ß ½εíδ¼ ¿º ¿ñÑ¡Γ¿Σ¿¬áΓ«α«ó, π¬áºá¡¡δσ ó ßΓαπ¬ΓπαÑ ºá»¿ß¿. ƒñα«
- πóѽ¿τ¿óáÑΓ ¡«¼Ñα ñÑß¬α¿»Γ«αá, τΓ«íδ »α¿ ß½ÑñπεΘѼ ¡áº¡áτÑ¡¿¿ ºá»¿ß¿ Ñ⌐
- íδ½ »α¿ßó«Ñ¡ ¡«óδ⌐ ñÑß¬α¿»Γ«α. æ½Ññ«óáΓѽ∞¡«, ¬á¬ πªÑ αá¡ÑÑ ú«ó«α¿½«ß∞,
- Ñß½¿ »α«µÑßß »«»δΓáÑΓß∩ «íαáΓ¿Γ∞ß∩ ¬ ºá»¿ß¿ »« ßΓáα«¼π ñÑß¬α¿»Γ«απ, óδº-
- óá¡¡á∩ ¿¼ Σπ¡¬µ¿∩ »«½πτ¿Γ «Γ¬áº.
-
-
- E11.2.1 æ««íΘÑ¡¿∩F
-
- æ ß««íΘÑ¡¿∩¼¿ αáí«ΓáεΓ τÑΓδαÑ ß¿ßΓѼ¡δσ Σπ¡¬µ¿¿: msgget, ¬«Γ«αá∩ ó«ºóαá-
- ΘáÑΓ (¿ ó ¡Ñ¬«Γ«αδσ ß½πτá∩σ ß«ºñáÑΓ) ñÑß¬α¿»Γ«α ß««íΘÑ¡¿∩, «»αÑñѽ∩εΘ¿⌐ «τÑ-
- αÑñ∞ ß««íΘÑ¡¿⌐ ¿ ¿ß»«½∞ºπѼδ⌐ ñαπú¿¼¿ ß¿ßΓѼ¡δ¼¿ Σπ¡¬µ¿∩¼¿, msgctl, ¬«Γ«αá∩
- πßΓá¡áó½¿óáÑΓ ¿ ó«ºóαáΘáÑΓ ßó∩ºá¡¡δÑ ß ñÑß¬α¿»Γ«α«¼ ß««íΘÑ¡¿⌐ »áαá¼ÑΓαδ ¿½¿
- πñá½∩ÑΓ ñÑß¬α¿»Γ«αδ, msgsnd, ¬«Γ«αá∩ »«ßδ½áÑΓ ß««íΘÑ¡¿Ñ, ¿ msgrcv, ¬«Γ«αá∩
- »«½πτáÑΓ ß««íΘÑ¡¿Ñ.
- æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ msgget:
-
- msgqid = msgget(key,flag);
-
- úñÑ msgqid - ó«ºóαáΘáѼδ⌐ Σπ¡¬µ¿Ñ⌐ ñÑß¬α¿»Γ«α, á key ¿ flag ¿¼ÑεΓ Γπ ªÑ ßÑ-
- ¼á¡Γ¿¬π, τΓ« ¿ ó ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ Γ¿»á "get". ƒñα« σαá¡¿Γ ß««íΘÑ¡¿∩ ó ßó∩º-
- ¡«¼ ß»¿ß¬Ñ («τÑαÑñ¿), «»αÑñѽ∩Ѽ«¼ º¡áτÑ¡¿Ñ¼ ñÑß¬α¿»Γ«αá, ¿ ¿ß»«½∞ºπÑΓ º¡á-
- τÑ¡¿Ñ msgqid ó ¬áτÑßΓóÑ π¬áºáΓѽ∩ ¡á ¼áßß¿ó ºáú«½«ó¬«ó «τÑαÑñÑ⌐. èα«¼Ñ óδΦÑ-
- π¬áºá¡¡δσ »«½Ñ⌐, «»¿ßδóáεΘ¿σ «íΘ¿Ñ ñ½∩ óßÑú« ¼Ñσá¡¿º¼á »αáóá ñ«ßΓπ»á, ºáú«-
- ½«ó«¬ «τÑαÑñ¿ ß«ñÑαª¿Γ ß½ÑñπεΘ¿Ñ »«½∩:
- * ô¬áºáΓѽ¿ ¡á »Ñαó«Ñ ¿ »«ß½Ññ¡ÑÑ ß««íΘÑ¡¿Ñ ó ß»¿ß¬Ñ;
- * 諽¿τÑßΓó« ß««íΘÑ¡¿⌐ ¿ «íΘ¿⌐ «íΩѼ ¿¡Σ«α¼áµ¿¿ ó ß»¿ß¬Ñ ó íá⌐Γáσ;
- * îá¬ß¿¼á½∞¡á∩ Ѽ¬«ßΓ∞ ß»¿ß¬á ó íá⌐Γáσ;
- * êñÑ¡Γ¿Σ¿¬áΓ«αδ »α«µÑßß«ó, »«ß½áóΦ¿σ ¿ »α¿¡∩óΦ¿σ ß««íΘÑ¡¿∩ »«ß½Ññ¡¿¼¿;
- * Å«½∩, π¬áºδóáεΘ¿Ñ óαѼ∩ »«ß½Ññ¡Ñú« óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿⌐ msgsnd, msgrcv ¿
- msgctl.
- è«úñá »«½∞º«óáΓѽ∞ óδºδóáÑΓ Σπ¡¬µ¿ε msgget ñ½∩ Γ«ú«, τΓ«íδ ß«ºñáΓ∞ ¡«óδ⌐
-
- 335
-
- ñÑß¬α¿»Γ«α, ∩ñα« »α«ß¼áΓα¿óáÑΓ ¼áßß¿ó «τÑαÑñÑ⌐ ß««íΘÑ¡¿⌐ ó »«¿ß¬áσ ßπΘÑßΓóπ-
- εΘÑ⌐ «τÑαÑñ¿ ß π¬áºá¡¡δ¼ ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼. àß½¿ Γᬫ⌐ «τÑαÑñ¿ ¡ÑΓ, ∩ñα« óδñÑ-
- ½∩ÑΓ ¡«óπε «τÑαÑñ∞, ¿¡¿µ¿á½¿º¿απÑΓ ÑÑ ¿ ó«ºóαáΘáÑΓ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »«½∞º«óáΓÑ-
- ½ε. é »α«Γ¿ó¡«¼ ß½πτáÑ ∩ñα« »α«óÑα∩ÑΓ ¡á½¿τ¿Ñ ¡Ñ«íσ«ñ¿¼δσ »αáó ñ«ßΓπ»á ¿ ºá-
- óÑαΦáÑΓ óδ»«½¡Ñ¡¿Ñ Σπ¡¬µ¿¿.
- ä½∩ »«ß佬¿ ß««íΘÑ¡¿∩ »α«µÑßß ¿ß»«½∞ºπÑΓ ß¿ßΓѼ¡πε Σπ¡¬µ¿ε msgsnd:
-
- msgsnd(msgqid,msg,count,flag);
-
- úñÑ msgqid - ñÑß¬α¿»Γ«α «τÑαÑñ¿ ß««íΘÑ¡¿⌐, «íδτ¡« ó«ºóαáΘáѼδ⌐ Σπ¡¬µ¿Ñ⌐
- msgget, msg - π¬áºáΓѽ∞ ¡á ßΓαπ¬Γπαπ, ß«ßΓ«∩Θπε ¿º Γ¿»á ó ó¿ñÑ ¡áº¡áτáѼ«ú«
- »«½∞º«óáΓѽѼ µÑ½«ú« τ¿ß½á ¿ ¼áßß¿óá ß¿¼ó«½«ó, count - αẼÑα ¿¡Σ«α¼áµ¿«¡¡«-
- ú« ¼áßß¿óá, flag - ñÑ⌐ßΓó¿Ñ, »αÑñ»α¿¡¿¼áѼ«Ñ ∩ñα«¼ ó ß½πτáÑ »ÑαÑ»«½¡Ñ¡¿∩
- ó¡πΓαÑ¡¡Ñú« íπΣÑα¡«ú« »α«ßΓαá¡ßΓóá.
- ƒñα« »α«óÑα∩ÑΓ (É¿ßπ¡«¬ 11.4), ¿¼ÑÑΓß∩ ½¿ π »«ßδ½áεΘÑú« ß««íΘÑ¡¿Ñ »α«-
- µÑßßá αáºαÑΦÑ¡¿∩ ¡á ºá»¿ß∞ »« π¬áºá¡¡«¼π ñÑß¬α¿»Γ«απ, ¡Ñ óδσ«ñ¿Γ ½¿ αẼÑα
- ß««íΘÑ¡¿∩ ºá πßΓá¡«ó½Ñ¡¡πε ß¿ßΓѼ«⌐ úαá¡¿µπ, ¡Ñ ß«ñÑনΓß∩ ½¿ ó «τÑαÑñ¿
- ß½¿Φ¬«¼ í«½∞Φ«⌐ «íΩѼ ¿¡Σ«α¼áµ¿¿, á Γá¬ªÑ ∩ó½∩ÑΓß∩ ½¿ Γ¿» ß««íΘÑ¡¿∩ »«½«ª¿-
- Γѽ∞¡δ¼ µÑ½δ¼ τ¿ß½«¼. àß½¿ óßÑ πß½«ó¿∩ ß«í½εñÑ¡δ, ∩ñα« óδñѽ∩ÑΓ ß««íΘÑ¡¿ε
- ¼ÑßΓ«, ¿ß»«½∞ºπ∩ ¬áαΓπ ß««íΘÑ¡¿⌐ (ß¼. αáºñѽ 9.1), ¿ ¬«»¿απÑΓ ó φΓ« ¼ÑßΓ«
- ñá¡¡δÑ ¿º »α«ßΓαá¡ßΓóá »«½∞º«óáΓѽ∩. è ß««íΘÑ¡¿ε »α¿ß«Ññ¿¡∩ÑΓß∩ ºáú«½«ó«¬,
- »«ß½Ñ τÑú« «¡« »«¼ÑΘáÑΓß∩ ó ¬«¡Ñµ ßó∩º¡«ú« ß»¿ß¬á ºáú«½«ó¬«ó ß««íΘÑ¡¿⌐. é
- ºáú«½«ó¬Ñ ß««íΘÑ¡¿∩ ºá»¿ßδóáÑΓß∩ Γ¿» ¿ αẼÑα ß««íΘÑ-
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ msgsnd /* »«ß½áΓ∞ ß««íΘÑ¡¿Ñ */ │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: (1) ñÑß¬α¿»Γ«α «τÑαÑñ¿ ß««íΘÑ¡¿⌐ │
- │ (2) áñαÑß ßΓαπ¬Γπαδ ß««íΘÑ¡¿∩ │
- │ (3) αẼÑα ß««íΘÑ¡¿∩ │
- │ (4) Σ½áú¿ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ¬«½¿τÑßΓó« »«ß½á¡¡δσ íá⌐Γ │
- │ { │
- │ »α«óÑα¿Γ∞ »αáó¿½∞¡«ßΓ∞ π¬áºá¡¿∩ ñÑß¬α¿»Γ«αá ¿ ¡á½¿τ¿Ñ │
- │ ß««ΓóÑΓßΓóπεΘ¿σ »αáó ñ«ßΓπ»á; │
- │ óδ»«½¡¿Γ∞ »«¬á (ñ½∩ σαá¡Ñ¡¿∩ ß««íΘÑ¡¿∩ ¡Ñ íπñÑΓ óδñѽѡ«│
- │ ¼ÑßΓ«) │
- │ { │
- │ Ñß½¿ (Σ½áú¿ ¡Ñ αáºαÑΦáεΓ ªñáΓ∞) │
- │ óÑα¡πΓ∞ß∩; │
- │ »α¿«ßΓá¡«ó¿Γ∞ß∩ (ñ« ΓÑσ »«α, »«¬á ¼ÑßΓ« ¡Ñ «ßó«í«- │
- │ ñ¿Γß∩); │
- │ } │
- │ »«½πτ¿Γ∞ ºáú«½«ó«¬ ß««íΘÑ¡¿∩; │
- │ ßτ¿ΓáΓ∞ ΓѬßΓ ß««íΘÑ¡¿∩ ¿º »α«ßΓαá¡ßΓóá ºáñáτ¿ ó »α«ßΓ- │
- │ αá¡ßΓó« ∩ñαá; │
- │ ¡áßΓα«¿Γ∞ ßΓαπ¬Γπαδ ñá¡¡δσ: óδßΓα«¿Γ∞ «τÑαÑñ∞ ºáú«½«ó¬«ó│
- │ ß««íΘÑ¡¿⌐, πßΓá¡«ó¿Γ∞ ó ºáú«½«ó¬Ñ π¬áºáΓѽ∞ ¡á ΓѬßΓ │
- │ ß««íΘÑ¡¿∩, ºá»«½¡¿Γ∞ »«½∩, ß«ñÑαªáΘ¿Ñ ßτÑΓτ¿¬¿, óαѼ∩ │
- │ »«ß½Ññ¡Ñú« óδ»«½¡Ñ¡¿∩ «»Ñαᵿ⌐ ¿ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑß- │
- │ ßá; │
- │ óδóÑßΓ¿ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ »α«µÑßßδ, «ª¿ñáεΘ¿Ñ│
- │ αáºαÑΦÑ¡¿∩ ßτ¿ΓáΓ∞ ß««íΘÑ¡¿Ñ ¿º «τÑαÑñ¿; │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.4. ǽú«α¿Γ¼ »«ß佬¿ ß««íΘÑ¡¿∩
-
-
- ¡¿∩, πßΓá¡áó½¿óáÑΓß∩ π¬áºáΓѽ∞ ¡á ΓѬßΓ ß««íΘÑ¡¿∩ ¿ »α«¿ºó«ñ¿Γß∩ ¬«ααÑ¬Γ¿-
-
- 336
-
- α«ó¬á ß«ñÑন¼«ú« αẽ¿τ¡δσ »«½Ñ⌐ ºáú«½«ó¬á «τÑαÑñ¿, ß«ñÑαªáΘ¿σ ßΓáΓ¿ßΓ¿τÑß-
- ¬πε ¿¡Σ«α¼áµ¿ε (¬«½¿τÑßΓó« ß««íΘÑ¡¿⌐ ó «τÑαÑñ¿ ¿ ¿σ ßπ¼¼áα¡δ⌐ «íΩѼ ó íá⌐-
- Γáσ, óαѼ∩ »«ß½Ññ¡Ñú« óδ»«½¡Ñ¡¿∩ «»Ñαᵿ⌐ ¿ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑßßá, »«ß½áó-
- ΦÑú« ß««íΘÑ¡¿Ñ). çáΓѼ ∩ñα« óδó«ñ¿Γ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ »α«µÑßßδ,
- «ª¿ñáεΘ¿Ñ »«»«½¡Ñ¡¿∩ «τÑαÑñ¿ ß««íΘÑ¡¿⌐. àß½¿ αẼÑα «τÑαÑñ¿ ó íá⌐Γáσ »αÑóδ-
- ΦáÑΓ úαá¡¿µπ ñ«»πßΓ¿¼«ßΓ¿, »α«µÑßß »α¿«ßΓá¡áó½¿óáÑΓß∩ ñ« ΓÑσ »«α, »«¬á ñαπ-
- ú¿Ñ ß««íΘÑ¡¿∩ ¡Ñ π⌐ñπΓ ¿º «τÑαÑñ¿. Äñ¡á¬«, Ñß½¿ »α«µÑßßπ í佫 ñá¡« π¬áºá¡¿Ñ
- ¡Ñ ªñáΓ∞ (Σ½áú IPC_NOWAIT), «¡ ¡Ñ¼Ññ½Ñ¡¡« ó«ºóαáΘáÑΓ π»αáó½Ñ¡¿Ñ ß πóÑñ«¼½Ñ-
- ¡¿Ñ¼ «í «Φ¿í¬Ñ. ìá É¿ßπ¡¬Ñ 11.5 »«¬áºá¡á «τÑαÑñ∞ ß««íΘÑ¡¿⌐, ß«ßΓ«∩Θá∩ ¿º ºá-
- ú«½«ó¬«ó ß««íΘÑ¡¿⌐, «αúá¡¿º«óá¡¡δσ ó ßó∩º¡δÑ ß»¿ß¬¿, ß π¬áºáΓѽ∩¼¿ ¡á «í-
- ½áßΓ∞ ΓѬßΓá.
- Éáßß¼«Γα¿¼ »α«úαá¼¼π, »αÑñßΓáó½Ñ¡¡πε ¡á É¿ßπ¡¬Ñ 11.6. Åα«µÑßß óδºδóáÑΓ
- Σπ¡¬µ¿ε msgget ñ½∩ Γ«ú«, τΓ«íδ »«½πτ¿Γ∞ ñÑß¬α¿»Γ«α ñ½∩ ºá»¿ß¿ ß ¿ñÑ¡Γ¿Σ¿¬á-
- Γ«α«¼ MSGKEY. 使¡á ß««íΘÑ¡¿∩ »α¿¡¿¼áÑΓß∩ αáó¡«⌐ 256 íá⌐Γ, σ«Γ∩ ¿ß»«½∞ºπÑΓß∩
- Γ«½∞¬« »Ñαó«Ñ »«½Ñ µÑ½«ú« Γ¿»á, ó «í½áßΓ∞ ΓѬßΓá ß««íΘÑ¡¿∩ ¬«»¿απÑΓß∩ ¿ñÑ¡-
- Γ¿Σ¿¬áΓ«α »α«µÑßßá, Γ¿»π ß««íΘÑ¡¿∩ »α¿ßóá¿óáÑΓß∩ º¡áτÑ¡¿Ñ 1, »«ß½Ñ τÑú« óδ-
- ºδóáÑΓß∩ Σπ¡¬µ¿∩ msgsnd ñ½∩ »«ß佬¿ ß««íΘÑ¡¿∩. îδ óÑα¡Ñ¼ß∩ ¬ φΓ«¼π »α¿¼Ñαπ
- »«ºªÑ.
- Åα«µÑßß »«½πτáÑΓ ß««íΘÑ¡¿∩, óδºδóá∩ Σπ¡¬µ¿ε msgrcv »« ß½ÑñπεΘѼπ Σ«α¼á-
- Γπ:
- count = msgrcv(id,msg,maxcount,type,flag);
-
- úñÑ id - ñÑß¬α¿»Γ«α ß««íΘÑ¡¿∩, msg - áñαÑß »«½∞º«óáΓѽ∞߬«⌐ ßΓαπ¬Γπαδ, ¬«Γ«-
- αá∩ íπñÑΓ ß«ñÑαªáΓ∞ »«½πτÑ¡¡«Ñ ß««íΘÑ¡¿Ñ, maxcount - αẼÑα ßΓαπ¬Γπαδ msg,
- type - Γ¿» ßτ¿ΓδóáѼ«ú« ß««íΘÑ¡¿∩, flag - ñÑ⌐ßΓó¿Ñ, »αÑñ»α¿¡¿¼áѼ«Ñ ∩ñα«¼ ó
- Γ«¼ ß½πτáÑ, Ñß½¿ ó «τÑαÑñ¿ ß«-
-
- çáú«½«ó¬¿ Äí½áßΓ∞
- «τÑαÑñÑ⌐ ΓѬßΓá
- ┌──────┐ çáú«½«ó¬¿ ß««íΘÑ¡¿⌐ ┌─>┌──────┐
- │ │ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │
- │ ──┼────>│ ├───>│ ├───>│ │ │ │ │
- │ │ └───┼──┘ └───┼──┘ └───┼──┘ │ │ │
- ├──────┤ │ │ └────┘ │ │
- │ │ └───────────│──────────────────>├──────┤
- │ │ │ │ │
- │ │ │ │ │
- ├──────┤ │ │ │
- │ │ ┌──────┐ │ │ │
- │ ──┼────>│ │ │ │ │
- │ │ └───┼──┘ │ │ │
- ├──────┤ │ │ │ │
- │ ∙ │ │ │ ├──────┤
- │ ∙ │ └───────────│──────────────────>├──────┤
- │ ∙ │ │ │ │
- │ ∙ │ │ │ │
- │ ∙ │ └──────────────────>├──────┤
- │ ∙ │ │ │
- │ ∙ │ ├──────┤
- │ ∙ │ │ ∙ │
- │ ∙ │ │ ∙ │
- │ ∙ │ │ ∙ │
- └──────┘ └──────┘
-
- É¿ßπ¡«¬ 11.5. æΓαπ¬Γπαδ ñá¡¡δσ, ¿ß»«½∞ºπѼδÑ ó «αúá¡¿ºáµ¿¿ ß««íΘÑ¡¿⌐
-
-
- «íΘÑ¡¿⌐ ¡ÑΓ. é »ÑαѼѡ¡«⌐ count »«½∞º«óáΓѽε ó«ºóαáΘáÑΓß∩ τ¿ß½« »α«τ¿Γá¡¡δσ
- íá⌐Γ ß««íΘÑ¡¿∩.
-
- 337
-
- ƒñα« »α«óÑα∩ÑΓ (É¿ßπ¡«¬ 11.7), ¿¼ÑÑΓ ½¿ »«½∞º«óáΓѽ∞ ¡Ñ«íσ«ñ¿¼δÑ »αáóá
- ñ«ßΓπ»á ¬ «τÑαÑñ¿ ß««íΘÑ¡¿⌐. àß½¿ Γ¿» ßτ¿ΓδóáѼ«ú« ß««íΘÑ¡¿∩ ¿¼ÑÑΓ ¡π½Ñó«Ñ
- º¡áτÑ¡¿Ñ, ∩ñα« ¿ΘÑΓ »Ñαó«Ñ »« ßτÑΓπ ß««íΘÑ¡¿Ñ ó ßó∩º¡«¼ ß»¿ß¬Ñ. àß½¿ Ñú«
- αẼÑα ¼Ñ¡∞ΦÑ ¿½¿ αáóÑ¡ αẼÑαπ, π¬áºá¡¡«¼π »«½∞º«óáΓѽѼ, ∩ñα« ¬«»¿απÑΓ
- ΓѬßΓ ß««íΘÑ¡¿∩ ó »«½∞º«óáΓѽ∞߬πε ßΓαπ¬Γπαπ ¿ ß««ΓóÑΓßΓóπεΘ¿¼ «íαẫ¼ ¡áßΓ-
- αá¿óáÑΓ ßó«¿ ó¡πΓαÑ¡¡¿Ñ ßΓαπ¬Γπαδ: π¼Ñ¡∞ΦáÑΓ ßτÑΓτ¿¬ ß««íΘÑ¡¿⌐ ó «τÑαÑñ¿ ¿
- ßπ¼¼áα¡δ⌐ «íΩѼ ¿¡Σ«α¼áµ¿¿ ó íá⌐Γáσ, ºá»«¼¿¡áÑΓ óαѼ∩ »«½πτÑ¡¿∩ ß««íΘÑ¡¿∩ ¿
- ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑßßá-»«½πτáΓѽ∩, »ÑαÑßΓαá¿óáÑΓ ßó∩º¡δ⌐ ß»¿ß«¬ ¿ «ßó«í«ªñá-
- ÑΓ ¼ÑßΓ« ó ß¿ßΓѼ¡«¼ »α«ßΓαá¡ßΓóÑ, úñÑ σαá¡¿½ß∩ ΓѬßΓ ß««íΘÑ¡¿∩. àß½¿ ¬á-
- ¬¿Ñ-½¿í« »α«µÑßßδ, «ª¿ñáóΦ¿Ñ »«½πτÑ¡¿∩ ß««íΘÑ¡¿∩, ¡áσ«ñ¿½¿ß∞ ó ß«ßΓ«∩¡¿¿
- »α¿«ßΓá¡«óá ¿º-ºá «ΓßπΓßΓó¿∩ ßó«í«ñ¡«ú« ¼ÑßΓá ó ß»¿ß¬Ñ, ∩ñα« óδó«ñ¿Γ ¿σ ¿º
- φΓ«ú« ß«ßΓ«∩¡¿∩. àß½¿ αẼÑα ß««íΘÑ¡¿∩ »αÑóδΦáÑΓ º¡áτÑ¡¿Ñ maxcount, π¬áºá¡-
- ¡«Ñ »«½∞º«óáΓѽѼ, ∩ñα« »«ßδ½áÑΓ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ πóÑñ«¼½Ñ¡¿Ñ «í «Φ¿í¬Ñ ¿
- «ßΓáó½∩ÑΓ ß««íΘÑ¡¿Ñ ó «τÑαÑñ¿. àß½¿, ΓѼ ¡Ñ ¼Ñ¡ÑÑ, »α«µÑßß ¿ú¡«α¿απÑΓ «úαá-
- ¡¿τÑ¡¿∩ ¡á αẼÑα (ó »«½Ñ flag πßΓá¡«ó½Ñ¡ í¿Γ MSG_NOERROR), ∩ñα« «íαѺáÑΓ
- ß««íΘÑ¡¿Ñ, ó«ºóαáΘáÑΓ ºá»α«ΦÑ¡¡«Ñ ¬«½¿τÑßΓó« íá⌐Γ ¿ πñá½∩ÑΓ ß««íΘÑ¡¿Ñ ¿º
- ß»¿ß¬á µÑ½¿¬«¼.
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <sys/types.h> │
- │ #include <sys/ipc.h> │
- │ #include <sys/msg.h> │
- │ │
- │ #define MSGKEY 75 │
- │ │
- │ struct msgform { │
- │ long mtype; │
- │ char mtext[256]; │
- │ }; │
- │ │
- │ main() │
- │ { │
- │ struct msgform msg; │
- │ int msgid,pid,*pint; │
- │ │
- │ msgid = msgget(MSGKEY,0777); │
- │ │
- │ pid = getpid(); │
- │ pint = (int *) msg.mtext; │
- │ *pint = pid; /* ¬«»¿α«óá¡¿Ñ ¿ñÑ¡Γ¿Σ¿¬áΓ«αá │
- │ * »α«µÑßßá ó «í½áßΓ∞ ΓѬßΓá │
- │ * ß««íΘÑ¡¿∩ */ │
- │ msg.mtype = 1; │
- │ │
- │ msgsnd(msgid,&msg,sizeof(int),0); │
- │ msgrcv(msgid,&msg,256,pid,0); /* ¿ñÑ¡Γ¿Σ¿¬áΓ«α │
- │ * »α«µÑßßá ¿ß»«½∞ºπÑΓß∩ ó │
- │ * ¬áτÑßΓóÑ Γ¿»á ß««íΘÑ¡¿∩ */ │
- │ printf("¬½¿Ñ¡Γ: »«½πτ¿½ «Γ »α«µÑßßá ß pid %d\n", │
- │ *pint); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.6. Å«½∞º«óáΓѽ∞߬¿⌐ »α«µÑßß
-
-
- Åα«µÑßß ¼«ªÑΓ »«½πτáΓ∞ ß««íΘÑ¡¿∩ «»αÑñѽѡ¡«ú« Γ¿»á, Ñß½¿ »α¿ßó«¿Γ »áαá-
- ¼ÑΓαπ type ß««ΓóÑΓßΓóπεΘÑÑ º¡áτÑ¡¿Ñ. àß½¿ φΓ« »«½«ª¿Γѽ∞¡«Ñ µÑ½«Ñ τ¿ß½«,
- Σπ¡¬µ¿∩ ó«ºóαáΘáÑΓ »Ñαó«Ñ º¡áτÑ¡¿Ñ ñá¡¡«ú« Γ¿»á, Ñß½¿ «Γα¿µáΓѽ∞¡«Ñ, ∩ñα«
-
- 338
-
- «»αÑñѽ∩ÑΓ ¼¿¡¿¼á½∞¡«Ñ º¡áτÑ¡¿Ñ Γ¿»á ß««íΘÑ¡¿⌐ ó «τÑαÑñ¿, ¿ Ñß½¿ «¡« ¡Ñ »αÑ-
- óδΦáÑΓ áíß«½εΓ¡«Ñ º¡áτÑ¡¿Ñ »áαá¼ÑΓαá type, ó«ºóαáΘáÑΓ »α«µÑßßπ »Ñαó«Ñ ß««í-
- ΘÑ¡¿Ñ φΓ«ú« Γ¿»á. ìá»α¿¼Ñα, Ñß½¿ «τÑαÑñ∞ ß«ßΓ«¿Γ ¿º ΓαÑσ ß««íΘÑ¡¿⌐, ¿¼ÑεΘ¿σ
- Γ¿» 3, 1 ¿ 2, ß««ΓóÑΓßΓóÑ¡¡«, á »«½∞º«óáΓѽ∞ ºá»αáΦ¿óáÑΓ ß««íΘÑ¡¿Ñ ß Γ¿»«¼
- -2, ∩ñα« ó«ºóαáΘáÑΓ Ñ¼π ß««íΘÑ¡¿Ñ Γ¿»á 1. é« óßÑσ ß½πτá∩σ, Ñß½¿ πß½«ó¿∩¼
- ºá»α«ßá ¡Ñ πñ«ó½ÑΓó«α∩ÑΓ ¡¿ «ñ¡« ¿º ß««íΘÑ¡¿⌐ ó «τÑαÑñ¿, ∩ñα« »ÑαÑó«ñ¿Γ »α«-
- µÑßß ó ß«ßΓ«∩¡¿Ñ »α¿«ßΓá¡«óá, αáºπ¼ÑÑΓß∩ Ñß½¿ Γ«½∞¬« ó »áαá¼ÑΓαÑ flag ¡Ñ πß-
- Γá¡«ó½Ñ¡ í¿Γ IPC_NOWAIT (¿¡áτÑ »α«µÑßß ¡Ñ¼Ññ½Ñ¡¡« óδσ«ñ¿Γ ¿º Σπ¡¬µ¿¿).
- Éáßß¼«Γα¿¼ »α«úαá¼¼δ, »αÑñßΓáó½Ñ¡¡δÑ ¡á É¿ßπ¡¬áσ 11.6 ¿ 11.8. Åα«úαá¼¼á
- ¡á É¿ßπ¡¬Ñ 11.8 «ßπΘÑßΓó½∩ÑΓ «íΘÑÑ «íß½πª¿óá¡¿Ñ ºá»α«ß«ó »«½∞º«óáΓѽ∞߬¿σ
- »α«µÑßß«ó (¬½¿Ñ¡Γ«ó). çá»α«ßδ, ¡á»α¿¼Ñα, ¼«úπΓ ¬áßáΓ∞ß∩ ¿¡Σ«α¼áµ¿¿, σαá¡∩-
- ΘÑ⌐ß∩ ó íáºÑ ñá¡¡δσ; «íß½πª¿óáεΘ¿⌐ »α«µÑßß (ßÑαóÑα) óδßΓπ»áÑΓ ¡Ñ«íσ«ñ¿¼δ¼
- »«ßαÑñ¡¿¬«¼ »α¿ «íαáΘÑ¡¿¿ ¬ íáºÑ ñá¡¡δσ, Γᬫ⌐ »«α∩ñ«¬ «í½ÑúτáÑΓ »«ññÑαªá¡¿Ñ
- µÑ½«ßΓ¡«ßΓ¿ ñá¡¡δσ ¿ «αúá¡¿ºáµ¿ε ¿σ ºáΘ¿Γδ «Γ ¡Ñßᡬµ¿«¡¿α«óá¡¡«ú« ñ«ßΓπ»á.
- Äíß½πª¿óáεΘ¿⌐ »α«µÑßß ß«ºñáÑΓ ß««íΘÑ¡¿Ñ »πΓѼ πßΓá¡«ó¬¿ Σ½áúá IPC _CREAT »α¿
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ msgrcv /* »«½πτÑ¡¿Ñ ß««íΘÑ¡¿∩ */ │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: (1) ñÑß¬α¿»Γ«α ß««íΘÑ¡¿∩ │
- │ (2) áñαÑß ¼áßß¿óá, ó ¬«Γ«αδ⌐ ºá¡«ß¿Γß∩│
- │ ß««íΘÑ¡¿Ñ │
- │ (3) αẼÑα ¼áßß¿óá │
- │ (4) Γ¿» ß««íΘÑ¡¿∩ ó ºá»α«ßÑ │
- │ (5) Σ½áú¿ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ¬«½¿τÑßΓó« íá⌐Γ ó »«½πτÑ¡¡«¼ ß««íΘÑ¡¿¿│
- │ { │
- │ »α«óÑα¿Γ∞ »αáóá ñ«ßΓπ»á; │
- │ loop: │
- │ »α«óÑα¿Γ∞ »αáó¿½∞¡«ßΓ∞ ñÑß¬α¿»Γ«αá ß««íΘÑ¡¿∩; │
- │ /* ¡á⌐Γ¿ ß««íΘÑ¡¿Ñ, ¡πª¡«Ñ »«½∞º«óáΓѽε */ │
- │ Ñß½¿ (Γ¿» ß««íΘÑ¡¿∩ ó ºá»α«ßÑ == 0) │
- │ αáßß¼«ΓαÑΓ∞ »Ñαó«Ñ ß««íΘÑ¡¿Ñ ó «τÑαÑñ¿; │
- │ ó »α«Γ¿ó¡«¼ ß½πτáÑ Ñß½¿ (Γ¿» ß««íΘÑ¡¿∩ ó ºá»α«ßÑ > 0) │
- │ αáßß¼«ΓαÑΓ∞ »Ñαó«Ñ ß««íΘÑ¡¿Ñ ó «τÑαÑñ¿, ¿¼ÑεΘÑÑ │
- │ ñá¡¡δ⌐ Γ¿»; │
- │ ó »α«Γ¿ó¡«¼ ß½πτáÑ /* Γ¿» ß««íΘÑ¡¿∩ ó ºá»α«ßÑ < 0 */│
- │ αáßß¼«ΓαÑΓ∞ »Ñαó«Ñ ¿º ß««íΘÑ¡¿⌐ ó «τÑαÑñ¿ ß ¡á¿- │
- │ ¼Ñ¡∞Φ¿¼ º¡áτÑ¡¿Ñ¼ Γ¿»á »α¿ πß½«ó¿¿, τΓ« Ñú« Γ¿» │
- │ ¡Ñ »αÑóδΦáÑΓ áíß«½εΓ¡«Ñ º¡áτÑ¡¿Ñ Γ¿»á, π¬áºá¡¡«-│
- │ ú« ó ºá»α«ßÑ; │
- │ Ñß½¿ (ß««íΘÑ¡¿Ñ ¡á⌐ñÑ¡«) │
- │ { │
- │ »ÑαÑπßΓá¡«ó¿Γ∞ αẼÑα ß««íΘÑ¡¿∩ ¿½¿ óÑα¡πΓ∞ «Φ¿í-│
- │ ¬π, Ñß½¿ αẼÑα, π¬áºá¡¡δ⌐ »«½∞º«óáΓѽѼ ß½¿Φ¬«¼│
- │ ¼á½; │
- │ ߬«»¿α«óáΓ∞ Γ¿» ß««íΘÑ¡¿∩ ¿ Ñú« ΓѬßΓ ¿º »α«ßΓ- │
- │ αá¡ßΓóá ∩ñαá ó »α«ßΓαá¡ßΓó« ºáñáτ¿; │
- │ αẫαóáΓ∞ ßó∩º∞ ß««íΘÑ¡¿∩ ß «τÑαÑñ∞ε; │
- │ óÑα¡πΓ∞ π»αáó½Ñ¡¿Ñ; │
- │ } │
- │ /* ß««íΘÑ¡¿⌐ ¡ÑΓ */ │
- │ Ñß½¿ (Σ½áú¿ ¡Ñ αáºαÑΦáεΓ »α¿«ßΓá¡áó½¿óáΓ∞ αáí«Γπ) │
- │ óÑα¡πΓ∞ π»αáó½Ñ¡¿Ñ ß «Φ¿í¬«⌐; │
- │ »α¿«ßΓá¡«ó¿Γ∞ß∩ (»«¬á ß««íΘÑ¡¿Ñ ¡Ñ »«∩ó¿Γß∩ ó «τÑαÑ- │
- │ ñ¿); │
- │ »ÑαÑ⌐Γ¿ ¡á loop; │
- │ } │
- └────────────────────────────────────────────────────────────┘
- É¿ßπ¡«¬ 11.7. ǽú«α¿Γ¼ »«½πτÑ¡¿∩ ß««íΘÑ¡¿∩
-
- 339
-
-
-
- óδ»«½¡Ñ¡¿¿ Σπ¡¬µ¿¿ msgget ¿ »«½πτáÑΓ óßÑ ß««íΘÑ¡¿∩ Γ¿-
- »á 1 - ºá»α«ßδ «Γ »α«µÑßß«ó-¬½¿Ñ¡Γ«ó. Ä¡ τ¿ΓáÑΓ ΓѬßΓ ß««íΘÑ¡¿∩, ¡áσ«ñ¿Γ
- ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑßßá-¬½¿Ñ¡Γá ¿ »α¿αáó¡¿óáÑΓ ó«ºóαáΘáѼ«Ñ º¡áτÑ¡¿Ñ Γ¿»á ß«-
- «íΘÑ¡¿∩ º¡áτÑ¡¿ε φΓ«ú« ¿ñÑ¡Γ¿Σ¿¬áΓ«αá. é ñá¡¡«¼ »α¿¼ÑαÑ «íß½πª¿óáεΘ¿⌐ »α«-
- µÑßß ó«ºóαáΘáÑΓ ó ΓѬßΓÑ ß««íΘÑ¡¿∩ »α«µÑßßπ-¬½¿Ñ¡Γπ Ñú« ¿ñÑ¡Γ¿Σ¿¬áΓ«α, ¿
- ¬½¿Ñ¡Γ »«½πτáÑΓ ß««íΘÑ¡¿∩ ß Γ¿»«¼, αáó¡δ¼ ¿ñÑ¡Γ¿Σ¿¬áΓ«α𠬽¿Ñ¡Γá. Æá¬¿¼ «í-
- αẫ¼, «íß½πª¿óáεΘ¿⌐ »α«µÑßß »«½πτáÑΓ ß««íΘÑ¡¿∩ Γ«½∞¬« «Γ ¬½¿Ñ¡Γ«ó, á ¬½¿Ñ¡Γ
- - Γ«½∞¬« «Γ «íß½πª¿óáεΘÑú« »α«µÑßßá. Éáí«Γá »α«µÑßß«ó αÑ὿ºπÑΓß∩ ó ó¿ñÑ
- ¼¡«ú«¬á¡á½∞¡«ú« óºá¿¼«ñÑ⌐ßΓó¿∩, ßΓα«∩ΘÑú«ß∩ ¡á «ß¡«óÑ «ñ¡«⌐ «τÑαÑñ¿ ß««íΘÑ-
- ¡¿⌐.
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <sys/types.h> │
- │ #include <sys/ipc.h> │
- │ #include <sys/msg.h> │
- │ │
- │ #define MSGKEY 75 │
- │ struct msgform │
- │ { │
- │ long mtype; │
- │ char mtext[256]; │
- │ }msg; │
- │ int msgid; │
- │ │
- │ main() │
- │ { │
- │ int i,pid,*pint; │
- │ extern cleanup(); │
- │ │
- │ for (i = 0; i < 20; i++) │
- │ signal(i,cleanup); │
- │ msgid = msgget(MSGKEY,0777│IPC_CREAT); │
- │ │
- │ for (;;) │
- │ { │
- │ msgrcv(msgid,&msg,256,1,0); │
- │ pint = (int *) msg.mtext; │
- │ pid = *pint; │
- │ printf("ßÑαóÑα: »«½πτ¿½ «Γ »α«µÑßßá ß pid %d\n",│
- │ pid); │
- │ msg.mtype = pid; │
- │ *pint = getpid(); │
- │ msgsnd(msgid,&msg,sizeof(int),0); │
- │ } │
- │ } │
- │ │
- │ cleanup() │
- │ { │
- │ msgctl(msgid,IPC_RMID,0); │
- │ exit(); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.8. Äíß½πª¿óáεΘ¿⌐ »α«µÑßß (ßÑαóÑα)
-
-
- æ««íΘÑ¡¿∩ ¿¼ÑεΓ Σ«α¼π "Γ¿» - ΓѬßΓ", úñÑ ΓѬßΓ »αÑñßΓáó½∩ÑΓ ß«í«⌐ »«Γ«¬
-
- 340
-
- íá⌐Γ«ó. ô¬áºá¡¿Ñ Γ¿»á ñáÑΓ »α«µÑßßἠ󫺼«ª¡«ßΓ∞ óδí¿αáΓ∞ ß««íΘÑ¡¿∩ Γ«½∞¬«
- «»αÑñѽѡ¡«ú« α«ñá, τΓ« ó Σá⌐½«ó«⌐ ß¿ßΓÑ¼Ñ ¡Ñ Γᬠ½Ñú¬« ßñѽáΓ∞. Æá¬¿¼ «íαá-
- º«¼, »α«µÑßßδ ¼«úπΓ óδí¿αáΓ∞ ¿º «τÑαÑñ¿ ß««íΘÑ¡¿∩ «»αÑñѽѡ¡«ú« Γ¿»á ó »«-
- α∩ñ¬Ñ ¿σ »«ßΓπ»½Ñ¡¿∩, »α¿τѼ φΓá «τÑαÑñ¡«ßΓ∞ úáαá¡Γ¿απÑΓß∩ ∩ñα«¼. ìÑß¼«Γα∩
- ¡á Γ«, τΓ« «í¼Ñ¡ ß««íΘÑ¡¿∩¼¿ ¼«ªÑΓ íδΓ∞ αÑ὿º«óá¡ ¡á »«½∞º«óáΓѽ∞߬«¼ πα«ó-
- ¡Ñ ßαÑñßΓóἿ Σá⌐½«ó«⌐ ß¿ßΓѼδ, »αÑñßΓáó½Ñ¡¡δ⌐ óáΦѼπ ó¡¿¼á¡¿ε ¼Ñσá¡¿º¼
- «íÑß»Ñτ¿óáÑΓ í«½ÑÑ φΣΣÑ¬Γ¿ó¡πε «αúá¡¿ºáµ¿ε »ÑαÑñáτ¿ ñá¡¡δσ ¼Ñªñπ »α«µÑßßἿ.
- æ »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ msgctl »α«µÑßß ¼«ªÑΓ ºá»α«ß¿Γ∞ ¿¡Σ«α¼áµ¿ε «
- ßΓáΓπßÑ ñÑß¬α¿»Γ«αá ß««íΘÑ¡¿∩, πßΓá¡«ó¿Γ∞ φëà ßΓáΓπß ¿½¿ πñ὿Γ∞ ñÑß¬α¿»Γ«α
- ß««íΘÑ¡¿∩ ¿º ß¿ßΓѼδ. æ¿¡Γá¬ß¿ß ó맮óá Σπ¡¬µ¿¿:
-
- msgctl(id,cmd,mstatbuf)
-
- úñÑ id - ñÑß¬α¿»Γ«α ß««íΘÑ¡¿∩, cmd - Γ¿» ¬«¼á¡ñδ, mstatbuf - áñαÑß »«½∞º«óá-
- Γѽ∞߬«⌐ ßΓαπ¬Γπαδ, ó ¬«Γ«α«⌐ íπñπΓ σαá¡¿Γ∞ß∩ π»αáó½∩εΘ¿Ñ »áαá¼ÑΓαδ ¿½¿ αÑ-
- ºπ½∞ΓáΓδ «íαáí«Γ¬¿ ºá»α«ßá. ü«½ÑÑ »«ñα«í¡« «í áαúπ¼Ñ¡Γáσ Σπ¡¬µ¿¿ »«⌐ñÑΓ αÑτ∞
- ó Åα¿½«ªÑ¡¿¿.
- éÑα¡Ñ¼ß∩ ¬ »α¿¼Ñαπ, »αÑñßΓáó½Ñ¡¡«¼π ¡á É¿ßπ¡¬Ñ 11.8. Äíß½πª¿óáεΘ¿⌐ »α«-
- µÑßß »α¿¡¿¼áÑΓ ß¿ú¡á½δ ¿ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ cleanup πñá½∩ÑΓ «τÑαÑñ∞ ß««íΘÑ¡¿⌐
- ¿º ß¿ßΓѼδ. àß½¿ ªÑ ¿¼ ¡Ñ í佫 »«⌐¼á¡« ¡¿ «ñ¡«ú« ß¿ú¡á½á ¿½¿ íδ½ »«½πτÑ¡
- ß¿ú¡á½ SIGKILL, «τÑαÑñ∞ ß««íΘÑ¡¿⌐ «ßΓáÑΓß∩ ó ß¿ßΓѼÑ, ñáªÑ Ñß½¿ ¡á ¡ÑÑ ¡Ñ
- ßßδ½áÑΓß∩ ¡¿ «ñ¿¡ ¿º »α«µÑßß«ó. äá½∞¡Ñ⌐Φ¿Ñ »«»δΓ¬¿ ¿ß¬½ετ¿Γѽ∞¡« ß«ºñá¡¿∩
- ¡«ó«⌐ «τÑαÑñ¿ ß««íΘÑ¡¿⌐ ß ñá¡¡δ¼ ¬½ετ«¼ (¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼) ¡Ñ íπñπΓ ¿¼ÑΓ∞ πß-
- »Ñσ ñ« ΓÑσ »«α, »«¬á ßΓáαá∩ «τÑαÑñ∞ ¡Ñ íπñÑΓ πñá½Ñ¡á ¿º ß¿ßΓѼδ.
-
-
- E11.2.2 Éáºñѽѡ¿Ñ »á¼∩Γ¿F
-
- Åα«µÑßßδ ¼«úπΓ óºá¿¼«ñÑ⌐ßΓó«óáΓ∞ ñαπú ß ñαπú«¼ ¡Ñ»«ßαÑñßΓóÑ¡¡« »πΓѼ
- αáºñѽѡ¿∩ (ß«ó¼ÑßΓ¡«ú« ¿ß»«½∞º«óá¡¿∩) πτáßΓ¬«ó ó¿αΓπá½∞¡«ú« áñαÑß¡«ú« »α«ß-
- Γαá¡ßΓóá ¿ «í¼Ñ¡á ñá¡¡δ¼¿ τÑαѺ αáºñѽ∩Ѽπε »á¼∩Γ∞. æ¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ ñ½∩
- αáí«Γδ ß αáºñѽ∩Ѽ«⌐ »á¼∩Γ∞ε ¿¼ÑεΓ ¼¡«ú« ßσ«ñ¡«ú« ß ß¿ßΓѼ¡δ¼¿ Σπ¡¬µ¿∩¼¿ ñ½∩
- αáí«Γδ ß ß««íΘÑ¡¿∩¼¿. öπ¡¬µ¿∩ shmget ß«ºñáÑΓ ¡«óπε «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩-
- Γ¿ ¿½¿ ó«ºóαáΘáÑΓ áñαÑß πªÑ ßπΘÑßΓóπεΘÑ⌐ «í½áßΓ¿, Σπ¡¬µ¿∩ shmat ½«ú¿τÑ߬¿
- »α¿ß«Ññ¿¡∩ÑΓ «í½áßΓ∞ ¬ ó¿αΓπá½∞¡«¼π áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »α«µÑßßá, Σπ¡¬µ¿∩
- shmdt «Γß«Ññ¿¡∩ÑΓ ÑÑ, á Σπ¡¬µ¿∩ shmctl ¿¼ÑÑΓ ñѽ« ß αẽ¿τ¡δ¼¿ »áαá¼ÑΓαἿ,
- ßó∩ºá¡¡δ¼¿ ß αáºñѽ∩Ѽ«⌐ »á¼∩Γ∞ε. Åα«µÑßßδ óÑñπΓ τΓÑ¡¿Ñ ¿ ºá»¿ß∞ ñá¡¡δσ ó
- «í½áßΓ¿ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿, ¿ß»«½∞ºπ∩ ñ½∩ φΓ«ú« ΓÑ ªÑ ßá¼δÑ ¼áΦ¿¡¡δÑ ¬«¼á¡-
- ñδ, τΓ« ¿ »α¿ αáí«ΓÑ ß «íδτ¡«⌐ »á¼∩Γ∞ε. Å«ß½Ñ »α¿ß«Ññ¿¡Ñ¡¿∩ ¬ ó¿αΓπá½∞¡«¼π
- áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »α«µÑßßá «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ßΓá¡«ó¿Γß∩ ñ«ß-
- Γπ»¡á ΓᬠªÑ, ¬á¬ ½εí«⌐ πτáßΓ«¬ ó¿αΓπá½∞¡«⌐ »á¼∩Γ¿; ñ½∩ ñ«ßΓπ»á ¬ ¡áσ«ñ∩Θ¿¼-
- ß∩ ó ¡Ñ⌐ ñá¡¡δ¼ ¡Ñ ¡πª¡δ «íαáΘÑ¡¿∩ ¬ ¬á¬¿¼-Γ« ñ«»«½¡¿Γѽ∞¡δ¼ ß¿ßΓѼ¡δ¼ Σπ¡¬-
- µ¿∩¼.
- æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ shmget:
-
- shmid = shmget(key,size,flag);
-
- úñÑ size - «íΩѼ «í½áßΓ¿ ó íá⌐Γáσ. ƒñα« ¿ß»«½∞ºπÑΓ key ñ½∩ óÑñÑ¡¿∩ »«¿ß¬á ó
- Γáí½¿µÑ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿: Ñß½¿ »«ñσ«ñ∩Θá∩ ºá»¿ß∞ «í¡áαπªÑ¡á ¿ Ñß½¿ αáºαÑ-
- ΦÑ¡¿Ñ ¡á ñ«ßΓπ» ¿¼ÑÑΓß∩, ∩ñα« ó«ºóαáΘáÑΓ óδºδóáεΘѼπ »α«µÑßßπ π¬áºá¡¡δ⌐ ó
- ºá»¿ß¿ ñÑß¬α¿»Γ«α. àß½¿ ºá»¿ß∞ ¡Ñ ¡á⌐ñÑ¡á ¿ Ñß½¿ »«½∞º«óáΓѽ∞ πßΓá¡«ó¿½ Σ½áú
- IPC_CREAT, π¬áºδóáεΘ¿⌐ ¡á ¡Ñ«íσ«ñ¿¼«ßΓ∞ ß«ºñá¡¿∩ ¡«ó«⌐ «í½áßΓ¿, ∩ñα« »α«óÑ-
- α∩ÑΓ ¡áσ«ªñÑ¡¿Ñ αẼÑαá «í½áßΓ¿ ó πßΓá¡«ó½Ñ¡¡δσ ß¿ßΓѼ«⌐ »αÑñѽáσ ¿ óδñѽ∩ÑΓ
- «í½áßΓ∞ »« á½ú«α¿Γ¼π allocreg (αáºñѽ 6.5.2). ƒñα« ºá»¿ßδóáÑΓ πßΓá¡«ó¬¿ »αáó
- ñ«ßΓπ»á, αẼÑα «í½áßΓ¿ ¿ π¬áºáΓѽ∞ ¡á ß««ΓóÑΓßΓóπεΘπε ºá»¿ß∞ Γáí½¿µδ «í½áß-
- ΓÑ⌐ ó Γáí½¿µπ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ (É¿ßπ¡«¬ 11.9) ¿ πßΓá¡áó½¿óáÑΓ Σ½áú, ßó¿ñÑ-
- Γѽ∞ßΓóπεΘ¿⌐ « Γ«¼, τΓ« ß «í½áßΓ∞ε ¡Ñ ßó∩ºá¡á «Γñѽ∞¡á∩ »á¼∩Γ∞. Äí½áßΓ¿ óδ-
- ñѽ∩ÑΓß∩ »á¼∩Γ∞ (Γáí½¿µδ ßΓαá¡¿µ ¿ Γ.».) Γ«½∞¬« Γ«úñá, ¬«úñá »α«µÑßß »α¿ß«Ñ-
- ñ¿¡∩ÑΓ «í½áßΓ∞ ¬ ßó«Ñ¼π áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ. ƒñα« πßΓá¡áó½¿óáÑΓ ΓᬪÑ
-
- 341
-
- Σ½áú, ú«ó«α∩Θ¿⌐ « Γ«¼, τΓ« »« ºáóÑαΦÑ¡¿¿ »«ß½Ññ¡Ñú« ßó∩ºá¡¡«ú« ß «í½áßΓ∞ε
- »α«µÑßßá «í½áßΓ∞ ¡Ñ ñ«½ª¡á «ßó«í«ªñáΓ∞ß∩. Æá¬¿¼ «íαẫ¼, ñá¡¡δÑ ó αáºñѽ∩Ñ-
- ¼«⌐ »á¼∩Γ¿ «ßΓáεΓß∩ ó ß«σαá¡¡«ßΓ¿, ñáªÑ Ñß½¿ «¡á ¡Ñ »α¿¡áñ½Ñª¿Γ ¡¿ «ñ¡«¼π ¿º
- »α«µÑßß«ó (¬á¬ τáßΓ∞ ó¿αΓπá½∞¡«ú« áñαÑß¡«ú« »α«ßΓαá¡ßΓóá »«ß½Ññ¡Ñú«).
-
- Æáí½¿µá αáº- Æáí½¿µá »α«µÑßß«ó -
- ñѽ∩Ѽ«⌐ »á- Æáí½¿µá «í½áßΓÑ⌐ τáßΓ¡á∩ Γáí½¿µá «í-
- ¼∩Γ¿ ½áßΓÑ⌐ »α«µÑßßá
- ┌──────────┐ ┌──────────────┐ ┌─────────┐
- │ ────┼────┐ │ │ ┌────┼──── │
- ├──────────┤ ┌│─>├──────────────┤<────┘ ├─────────┤
- │ ────┼───┘│ │ │ ┌───┼──── │
- ├──────────┤ │ ├──────────────┤<────┐│ ├─────────┤
- │ ────┼──┐ │ │ │ └│───┼──── │
- ├──────────┤ │ │ ├──────────────┤ │ ├─────────┤
- │ ∙ │ │ │ │ │ │ │ │
- │ ∙ │ │ └─>├──────────────┤ │ ├─────────┤
- │ ∙ │ │ │ │ │ │ │
- │ ∙ │ └───>├──────────────┤<─────┘ ├─────────┤
- │ ∙ │ │ │ (»«ß½Ñ │ │
- │ ∙ │ ├──────────────┤ shmat) ├─────────┤
- │ ∙ │ │ ∙ │ │ │
- │ ∙ │ │ ∙ │ ├─────────┤
- │ ∙ │ └──────────────┘ │ ∙ │
- │ ∙ │ │ ∙ │
- └──────────┘ └─────────┘
-
- É¿ßπ¡«¬ 11.9. æΓαπ¬Γπαδ ñá¡¡δσ, ¿ß»«½∞ºπѼδÑ »α¿ αáºñѽѡ¿¿ »á¼∩Γ¿
-
-
- Åα«µÑßß »α¿ß«Ññ¿¡∩ÑΓ «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ¬ ßó«Ñ¼π ó¿αΓπá½∞¡«¼π
- áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ ß »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ shmat:
-
- virtaddr = shmat(id,addr,flags);
-
- ç¡áτÑ¡¿Ñ id, ó«ºóαáΘáѼ«Ñ Σπ¡¬µ¿Ñ⌐ shmget, ¿ñÑ¡Γ¿Σ¿µ¿απÑΓ «í½áßΓ∞ αáºñѽ∩Ñ-
- ¼«⌐ »á¼∩Γ¿, addr ∩ó½∩ÑΓß∩ ó¿αΓπá½∞¡δ¼ áñαÑß«¼, »« ¬«Γ«α«¼π »«½∞º«óáΓѽ∞ σ«-
- τÑΓ »«ñ¬½ετ¿Γ∞ «í½áßΓ∞, á ß »«¼«Θ∞ε Σ½áú«ó (flags) ¼«ª¡« π¬áºáΓ∞, »αÑñ¡áº¡á-
- τÑ¡á ½¿ «í½áßΓ∞ Γ«½∞¬« ñ½∩ τΓÑ¡¿∩ ¿ ¡πª¡« ½¿ ∩ñα𠫬απú½∩Γ∞ º¡áτÑ¡¿Ñ π¬áºá¡-
- ¡«ú« »«½∞º«óáΓѽѼ áñαÑßá. 髺óαáΘáѼ«Ñ Σπ¡¬µ¿Ñ⌐ º¡áτÑ¡¿Ñ, virtaddr, »αÑñß-
- Γáó½∩ÑΓ ß«í«⌐ ó¿αΓπá½∞¡δ⌐ áñαÑß, »« ¬«Γ«α«¼π ∩ñα« »α«¿ºóѽ« »«ñ¬½ετÑ¡¿Ñ «í-
- ½áßΓ¿ ¿ ¬«Γ«αδ⌐ ¡Ñ óßÑúñá ß«ó»áñáÑΓ ß áñαÑß«¼, π¬áºá¡¡δ¼ »«½∞º«óáΓѽѼ.
- é ¡áτá½Ñ óδ»«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ shmat ∩ñα« »α«óÑα∩ÑΓ ¡á½¿τ¿Ñ π
- »α«µÑßßá ¡Ñ«íσ«ñ¿¼δσ »αáó ñ«ßΓπ»á ¬ «í½áßΓ¿ (É¿ßπ¡«¬ 11.10). Ä¡« ¿ßß½ÑñπÑΓ
- π¬áºá¡¡δ⌐ »«½∞º«óáΓѽѼ áñαÑß; Ñß½¿ «¡ αáóÑ¡ 0, ∩ñα« óδí¿αáÑΓ ó¿αΓπá½∞¡δ⌐
- áñαÑß »« ßó«Ñ¼π πß¼«ΓαÑ¡¿ε.
- Äí½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ¡Ñ ñ«½ª¡á »ÑαÑßѬáΓ∞ß∩ ó ó¿αΓπá½∞¡«¼ áñαÑß¡«¼
- »α«ßΓαá¡ßΓóÑ »α«µÑßßá ß ñαπú¿¼¿ «í½áßΓ∩¼¿; ß½Ññ«óáΓѽ∞¡«, ÑÑ óδí«α ñ«½ªÑ¡
- »α«¿ºó«ñ¿Γ∞ß∩ αáºπ¼¡« ¿ «ßë᫪¡«. Æá¬, ¡á»α¿¼Ñα, »α«µÑßß ¼«ªÑΓ πóѽ¿τ¿Γ∞
- αẼÑα »α¿¡áñ½ÑªáΘÑ⌐ Ѽπ «í½áßΓ¿ ñá¡¡δσ ß »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ brk, ¿
- ¡«óá∩ «í½áßΓ∞ ñá¡¡δσ íπñÑΓ ß«ñÑαªáΓ∞ áñαÑßá, ߼Ѫ¡δÑ ß »αѪ¡Ñ⌐ «í½áßΓ∞ε; »«-
- φΓ«¼π, ∩ñαπ ¡Ñ ß½ÑñπÑΓ »α¿ß«Ññ¿¡∩Γ∞ «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ß½¿Φ¬«¼ í½¿º-
- ¬« ¬ «í½áßΓ¿ ñá¡¡δσ »α«µÑßßá. Æá¬ ªÑ ¡Ñ ß½ÑñπÑΓ αẼÑΘáΓ∞ «í½áßΓ∞ αáºñѽ∩Ñ-
- ¼«⌐ »á¼∩Γ¿ óí½¿º¿ «Γ óÑαΦ¿¡δ ßΓѬá, τΓ«íδ ßΓѬ »α¿ ßó«Ñ¼ »«ß½ÑñπεΘѼ πóѽ¿-
- τÑ¡¿¿ ¡Ñ ºá½Ñºá½ ºá ÑÑ »αÑñѽδ. àß½¿, ¡á»α¿¼Ñα, ßΓѬ αáßΓÑΓ ó ¡á»αáó½Ñ¡¿¿
- πóѽ¿τÑ¡¿∩ áñαÑß«ó, ½πτΦÑ óßÑú« αẼÑßΓ¿Γ∞ «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ¡Ñ»«ß-
- αÑñßΓóÑ¡¡« »ÑαÑñ ¡áτὫ¼ «í½áßΓ¿ ßΓѬá.
- ƒñα« »α«óÑα∩ÑΓ ó«º¼«ª¡«ßΓ∞ αẼÑΘÑ¡¿∩ «í½áßΓ¿ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ó áñ-
-
-
- 342
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ shmat /* »«ñ¬½ετ¿Γ∞ αáºñѽ∩Ѽπε »á¼∩Γ∞ */ │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: (1) ñÑß¬α¿»Γ«α «í½áßΓ¿ αáºñѽ∩Ѽ«⌐ │
- │ »á¼∩Γ¿ │
- │ (2) ó¿αΓπá½∞¡δ⌐ áñαÑß ñ½∩ »«ñ¬½ετÑ¡¿∩ │
- │ «í½áßΓ¿ │
- │ (3) Σ½áú¿ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ó¿αΓπá½∞¡δ⌐ áñαÑß, »« ¬«Γ«α«¼π «í½áßΓ∞│
- │ »«ñ¬½ετÑ¡á Σá¬Γ¿τÑ߬¿ │
- │ { │
- │ »α«óÑα¿Γ∞ »αáó¿½∞¡«ßΓ∞ π¬áºá¡¿∩ ñÑß¬α¿»Γ«αá, »αáóá ñ«- │
- │ ßΓπ»á ¬ «í½áßΓ¿; │
- │ Ñß½¿ (»«½∞º«óáΓѽ∞ π¬áºá½ ó¿αΓπá½∞¡δ⌐ áñαÑß) │
- │ { │
- │ «¬απú½¿Γ∞ ó¿αΓπá½∞¡δ⌐ áñαÑß ó ß««ΓóÑΓßΓó¿¿ ß Σ½á- │
- │ úἿ; │
- │ »α«óÑα¿Γ∞ ßπΘÑßΓó«óá¡¿Ñ »«½πτÑ¡¡«ú« áñαÑßá, αẼÑα│
- │ «í½áßΓ¿; │
- │ } │
- │ ó »α«Γ¿ó¡«¼ ß½πτáÑ /* »«½∞º«óáΓѽ∞ σ«τÑΓ, τΓ«íδ ∩ñα« │
- │ * ßἫ ¡áΦ½« »«ñσ«ñ∩Θ¿⌐ áñαÑß */ │
- │ ∩ñα« óδí¿αáÑΓ áñαÑß: ó ß½πτáÑ ¡Ñπñáτ¿ óδñáÑΓß∩ │
- │ «Φ¿í¬á; │
- │ »α¿ß«Ññ¿¡¿Γ∞ «í½áßΓ∞ ¬ áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »α«µÑßßá │
- │ (á½ú«α¿Γ¼ attachreg); │
- │ Ñß½¿ («í½áßΓ∞ »α¿ß«Ññ¿¡∩ÑΓß∩ ó»ÑαóδÑ) │
- │ óδñѽ¿Γ∞ Γáí½¿µδ ßΓαá¡¿µ ¿ «ΓóÑßΓ¿ »á¼∩Γ∞ »«ñ ¡ÑÑ │
- │ (á½ú«α¿Γ¼ growreg); │
- │ óÑα¡πΓ∞ (ó¿αΓπá½∞¡δ⌐ áñαÑß Σá¬Γ¿τÑ߬«ú« »α¿ß«Ññ¿¡Ñ¡¿∩ │
- │ «í½áßΓ¿); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.10. ǽú«α¿Γ¼ »α¿ß«Ññ¿¡Ñ¡¿∩ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿
-
-
- αÑß¡«¼ »α«ßΓαá¡ßΓóÑ »α«µÑßßá ¿ »α¿ß«Ññ¿¡∩ÑΓ ÑÑ ß »«¼«Θ∞ε á½ú«α¿Γ¼á
- attachreg. àß½¿ óδºδóáεΘ¿⌐ »α«µÑßß ∩ó½∩ÑΓß∩ »Ñαóδ¼ »α«µÑßß«¼, ¬«Γ«αδ⌐ »α¿ß«-
- Ññ¿¡∩ÑΓ «í½áßΓ∞, ∩ñα« óδñѽ∩ÑΓ ñ½∩ «í½áßΓ¿ óßÑ ¡Ñ«íσ«ñ¿¼δÑ Γáí½¿µδ, ¿ß»«½∞-
- ºπ∩ á½ú«α¿Γ¼ growreg, ºá»¿ßδóáÑΓ óαѼ∩ »α¿ß«Ññ¿¡Ñ¡¿∩ ó ß««ΓóÑΓßΓóπεΘÑÑ »«½Ñ
- Γáí½¿µδ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ¿ ó«ºóαáΘáÑΓ »α«µÑßßπ ó¿αΓπá½∞¡δ⌐ áñαÑß, »« ¬«Γ«-
- α«¼π «í½áßΓ∞ íδ½á ¿¼ »«ñ¬½ετÑ¡á Σá¬Γ¿τÑ߬¿.
- ÄΓß«Ññ¿¡Ñ¡¿Ñ «í½áßΓ¿ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ «Γ ó¿αΓπá½∞¡«ú« áñαÑß¡«ú« »α«ßΓ-
- αá¡ßΓóá »α«µÑßßá óδ»«½¡∩ÑΓ Σπ¡¬µ¿∩
-
- shmdt(addr)
-
- úñÑ addr - ó¿αΓπá½∞¡δ⌐ áñαÑß, ó«ºóαáΘÑ¡¡δ⌐ Σπ¡¬µ¿Ñ⌐ shmat. ìÑß¼«Γα∩ ¡á Γ«,
- τΓ« í«½ÑÑ ½«ú¿τ¡«⌐ »αÑñßΓáó½∩ÑΓß∩ »ÑαÑñáτá ¿ñÑ¡Γ¿Σ¿¬áΓ«αá, »α«µÑßß ¿ß»«½∞ºπ-
- ÑΓ ó¿αΓπá½∞¡δ⌐ áñαÑß αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿, »«ß¬«½∞¬π «ñ¡á ¿ Γá ªÑ «í½áßΓ∞ αáº-
- ñѽ∩Ѽ«⌐ »á¼∩Γ¿ ¼«ªÑΓ íδΓ∞ »«ñ¬½ετÑ¡á ¬ áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »α«µÑßßá ¡Ñß-
- ¬«½∞¬« αáº, ¬ Γ«¼π ªÑ ÑÑ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ¼«ªÑΓ íδΓ∞ πñá½Ñ¡ ¿º ß¿ßΓѼδ. ƒñα«
- »α«¿ºó«ñ¿Γ »«¿ß¬ «í½áßΓ¿ »« π¬áºá¡¡«¼π áñαÑßπ ¿ «Γß«Ññ¿¡∩ÑΓ ÑÑ «Γ áñαÑß¡«ú«
- »α«ßΓαá¡ßΓóá »α«µÑßßá, ¿ß»«½∞ºπ∩ á½ú«α¿Γ¼ detachreg (αáºñѽ 6.5.7). ū߬«½∞-
- ¬π ó Γáí½¿µáσ «í½áßΓÑ⌐ «ΓßπΓßΓóπεΓ «íαáΓ¡δÑ π¬áºáΓѽ¿ ¡á Γáí½¿µπ αáºñѽ∩Ѽ«⌐
- »á¼∩Γ¿, ∩ñαπ »α¿σ«ñ¿Γß∩ »α«ß¼áΓα¿óáΓ∞ Γáí½¿µπ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ó »«¿ß¬áσ
- ºá»¿ß¿, π¬áºδóáεΘÑ⌐ ¡á ñá¡¡πε «í½áßΓ∞, ¿ ºá»¿ßδóáΓ∞ ó ß««ΓóÑΓßΓóπεΘÑÑ »«½Ñ
- óαѼ∩ »«ß½Ññ¡Ñú« «Γ¬½ετÑ¡¿∩ «í½áßΓ¿.
- Éáßß¼«Γα¿¼ »α«úαá¼¼π, »αÑñßΓáó½Ñ¡¡πε ¡á É¿ßπ¡¬Ñ 11.11. é ¡Ñ⌐ «»¿ßδóáÑΓß∩
-
- 343
-
- »α«µÑßß, ß«ºñáεΘ¿⌐ «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ αẼÑα«¼ 128 èíá⌐Γ ¿ ñóáªñδ
- »α¿ß«Ññ¿¡∩εΘ¿⌐ ÑÑ ¬ ßó«Ñ¼π áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »« αáº¡δ¼ ó¿αΓπá½∞¡δ¼ áñ-
- αÑßá¼. é "»Ñαóπε" «í½áßΓ∞ «¡ ºá»¿ßδóáÑΓ ñá¡¡δÑ, á τ¿ΓáÑΓ ¿σ ¿º "óΓ«α«⌐" «í-
- ½áßΓ¿. ìá É¿ßπ¡¬Ñ 11.12 »«¬áºá¡ ñαπú«⌐ »α«µÑßß, »α¿ß«Ññ¿¡∩εΘ¿⌐ Γπ ªÑ «í½áßΓ∞
- («¡ »«½πτáÑΓ Γ«½∞¬« 64 èíá⌐Γá, Γᬿ¼ «íαẫ¼, ¬áªñδ⌐ »α«µÑßß ¼«ªÑΓ ¿ß»«½∞º«-
- óáΓ∞ αạδ⌐ «íΩѼ «í½áßΓ¿ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿); «¡ ªñÑΓ ¼«¼Ñ¡Γá, ¬«úñá »Ñαóδ⌐
- »α«µÑßß ºá»¿ΦÑΓ ó »Ñαó«Ñ »α¿¡áñ½ÑªáΘÑÑ «í½áßΓ¿ ß½«ó« ½εí«Ñ «Γ½¿τ¡«Ñ «Γ ¡π½∩
- º¡áτÑ¡¿Ñ, ¿ ºáΓѼ »α¿¡¿¼áÑΓß∩ ßτ¿ΓδóáΓ∞ ñá¡¡δÑ ¿º «í½áßΓ¿. ÅÑαóδ⌐ »α«µÑßß
- ñѽáÑΓ "»áπºπ" (pause), »αÑñ«ßΓáó½∩∩ óΓ«α«¼π »α«µÑßßπ 󫺼«ª¡«ßΓ∞ óδ»«½¡Ñ-
- ¡¿∩; ¬«úñá »Ñαóδ⌐ »α«µÑßß »α¿¡¿¼áÑΓ ß¿ú¡á½, «¡ πñá½∩ÑΓ «í½áßΓ∞ αáºñѽ∩Ѽ«⌐
- »á¼∩Γ¿ ¿º ß¿ßΓѼδ.
- Åα«µÑßß ºá»αáΦ¿óáÑΓ ¿¡Σ«α¼áµ¿ε « ß«ßΓ«∩¡¿¿ «í½áßΓ¿ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ¿
- »α«¿ºó«ñ¿Γ πßΓá¡«ó¬π »áαá¼ÑΓα«ó ñ½∩ ¡ÑÑ ß »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ shmctl:
-
- shmctl(id,cmd,shmstatbuf);
-
- ç¡áτÑ¡¿Ñ id ¿ñÑ¡Γ¿Σ¿µ¿απÑΓ ºá»¿ß∞ Γáí½¿µδ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿, cmd «»αÑñѽ∩ÑΓ
- Γ¿» «»Ñαᵿ¿, á shmstatbuf ∩ó½∩ÑΓß∩ áñαÑß«¼ »«½∞º«óáΓѽ∞߬«⌐ ßΓαπ¬Γπαδ, ó
- ¬«Γ«απε »«¼ÑΘáÑΓß∩ ¿¡Σ«α¼áµ¿∩ « ß«ßΓ«∩¡¿¿ «í½áßΓ¿. ƒñα« Γαá¬ΓπÑΓ Γ¿» «»Ñαá-
- µ¿¿ Γ«τ¡« ΓᬠªÑ, ¬á¬ ¿ »α¿ π»αáó½Ñ¡¿¿ ß««íΘÑ¡¿∩¼¿. ôñá½∩∩ «í½áßΓ∞ αáºñѽ∩Ñ-
- ¼«⌐ »á¼∩Γ¿, ∩ñα« «ßó«í«ªñáÑΓ ß««ΓóÑΓßΓóπεΘπε Ñ⌐ ºá»¿ß∞ ó Γáí½¿µÑ αáºñѽ∩Ѽ«⌐
- »á¼∩Γ¿ ¿ »α«ß¼áΓα¿óáÑΓ Γáí½¿µπ «í½áßΓÑ⌐: Ñß½¿ «í½áßΓ∞ ¡Ñ íδ½á »α¿ß«Ññ¿¡Ñ¡á
- ¡¿ ¬ «ñ¡«¼π ¿º »α«µÑßß«ó, ∩ñα« «ßó«í«ªñáÑΓ ºá»¿ß∞ Γáí½¿µδ ¿ óßÑ óδñѽѡ¡δÑ
- «í½áßΓ¿ αÑßπαßδ, ¿ß»«½∞ºπ∩ ñ½∩ φΓ«ú« á½ú«α¿Γ¼ freereg (αáºñѽ 6.5.6). àß½¿
- ªÑ «í½áßΓ∞ »«-»αѪ¡Ñ¼π »«ñ¬½ετÑ¡á ¬ ¬á¬¿¼-Γ« »α«µÑßßá¼ (º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á
- ßß佫¬ ¡á ¡ÑÑ í«½∞ΦÑ 0), ∩ñα« Γ«½∞¬« ßíαáßδóáÑΓ Σ½áú, ú«ó«α∩Θ¿⌐ « Γ«¼, τΓ«
- »« ºáóÑαΦÑ¡¿¿ »«ß½Ññ¡Ñú« ßó∩ºá¡¡«ú« ß ¡Ñε »α«µÑßßá «í½áßΓ∞ ¡Ñ ñ«½ª¡á «ßó«-
- í«ªñáΓ∞ß∩. Åα«µÑßßδ, πªÑ ¿ß»«½∞ºπεΘ¿Ñ «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿, »α«ñ«½ªáεΓ
- αáí«ΓáΓ∞ ß ¡Ñ⌐, ¡«óδÑ ªÑ »α«µÑßßδ ¡Ñ ¼«úπΓ »α¿ß«Ññ¿¡¿Γ∞ ÑÑ. è«úñá óßÑ »α«-
- µÑßßδ «Γ¬½ετáΓ «í½áßΓ∞, ∩ñα« «ßó«í«ñ¿Γ ÑÑ. ¥Γ« »«σ«ªÑ ¡á Γ«, ¬á¬ ó Σá⌐½«ó«⌐
- ß¿ßΓÑ¼Ñ »«ß½Ñ αáºαδóá ßó∩º¿ ß Σá⌐½«¼ »α«µÑßß ¼«ªÑΓ ó¡«ó∞ «Γ¬αδΓ∞ Ñú« ¿ »α«-
- ñ«½ªáΓ∞ ß ¡¿¼ αáí«Γπ.
-
-
- E11.2.3 æÑ¼áΣ«αδF
-
- æ¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ αáí«Γδ ß ßѼáΣ«αἿ «íÑß»Ñτ¿óáεΓ ß¿¡σα«¡¿ºáµ¿ε óδ»«½-
- ¡Ñ¡¿∩ »áαώѽ∞¡δσ »α«µÑßß«ó, »α«¿ºó«ñ∩ ¡áí«α ñÑ⌐ßΓó¿⌐ Ññ¿¡ßΓóÑ¡¡« ¡áñ úαπ»-
- »«⌐ ßѼáΣ«α«ó (ßαÑñßΓóἿ ¡¿º¬«ú« πα«ó¡∩). ä« ¿ß»«½∞º«óá¡¿∩ ßѼáΣ«α«ó, Ñß½¿
- »α«µÑßßπ ¡πª¡« í佫 ºáí½«¬¿α«óáΓ∞ ¡Ñ¬¿⌐ αÑßπαß, «¡ »α¿íÑúá½ ¬ ß«ºñá¡¿ε ß »«-
- ¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ creat ߻ѵ¿á½∞¡«ú« í½«¬¿απεΘÑú« Σá⌐½á. àß½¿ Σá⌐½ πªÑ
- ßπΘÑßΓó«óá½, Σπ¡¬µ¿∩ creat ºáóÑαΦá½áß∞ ¡Ñπñáτ¡«, ¿ »α«µÑßß ñѽὠóδó«ñ «
- Γ«¼, τΓ« αÑßπαß πªÑ ºáí½«¬¿α«óá¡ ñαπú¿¼ »α«µÑßß«¼. â½áó¡δÑ ¡Ññ«ßΓáΓ¬¿ Γᬫú«
- »«ñσ«ñá ºá¬½ετ὿ß∞ ó Γ«¼, τΓ« »α«µÑßß ¡Ñ º¡á½, ó ¬á¬«⌐ ¼«¼Ñ¡Γ Ѽπ ß½ÑñπÑΓ
- »αÑñ»α¿¡∩Γ∞ ß½ÑñπεΘπε »«»δΓ¬π, á Γá¬ªÑ ó Γ«¼, τΓ« í½«¬¿απεΘ¿Ñ Σá⌐½δ ß½πτá⌐¡«
- «ßΓáó὿ß∞ ó ß¿ßΓÑ¼Ñ ó ß½πτáÑ ÑÑ
- áóáα¿⌐¡«ú« ºáóÑαΦÑ¡¿∩ ¿½¿ »ÑαѺáúαπº¬¿.
- ä¿⌐¬ßΓα«⌐ íδ½ «»πí½¿¬«óá¡ á½ú«α¿Γ¼ äѬ¬Ñαá, «»¿ßδóáεΘ¿⌐ αÑ὿ºáµ¿ε ßѼá-
- Σ«α«ó ¬á¬ µÑ½«τ¿ß½Ñ¡¡δσ «íΩÑ¬Γ«ó, ñ½∩ ¬«Γ«αδσ «»αÑñѽѡδ ñóÑ φ½Ñ¼Ñ¡Γáα¡δÑ
- «»Ñαᵿ¿: P ¿ V (ß¼. [Dijkstra 68]). Ä»Ñαᵿ∩ P ºá¬½ετáÑΓß∩ ó π¼Ñ¡∞ΦÑ¡¿¿
- º¡áτÑ¡¿∩ ßѼáΣ«αá ó Γ«¼ ß½πτáÑ, Ñß½¿ «¡« í«½∞ΦÑ 0, «»Ñαᵿ∩ V - ó πóѽ¿τÑ¡¿¿
- φΓ«ú« º¡áτÑ¡¿∩ (¿ Γá¼, ¿ Γá¼ ¡á Ññ¿¡¿µπ). ū߬«½∞¬π «»Ñαᵿ¿ φ½Ñ¼Ñ¡Γáα¡δÑ, ó
- ½εí«⌐ ¼«¼Ñ¡Γ óαѼѡ¿ ñ½∩ ¬áªñ«ú« ßѼáΣ«αá óδ»«½¡∩ÑΓß∩ ¡Ñ í«½ÑÑ «ñ¡«⌐ «»Ñαá-
- µ¿¿ P ¿½¿ V. æó∩ºá¡¡δÑ ß ßѼáΣ«αἿ ß¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ ∩ó½∩εΓß∩ «í«íΘÑ¡¿Ñ¼
- «»Ñαᵿ⌐, »αÑñ½«ªÑ¡¡δσ ä¿⌐¬ßΓα«⌐, ó ¡¿σ ñ«»π߬áÑΓß∩ «ñ¡«óαѼѡ¡«Ñ óδ»«½¡Ñ¡¿Ñ
- ¡Ñ߬«½∞¬¿σ «»Ñαᵿ⌐, »α¿τѼ «»Ñαᵿ¿ π¼Ñ¡∞ΦÑ¡¿∩ ¿ πóѽ¿τÑ¡¿∩ óδ»«½¡∩εΓß∩ ¡áñ
- º¡áτÑ¡¿∩¼¿, »αÑóδΦáεΘ¿¼¿ 1. ƒñα« óδ»«½¡∩ÑΓ «»Ñαᵿ¿ ¬«¼»½Ñ¬ß¡«; ¡¿ «ñ¿¡ ¿º
- »«ßΓ«α«¡¡¿σ »α«µÑßß«ó ¡Ñ ß¼«ªÑΓ »ÑαÑπßΓá¡áó½¿óáΓ∞ º¡áτÑ¡¿∩ ßѼáΣ«α«ó, »«¬á
-
-
- 344
-
- óßÑ «»Ñαᵿ¿ ¡Ñ íπñπΓ óδ»«½¡Ñ¡δ. àß½¿ ∩ñα« »« ¬á¬¿¼-½¿í« »α¿τ¿¡á¼ ¡Ñ ¼«ªÑΓ
- óδ»«½¡¿Γ∞ óßÑ «»Ñαᵿ¿, «¡« ¡Ñ óδ»«½¡∩ÑΓ ¡¿ «ñ¡«⌐; »α«µÑßß »α¿«ßΓá¡áó½¿óáÑΓ
- ßó«ε αáí«Γπ ñ« ΓÑσ »«α, »«¬á φΓá 󫺼«ª¡«ßΓ∞ ¡Ñ íπñÑΓ »αÑñ«ßΓáó½Ñ¡á.
- æÑ¼áΣ«α ó óÑαß¿¿ V ß¿ßΓѼδ UNIX ß«ßΓ«¿Γ ¿º ß½ÑñπεΘ¿σ φ½Ñ¼Ñ¡Γ«ó:
- * ç¡áτÑ¡¿Ñ ßѼáΣ«αá,
- * êñÑ¡Γ¿Σ¿¬áΓ«α »«ß½Ññ¡Ñú« ¿º »α«µÑßß«ó, αáí«ΓáóΦ¿σ ß ßѼáΣ«α«¼,
- * 諽¿τÑßΓó« »α«µÑßß«ó, «ª¿ñáεΘ¿σ πóѽ¿τÑ¡¿∩ º¡áτÑ¡¿∩ ßѼáΣ«αá,
- * 諽¿τÑßΓó« »α«µÑßß«ó, «ª¿ñáεΘ¿σ ¼«¼Ñ¡Γá, ¬«úñá º¡áτÑ¡¿Ñ ßѼáΣ«αá ßΓá¡ÑΓ
- αáó¡δ¼ 0.
- ä½∩ ß«ºñá¡¿∩ ¡áí«αá ßѼáΣ«α«ó ¿ »«½πτÑ¡¿∩ ñ«ßΓπ»á ¬ ¡¿¼ ¿ß»«½∞ºπÑΓß∩
- ß¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ semget, ñ½∩ óδ»«½¡Ñ¡¿∩ αẽ¿τ¡δσ π»αáó½∩εΘ¿σ «»Ñαᵿ⌐ ¡áñ
- ¡áí«α«¼ - Σπ¡¬µ¿∩ semctl, ñ½∩ αáí«Γδ ß« º¡áτÑ¡¿∩¼¿ ßѼáΣ«α«ó - Σπ¡¬µ¿∩
- semop.
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <sys/types.h> │
- │ #include <sys/ipc.h> │
- │ #include <sys/shm.h> │
- │ #define SHMKEY 75 │
- │ #define K 1024 │
- │ int shmid; │
- │ │
- │ main() │
- │ { │
- │ int i, *pint; │
- │ char *addr1, *addr2; │
- │ extern char *shmat(); │
- │ extern cleanup(); │
- │ │
- │ for (i = 0; i < 20; i++) │
- │ signal(i,cleanup); │
- │ shmid = shmget(SHMKEY,128*K,0777│IPC_CREAT); │
- │ addr1 = shmat(shmid,0,0); │
- │ addr2 = shmat(shmid,0,0); │
- │ printf("addr1 Ox%x addr2 Ox%x\n",addr1,addr2); │
- │ pint = (int *) addr1; │
- │ │
- │ for (i = 0; i < 256, i++) │
- │ *pint++ = i; │
- │ pint = (int *) addr1; │
- │ *pint = 256; │
- │ │
- │ pint = (int *) addr2; │
- │ for (i = 0; i < 256, i++) │
- │ printf("index %d\tvalue %d\n",i,*pint++); │
- │ │
- │ pause(); │
- │ } │
- │ │
- │ cleanup() │
- │ { │
- │ shmctl(shmid,IPC_RMID,0); │
- │ exit(); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.11. Åα¿ß«Ññ¿¡Ñ¡¿Ñ »α«µÑßß«¼ «ñ¡«⌐ ¿ Γ«⌐ ªÑ «í½áßΓ¿
- αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿ ñóáªñδ
-
-
- 345
-
- ┌─────────────────────────────────────────────────────┐
- │ #include <sys/types.h> │
- │ #include <sys/ipc.h> │
- │ #include <sys/shm.h> │
- │ │
- │ #define SHMKEY 75 │
- │ #define K 1024 │
- │ int shmid; │
- │ │
- │ main() │
- │ { │
- │ int i, *pint; │
- │ char *addr; │
- │ extern char *shmat(); │
- │ │
- │ shmid = shmget(SHMKEY,64*K,0777); │
- │ │
- │ addr = shmat(shmid,0,0); │
- │ pint = (int *) addr; │
- │ │
- │ while (*pint == 0) │
- │ ; │
- │ for (i = 0; i < 256, i++) │
- │ printf("%d\n",*pint++); │
- │ } │
- └─────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.12. Éáºñѽѡ¿Ñ »á¼∩Γ¿ ¼Ñªñπ »α«µÑßßἿ
-
-
-
- Æáí½¿µá ßѼáΣ«α«ó îáßß¿óδ ßѼáΣ«α«ó
- ┌───────┐
- │ │ ┌───┬───┬───┬───┬───┬───┬───┐
- │ ├───────>│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │
- │ │ └───┴───┴───┴───┴───┴───┴───┘
- ├───────┤
- │ │ ┌───┬───┬───┐
- │ ├───────>│ 0 │ 1 │ 2 │
- │ │ └───┴───┴───┘
- ├───────┤
- │ │ ┌───┐
- │ ├───────>│ 0 │
- │ │ └───┘
- ├───────┤
- │ │ ┌───┬───┬───┐
- │ ├───────>│ 0 │ 1 │ 2 │
- │ │ └───┴───┴───┘
- ├───────┤
- │ ∙ │
- │ ∙ │
- │ ∙ │
- │ ∙ │
- │ ∙ │
- └───────┘
-
-
- É¿ßπ¡«¬ 11.13. æΓαπ¬Γπαδ ñá¡¡δσ, ¿ß»«½∞ºπѼδÑ ó αáí«ΓÑ ¡áñ ßѼáΣ«αἿ
-
-
- 346
-
- æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ semget:
-
- id = semget(key,count,flag);
-
- úñÑ key, flag ¿ id ¿¼Ñεà ëà ªÑ ß¼δß½, τΓ« ¿ ó ñαπú¿σ ¼Ñσá¡¿º¼áσ óºá¿¼«ñÑ⌐ß-
- Γó¿∩ »α«µÑßß«ó («í¼Ñ¡ ß««íΘÑ¡¿∩¼¿ ¿ αáºñѽѡ¿Ñ »á¼∩Γ¿). é αѺπ½∞ΓáΓÑ óδ»«½-
- ¡Ñ¡¿∩ Σπ¡¬µ¿¿ ∩ñα« óδñѽ∩ÑΓ ºá»¿ß∞, π¬áºδóáεΘπε ¡á ¼áßß¿ó ßѼáΣ«α«ó ¿ ß«ñÑα-
- ªáΘπε ßτÑΓτ¿¬ count (É¿ßπ¡«¬ 11.13). é ºá»¿ß¿ Γá¬ªÑ σαá¡¿Γß∩ ¬«½¿τÑßΓó« ßÑ-
- ¼áΣ«α«ó ó ¼áßß¿óÑ, óαѼ∩ »«ß½Ññ¡Ñú« óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿⌐ semop ¿ semctl. æ¿ß-
- ΓѼ¡á∩ Σπ¡¬µ¿∩ semget ¡á É¿ßπ¡¬Ñ 11.14, ¡á»α¿¼Ñα, ß«ºñáÑΓ ßѼáΣ«α ¿º ñóπσ
- φ½Ñ¼Ñ¡Γ«ó.
- æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ semop:
-
- oldval = semop(id,oplist,count);
-
- úñÑ id - ñÑß¬α¿»Γ«α, ó«ºóαáΘáѼδ⌐ Σπ¡¬µ¿Ñ⌐ semget, oplist - π¬áºáΓѽ∞ ¡á
- ß»¿ß«¬ «»Ñαᵿ⌐, count - αẼÑα ß»¿ß¬á. 髺óαáΘáѼ«Ñ Σπ¡¬µ¿Ñ⌐ º¡áτÑ¡¿Ñ
- oldval ∩ó½∩ÑΓß∩ »αѪ¡¿¼ º¡áτÑ¡¿Ñ¼ ßѼáΣ«αá, ¡áñ
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <sys/types.h> │
- │ #include <sys/ipc.h> │
- │ #include <sys/sem.h> │
- │ │
- │ #define SEMKEY 75 │
- │ int semid; │
- │ unsigned int count; │
- │ /* «»αÑñѽѡ¿Ñ ßΓαπ¬Γπαδ sembuf ó Σá⌐½Ñ sys/sem.h │
- │ * struct sembuf { │
- │ * unsigned shortsem_num; │
- │ * short sem_op; │
- │ * short sem_flg; │
- │ }; */ │
- │ struct sembuf psembuf,vsembuf; /* «»Ñαᵿ¿ Γ¿»á P ¿ V */│
- │ │
- │ main(argc,argv) │
- │ int argc; │
- │ char *argv[]; │
- │ { │
- │ int i,first,second; │
- │ short initarray[2],outarray[2]; │
- │ extern cleanup(); │
- │ │
- │ if (argc == 1) │
- │ { │
- │ for (i = 0; i < 20; i++) │
- │ signal(i,cleanup); │
- │ semid = semget(SEMKEY,2,0777│IPC_CREAT); │
- │ initarray[0] = initarray[1] = 1; │
- │ semctl(semid,2,SETALL,initarray); │
- │ semctl(semid,2,GETALL,outarray); │
- │ printf("¡áτá½∞¡δÑ º¡áτÑ¡¿∩ ßѼáΣ«α«ó %d %d\n", │
- │ outarray[0],outarray[1]); │
- │ pause(); /* »α¿«ßΓá¡«ó ñ« »«½πτÑ¡¿∩ ß¿ú¡á½á */ │
- │ } │
- │ │
- │ /* »α«ñ«½ªÑ¡¿Ñ ¡á ß½ÑñπεΘÑ⌐ ßΓαá¡¿µÑ */ │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.14. Ä»Ñαᵿ¿ πßΓá¡«ó¬¿ ¿ ß¡∩Γ¿∩ í½«¬¿α«ó¬¿
-
-
- 347
-
- ¬«Γ«αδ¼ »α«¿ºó«ñ¿½áß∞ «»Ñαᵿ∩. èáªñδ⌐ φ½Ñ¼Ñ¡Γ ß»¿ß¬á «»Ñαᵿ⌐ ¿¼ÑÑΓ ß½Ññπε-
- Θ¿⌐ Σ«α¼áΓ:
- * ¡«¼Ñα ßѼáΣ«αá, ¿ñÑ¡Γ¿Σ¿µ¿απεΘ¿⌐ φ½Ñ¼Ñ¡Γ ¼áßß¿óá ßѼáΣ«α«ó, ¡áñ ¬«Γ«αδ¼
- óδ»«½¡∩ÑΓß∩ «»Ñαᵿ∩,
- * ¬«ñ «»Ñαᵿ¿,
- * Σ½áú¿.
-
- ┌────────────────────────────────────────────────────────────┐
- │ else if (argv[1][0] == 'a') │
- │ { │
- │ first = 0; │
- │ second = 1; │
- │ } │
- │ else │
- │ { │
- │ first = 1; │
- │ second = 0; │
- │ } │
- │ │
- │ semid = semget(SEMKEY,2,0777); │
- │ psembuf.sem_op = -1; │
- │ psembuf.sem_flg = SEM_UNDO; │
- │ vsembuf.sem_op = 1; │
- │ vsembuf.sem_flg = SEM_UNDO; │
- │ │
- │ for (count = 0; ; count++) │
- │ { │
- │ psembuf.sem_num = first; │
- │ semop(semid,&psembuf,1); │
- │ psembuf.sem_num = second; │
- │ semop(semid,&psembuf,1); │
- │ printf("»α«µÑßß %d ßτÑΓτ¿¬ %d\n",getpid(),count); │
- │ vsembuf.sem_num = second; │
- │ semop(semid,&vsembuf,1); │
- │ vsembuf.sem_num = first; │
- │ semop(semid,&vsembuf,1); │
- │ } │
- │ } │
- │ │
- │ cleanup() │
- │ { │
- │ semctl(semid,2,IPC_RMID,0); │
- │ exit(); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.14. Ä»Ñαᵿ¿ πßΓá¡«ó¬¿ ¿ ß¡∩Γ¿∩ í½«¬¿α«ó¬¿ (»α«ñ«½ªÑ¡¿Ñ)
-
-
- ƒñα« ßτ¿ΓδóáÑΓ ß»¿ß«¬ «»Ñαᵿ⌐ oplist ¿º áñαÑß¡«ú« »α«ßΓαá¡ßΓóá ºáñáτ¿ ¿
- »α«óÑα∩ÑΓ ¬«ααÑ¬Γ¡«ßΓ∞ ¡«¼Ñα«ó ßѼáΣ«α«ó, á Γá¬ªÑ ¡á½¿τ¿Ñ π »α«µÑßßá ¡Ñ«íσ«-
- ñ¿¼δσ αáºαÑΦÑ¡¿⌐ ¡á τΓÑ¡¿Ñ ¿ ¬«ααÑ¬Γ¿α«ó¬π ßѼáΣ«α«ó (É¿ßπ¡«¬ 11.15). àß½¿
- Γᬿσ αáºαÑΦÑ¡¿⌐ ¡Ñ ¿¼ÑÑΓß∩, ß¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ ºáóÑαΦáÑΓß∩ ¡Ñπñáτ¡«. àß½¿
- ∩ñαπ »α¿σ«ñ¿Γß∩ »α¿«ßΓá¡áó½¿óáΓ∞ ßó«ε αáí«Γπ »α¿ «íαáΘÑ¡¿¿ ¬ ß»¿ß¬π «»Ñαá-
- µ¿⌐, «¡« ó«ºóαáΘáÑΓ ßѼáΣ«αá¼ ¿σ »αѪ¡¿Ñ º¡áτÑ¡¿∩ ¿ ¡áσ«ñ¿Γß∩ ó ß«ßΓ«∩¡¿¿
- »α¿«ßΓá¡«óá ñ« ¡áßΓπ»½Ñ¡¿∩ «ª¿ñáѼ«ú« ß«íδΓ¿∩, »«ß½Ñ τÑú« ß¿ßΓѼ-
- ¡á∩ Σπ¡¬µ¿∩ ºá»π߬áÑΓß∩ ó¡«ó∞. ū߬«½∞¬π ∩ñα« σαá¡¿Γ ¬«ñδ «»Ñαᵿ⌐ ¡áñ ßѼá-
- Σ«αἿ ó ú½«íá½∞¡«¼ ß»¿ß¬Ñ, «¡« ó¡«ó∞ ßτ¿ΓδóáÑΓ φΓ«Γ ß»¿ß«¬ ¿º »α«ßΓαá¡ßΓóá
-
-
- 348
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ semop /* «»Ñαᵿ¿ ¡áñ ßѼáΣ«α«¼ */ │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: (1) ñÑß¬α¿»Γ«α ßѼáΣ«αá │
- │ (2) ß»¿ß«¬ «»Ñαᵿ⌐ ¡áñ ßѼáΣ«α«¼ │
- │ (3) ¬«½¿τÑßΓó« φ½Ñ¼Ñ¡Γ«ó ó ß»¿ß¬Ñ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ¿ßσ«ñ¡«Ñ º¡áτÑ¡¿Ñ ßѼáΣ«αá │
- │ { │
- │ »α«óÑα¿Γ∞ ¬«ααÑ¬Γ¡«ßΓ∞ ñÑß¬α¿»Γ«αá ßѼáΣ«αá; │
- │ start: ßτ¿ΓáΓ∞ ß»¿ß«¬ «»Ñαᵿ⌐ ¡áñ ßѼáΣ«α«¼ ¿º »α«ßΓαá¡- │
- │ ßΓóá ºáñáτ¿ ó »α«ßΓαá¡ßΓó« ∩ñαá; │
- │ »α«óÑα¿Γ∞ ¡á½¿τ¿Ñ αáºαÑΦÑ¡¿⌐ ¡á óδ»«½¡Ñ¡¿Ñ óßÑσ «»Ñαá- │
- │ µ¿⌐; │
- │ │
- │ ñ½∩ (¬áªñ«⌐ «»Ñαᵿ¿ ó ß»¿ß¬Ñ) │
- │ { │
- │ Ñß½¿ (¬«ñ «»Ñαᵿ¿ ¿¼ÑÑΓ »«½«ª¿Γѽ∞¡«Ñ º¡áτÑ¡¿Ñ) │
- │ { │
- │ »α¿íáó¿Γ∞ ¬«ñ «»Ñαᵿ¿ ¬ º¡áτÑ¡¿ε ßѼáΣ«αá; │
- │ Ñß½¿ (ñ½∩ ñá¡¡«⌐ «»Ñαᵿ¿ πßΓá¡«ó½Ñ¡ Σ½áú UNDO)│
- │ ߬«ααÑ¬Γ¿α«óáΓ∞ ßΓαπ¬Γπαπ ó«ßßΓá¡«ó½Ñ¡¿∩ │
- │ ñ½∩ ñá¡¡«ú« »α«µÑßßá; │
- │ óδóÑßΓ¿ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ »α«µÑßßδ, │
- │ «ª¿ñáεΘ¿Ñ πóѽ¿τÑ¡¿∩ º¡áτÑ¡¿∩ ßѼáΣ«αá; │
- │ } │
- │ ó »α«Γ¿ó¡«¼ ß½πτáÑ Ñß½¿ (¬«ñ «»Ñαᵿ¿ ¿¼ÑÑΓ «Γα¿µá-│
- │ Γѽ∞¡«Ñ º¡áτÑ¡¿Ñ) │
- │ { │
- │ Ñß½¿ (¬«ñ «»Ñαᵿ¿ + º¡áτÑ¡¿Ñ ßѼáΣ«αá >= 0) │
- │ { │
- │ »α¿íáó¿Γ∞ ¬«ñ «»Ñαᵿ¿ ¬ º¡áτÑ¡¿ε ßѼáΣ«- │
- │ αá; │
- │ Ñß½¿ (Σ½áú UNDO πßΓá¡«ó½Ñ¡) │
- │ ߬«ααÑ¬Γ¿α«óáΓ∞ ßΓαπ¬Γπαπ ó«ßßΓá¡«ó- │
- │ ½Ñ¡¿∩ ñ½∩ ñá¡¡«ú« »α«µÑßßá; │
- │ Ñß½¿ (º¡áτÑ¡¿Ñ ßѼáΣ«αá αáó¡« 0) │
- │ /* »α«ñ«½ªÑ¡¿Ñ ¡á ß½ÑñπεΘÑ⌐ ßΓαá¡¿- │
- │ * µÑ */ │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.15. ǽú«α¿Γ¼ óδ»«½¡Ñ¡¿∩ «»Ñαᵿ⌐ ¡áñ ßѼáΣ«α«¼
-
-
- ºáñáτ¿, ¬«úñá »ÑαѺá»π߬áÑΓ ß¿ßΓѼ¡πε Σπ¡¬µ¿ε. Æá¬¿¼ «íαẫ¼, «»Ñαᵿ¿ óδ-
- »«½¡∩εΓß∩ ¬«¼»½Ñ¬ß¡« - ¿½¿ óßÑ ºá «ñ¿¡ ßÑá¡ß ¿½¿ ¡¿ «ñ¡«⌐.
- ƒñα« ¼Ñ¡∩ÑΓ º¡áτÑ¡¿Ñ ßѼáΣ«αá ó ºáó¿ß¿¼«ßΓ¿ «Γ ¬«ñá «»Ñαᵿ¿. àß½¿ ¬«ñ
- «»Ñαᵿ¿ ¿¼ÑÑΓ »«½«ª¿Γѽ∞¡«Ñ º¡áτÑ¡¿Ñ, ∩ñα« πóѽ¿τ¿óáÑΓ º¡áτÑ¡¿Ñ ßѼáΣ«αá ¿
- óδó«ñ¿Γ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ »α«µÑßßδ, «ª¿ñáεΘ¿Ñ ¡áßΓπ»½Ñ¡¿∩ φΓ«ú«
- ß«íδΓ¿∩. àß½¿ ¬«ñ «»Ñαᵿ¿ αáóÑ¡ 0, ∩ñα« »α«óÑα∩ÑΓ º¡áτÑ¡¿Ñ ßѼáΣ«αá: Ñß½¿
- «¡« αáó¡« 0, ∩ñα« »ÑαÑσ«ñ¿Γ ¬ óδ»«½¡Ñ¡¿ε ñαπú¿σ «»Ñαᵿ⌐; ó »α«Γ¿ó¡«¼ ß½πτáÑ
- ∩ñα« πóѽ¿τ¿óáÑΓ τ¿ß½« »α¿«ßΓá¡«ó½Ñ¡¡δσ »α«µÑßß«ó, «ª¿ñáεΘ¿σ, ¬«úñá º¡áτÑ¡¿Ñ
- ßѼáΣ«αá ßΓá¡ÑΓ ¡π½Ñóδ¼, ¿ "ºáßδ»áÑΓ". àß½¿ ¬«ñ «»Ñαᵿ¿ ¿¼ÑÑΓ «Γα¿µáΓѽ∞¡«Ñ
- º¡áτÑ¡¿Ñ ¿ Ñß½¿ Ñú« áíß«½εΓ¡«Ñ º¡áτÑ¡¿Ñ ¡Ñ »αÑóδΦáÑΓ º¡áτÑ¡¿Ñ ßѼáΣ«αá, ∩ñα«
- »α¿íáó½∩ÑΓ ¬«ñ «»Ñαᵿ¿ («Γα¿µáΓѽ∞¡«Ñ τ¿ß½«) ¬ º¡áτÑ¡¿ε ßѼáΣ«αá. àß½¿ αÑ-
- ºπ½∞ΓáΓ αáóÑ¡ 0, ∩ñα« óδó«ñ¿Γ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ »α«µÑßßδ, «ª¿ñáε-
- Θ¿Ñ «í¡π½Ñ¡¿∩ º¡áτÑ¡¿∩ ßѼáΣ«αá. àß½¿ αѺπ½∞ΓáΓ ¼Ñ¡∞ΦÑ áíß«½εΓ¡«ú«
- º¡áτÑ¡¿∩ ¬«ñá «»Ñαᵿ¿, ∩ñα« »α¿«ßΓá¡áó½¿óáÑΓ »α«µÑßß ñ« ΓÑσ »«α, »«¬á º¡á-
- τÑ¡¿Ñ ßѼáΣ«αá ¡Ñ πóѽ¿τ¿Γß∩. àß½¿ »α«µÑßß »α¿«ßΓá¡áó½¿óáÑΓß∩ »«ßαÑñ¿ «»Ñαá-
- µ¿¿, «¡ ¿¼ÑÑΓ »α¿«α¿ΓÑΓ, ñ«»π߬áεΘ¿⌐ »αÑαδóá¡¿∩; ß½Ññ«óáΓѽ∞¡«, »«½πτ¿ó ß¿ú-
- ¡á½, «¡ óδσ«ñ¿Γ ¿º φΓ«ú« ß«ßΓ«∩¡¿∩.
-
- 349
-
- ┌────────────────────────────────────────────────────────────┐
- │ óδóÑßΓ¿ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ │
- │ »α«µÑßßδ, «ª¿ñáεΘ¿Ñ «í¡π½Ñ¡¿∩ º¡áτÑ-│
- │ ¡¿∩ ßѼáΣ«αá; │
- │ »α«ñ«½ª¿Γ∞; │
- │ } │
- │ óδ»«½¡¿Γ∞ óßÑ »α«¿ºóÑñÑ¡¡δÑ ¡áñ ßѼáΣ«α«¼ ó │
- │ ñá¡¡«¼ ßÑá¡ßÑ «»Ñαᵿ¿ ó «íαáΓ¡«⌐ »«ß½Ññ«óá- │
- │ Γѽ∞¡«ßΓ¿ (ó«ßßΓá¡«ó¿Γ∞ ßΓáα«Ñ º¡áτÑ¡¿Ñ ßѼá- │
- │ Σ«αá); │
- │ Ñß½¿ (Σ½áú¿ ¡Ñ óѽ∩Γ »α¿«ßΓá¡áó½¿óáΓ∞ß∩) │
- │ óÑα¡πΓ∞ß∩ ß «Φ¿í¬«⌐; │
- │ »α¿«ßΓá¡«ó¿Γ∞ß∩ (ñ« ΓÑσ »«α, »«¬á º¡áτÑ¡¿Ñ ßÑ- │
- │ ¼áΣ«αá ¡Ñ πóѽ¿τ¿Γß∩); │
- │ »ÑαÑ⌐Γ¿ ¡á start; /* »«óΓ«α¿Γ∞ µ¿¬½ ß ßἫú« │
- │ * ¡áτá½á * / │
- │ } │
- │ ó »α«Γ¿ó¡«¼ ß½πτáÑ /* ¬«ñ «»Ñαᵿ¿ αáóÑ¡ ¡π½ε */│
- │ { │
- │ Ñß½¿ (º¡áτÑ¡¿Ñ ßѼáΣ«αá «Γ½¿τ¡« «Γ ¡π½∩) │
- │ { │
- │ óδ»«½¡¿Γ∞ óßÑ »α«¿ºóÑñÑ¡¡δÑ ¡áñ ßѼáΣ«α«¼ │
- │ ó ñá¡¡«¼ ßÑá¡ßÑ «»Ñαᵿ¿ ó «íαáΓ¡«⌐ »«- │
- │ ß½Ññ«óáΓѽ∞¡«ßΓ¿ (ó«ßßΓá¡«ó¿Γ∞ ßΓáα«Ñ │
- │ º¡áτÑ¡¿Ñ ßѼáΣ«αá); │
- │ Ñß½¿ (Σ½áú¿ ¡Ñ óѽ∩Γ »α¿«ßΓá¡áó½¿óáΓ∞ß∩) │
- │ óÑα¡πΓ∞ß∩ ß «Φ¿í¬«⌐; │
- │ »α¿«ßΓá¡«ó¿Γ∞ß∩ (ñ« ΓÑσ »«α, »«¬á º¡áτÑ¡¿Ñ│
- │ ßѼáΣ«αá ¡Ñ ßΓá¡ÑΓ ¡π½Ñóδ¼); │
- │ »ÑαÑ⌐Γ¿ ¡á start; /* »«óΓ«α¿Γ∞ µ¿¬½ */ │
- │ } │
- │ } │
- │ } /* ¬«¡Ñµ µ¿¬½á */ │
- │ /* óßÑ «»Ñαᵿ¿ ¡áñ ßѼáΣ«α«¼ óδ»«½¡Ñ¡δ */ │
- │ ߬«ααÑ¬Γ¿α«óáΓ∞ º¡áτÑ¡¿∩ »«½Ñ⌐, ó ¬«Γ«αδσ σαá¡¿Γß∩ óαÑ-│
- │ ¼∩ »«ß½Ññ¡Ñú« óδ»«½¡Ñ¡¿∩ «»Ñαᵿ⌐ ¿ ¿ñÑ¡Γ¿Σ¿¬áΓ«αδ │
- │ »α«µÑßß«ó; │
- │ óÑα¡πΓ∞ ¿ßσ«ñ¡«Ñ º¡áτÑ¡¿Ñ ßѼáΣ«αá, ßπΘÑßΓó«óáóΦÑÑ ó │
- │ ¼«¼Ñ¡Γ ó맮óá Σπ¡¬µ¿¿ semop; │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.15. ǽú«α¿Γ¼ óδ»«½¡Ñ¡¿∩ «»Ñαᵿ⌐ ¡áñ ßѼáΣ«α«¼ (»α«ñ«½ªÑ¡¿Ñ)
-
-
- ÅÑαÑ⌐ñѼ ¬ »α«úαá¼¼Ñ, »αÑñßΓáó½Ñ¡¡«⌐ ¡á É¿ßπ¡¬Ñ 11.14, ¿ »αÑñ»«½«ª¿¼,
- τΓ« »«½∞º«óáΓѽ∞ ¿ß»«½¡∩ÑΓ ÑÑ (»«ñ ¿¼Ñ¡Ñ¼ a.out) Γα¿ αáºá ó ß½ÑñπεΘѼ »«α∩ñ-
- „:
- a.out &
- a.out a &
- a.out b &
- àß½¿ »α«úαá¼¼á óδºδóáÑΓß∩ íѺ »áαá¼ÑΓα«ó, »α«µÑßß ß«ºñáÑΓ ¡áí«α ßѼáΣ«-
- α«ó ¿º ñóπσ φ½Ñ¼Ñ¡Γ«ó ¿ »α¿ßóá¿óáÑΓ ¬áªñ«¼π ßѼáΣ«απ º¡áτÑ¡¿Ñ, αáó¡«Ñ 1. çá-
- ΓѼ »α«µÑßß óδºδóáÑΓ Σπ¡¬µ¿ε pause ¿ »α¿«ßΓá¡áó½¿óáÑΓß∩ ñ½∩ »«½πτÑ¡¿∩ ß¿ú¡á-
- ½á, »«ß½Ñ τÑú« πñá½∩ÑΓ ßѼáΣ«α ¿º ß¿ßΓѼδ (cleanup). Åα¿ óδ»«½¡Ñ¡¿¿ »α«úαá¼-
- ¼δ ß »áαá¼ÑΓα«¼ 'a' »α«µÑßß (A) »α«¿ºó«ñ¿Γ ¡áñ ßѼáΣ«αἿ ó µ¿¬½Ñ τÑΓδαÑ
- «»Ñαᵿ¿: «¡ π¼Ñ¡∞ΦáÑΓ ¡á Ññ¿¡¿µπ º¡áτÑ¡¿Ñ ßѼáΣ«αá 0, Γ« ªÑ ßá¼«Ñ ñѽáÑΓ ß
- ßѼáΣ«α«¼ 1, óδ»«½¡∩ÑΓ ¬«¼á¡ñπ óδó«ñá ¡á »ÑτáΓ∞ ¿ ó¡«ó∞ πóѽ¿τ¿óáÑΓ º¡áτÑ¡¿∩
- ßѼáΣ«α«ó 0 ¿ 1. àß½¿ íδ »α«µÑßß »«»δΓá½ß∩ π¼Ñ¡∞Φ¿Γ∞ º¡áτÑ¡¿Ñ ßѼáΣ«αá, αáó-
-
- 350
-
- ¡«Ñ 0, Ѽπ »α¿Φ½«ß∞ íδ »α¿«ßΓá¡«ó¿Γ∞ß∩, ß½Ññ«óáΓѽ∞¡«, ßѼáΣ«α ¼«ª¡« ßτ¿ΓáΓ∞
- ºáσóáτÑ¡¡δ¼ (¡Ññ«ßΓπ»¡δ¼ ñ½∩ π¼Ñ¡∞ΦÑ¡¿∩). ū߬«½∞¬π ¿ßσ«ñ¡δÑ º¡áτÑ¡¿∩ ßѼá-
- Σ«α«ó í뫨 αáó¡δ 1 ¿ »«ß¬«½∞¬π ¬ ßѼáΣ«αá¼ ¡Ñ í佫 «íαáΘÑ¡¿⌐ ß« ßΓ«α«¡δ ñαπ-
- ú¿σ »α«µÑßß«ó, »α«µÑßß A ¡¿¬«úñá ¡Ñ »α¿«ßΓá¡«ó¿Γß∩, á º¡áτÑ¡¿∩ ßѼáΣ«α«ó íπ-
- ñπΓ ¿º¼Ñ¡∩Γ∞ß∩ Γ«½∞¬« ¼Ñªñπ 1 ¿ 0. Åα¿ óδ»«½¡Ñ¡¿¿ »α«úαá¼¼δ ß »áαá¼ÑΓα«¼ 'b'
- »α«µÑßß (B) π¼Ñ¡∞ΦáÑΓ º¡áτÑ¡¿∩ ßѼáΣ«α«ó 0 ¿ 1 ó »«α∩ñ¬Ñ, «íαáΓ¡«¼ σ«ñπ óδ-
- »«½¡Ñ¡¿∩ »α«µÑßßá A. è«úñá »α«µÑßßδ A ¿ B óδ»«½¡∩εΓß∩ »áαώѽ∞¡«, ¼«ªÑΓ
- ß½«ª¿Γ∞ß∩ ß¿Γπᵿ∩, ó ¬«Γ«α«⌐ »α«µÑßß A ºáσóáΓ¿½ ßѼáΣ«α 0 ¿ σ«τÑΓ ºáσóáΓ¿Γ∞
- ßѼáΣ«α 1, á »α«µÑßß B ºáσóáΓ¿½ ßѼáΣ«α 1 ¿ σ«τÑΓ ºáσóáΓ¿Γ∞ ßѼáΣ«α 0. Äíá
- »α«µÑßßá »ÑαÑ⌐ñπΓ ó ß«ßΓ«∩¡¿Ñ »α¿«ßΓá¡«óá, ¡Ñ ¿¼Ñ∩ 󫺼«ª¡«ßΓ¿ »α«ñ«½ª¿Γ∞
- ßó«Ñ óδ»«½¡Ñ¡¿Ñ. 髺¡¿¬áÑΓ óºá¿¼¡á∩ í½«¬¿α«ó¬á, ¿º ¬«Γ«α«⌐ »α«µÑßßδ ¼«úπΓ
- óδ⌐Γ¿ Γ«½∞¬« »« »«½πτÑ¡¿¿ ß¿ú¡á½á.
- ùΓ«íδ »αÑñ«ΓóαáΓ¿Γ∞ 󫺡¿¬¡«óÑ¡¿Ñ »«ñ«í¡δσ »α«í½Ñ¼, »α«µÑßßδ ¼«úπΓ óδ-
- »«½¡∩Γ∞ «ñ¡«óαѼѡ¡« ¡Ñ߬«½∞¬« «»Ñαᵿ⌐ ¡áñ ßѼáΣ«αἿ. é »«ß½Ññ¡Ñ¼ »α¿¼ÑαÑ
- ªÑ½áѼδ⌐ φΣΣÑ¬Γ ñ«ßΓ¿úáÑΓß∩ í½áú«ñáα∩ ¿ß»«½∞º«óá¡¿ε ß½ÑñπεΘ¿σ «»ÑαáΓ«α«ó:
-
- struct sembuf psembuf[2];
-
- psembuf[0].sem_num = 0;
- psembuf[1].sem_num = 1;
- psembuf[0].sem_op = -1;
- psembuf[1].sem_op = -1;
- semop(semid,psembuf,2);
-
- Psembuf - φΓ« ß»¿ß«¬ «»Ñαᵿ⌐, óδ»«½¡∩εΘ¿σ «ñ¡«óαѼѡ¡«Ñ π¼Ñ¡∞ΦÑ¡¿Ñ º¡áτÑ¡¿⌐
- ßѼáΣ«α«ó 0 ¿ 1. àß½¿ ¬á¬á∩-Γ« «»Ñαᵿ∩ ¡Ñ ¼«ªÑΓ óδ»«½¡∩Γ∞ß∩, »α«µÑßß »α¿«ß-
- Γá¡áó½¿óáÑΓß∩. Æá¬, ¡á»α¿¼Ñα, Ñß½¿ º¡áτÑ¡¿Ñ ßѼáΣ«αá 0 αáó¡« 1, á º¡áτÑ¡¿Ñ
- ßѼáΣ«αá 1 αáó¡« 0, ∩ñα« «ßΓáó¿Γ «íá º¡áτÑ¡¿∩ ¡Ñ¿º¼Ñ¡¡δ¼¿ ñ« ΓÑσ »«α, »«¬á
- ¡Ñ ß¼«ªÑΓ π¼Ñ¡∞Φ¿Γ∞ ¿ Γ«, ¿ ñαπú«Ñ.
- ôßΓá¡«ó¬á Σ½áúá IPC_NOWAIT ó Σπ¡¬µ¿¿ semop ¿¼ÑÑΓ ß½ÑñπεΘ¿⌐ ß¼δß½: Ñß½¿
- ∩ñα« »«»áñáÑΓ ó Γá¬πε ß¿Γπᵿε, ¬«úñá »α«µÑßß ñ«½ªÑ¡ »α¿«ßΓá¡«ó¿Γ∞ ßó«Ñ óδ-
- »«½¡Ñ¡¿Ñ ó «ª¿ñá¡¿¿ πóѽ¿τÑ¡¿∩ º¡áτÑ¡¿∩ ßѼáΣ«αá óδΦÑ «»αÑñѽѡ¡«ú« πα«ó¡∩
- ¿½¿, ¡á«í«α«Γ, ß¡¿ªÑ¡¿∩ φΓ«ú« º¡áτÑ¡¿∩ ñ« 0, ¿ Ñß½¿ »α¿ φΓ«¼ Σ½áú IPC_NOWAIT
- πßΓá¡«ó½Ñ¡, ∩ñα« óδσ«ñ¿Γ ¿º Σπ¡¬µ¿¿ ß ¿ºóÑΘÑ¡¿Ñ¼ «í «Φ¿í¬Ñ. Æá¬¿¼ «íαẫ¼,
- Ñß½¿ ¡Ñ »α¿«ßΓá¡áó½¿óáΓ∞ »α«µÑßß ó ß½πτáÑ ¡Ñ󫺼«ª¡«ßΓ¿ óδ»«½¡Ñ¡¿∩ «Γñѽ∞¡«⌐
- «»Ñαᵿ¿, ¼«ª¡« αÑ὿º«óáΓ∞ πß½«ó¡δ⌐ Γ¿» ßѼáΣ«αá.
- àß½¿ »α«µÑßß óδ»«½¡∩ÑΓ «»Ñαáµ¿ε ¡áñ ßѼáΣ«α«¼, ºáσóáΓδóá∩ »α¿ φΓ«¼ ¡Ñ¬«-
- Γ«αδÑ αÑßπαßδ, ¿ ºáóÑαΦáÑΓ ßó«ε αáí«Γπ íѺ »α¿óÑñÑ¡¿∩ ßѼáΣ«αá ó ¿ßσ«ñ¡«Ñ
- ß«ßΓ«∩¡¿Ñ, ¼«úπΓ ó«º¡¿¬¡πΓ∞ «»áß¡δÑ ß¿Γπᵿ¿. Åα¿τ¿¡á¼¿ 󫺡¿¬¡«óÑ¡¿∩ Γᬿσ
- ß¿Γπᵿ⌐ ¼«úπΓ íδΓ∞ ¬á¬ «Φ¿í¬¿ »α«úαá¼¼¿α«óá¡¿∩, Γᬠ¿ ß¿ú¡á½δ, »α¿ó«ñ∩Θ¿Ñ ¬
- ó¡Ñºá»¡«¼π ºáóÑαΦÑ¡¿ε óδ»«½¡Ñ¡¿∩ »α«µÑßßá. àß½¿ »«ß½Ñ Γ«ú«, ¬á¬ »α«µÑßß
- π¼Ñ¡∞Φ¿Γ º¡áτÑ¡¿∩ ßѼáΣ«α«ó, «¡ »«½πτ¿Γ ß¿ú¡á½ kill, ó«ßßΓá¡«ó¿Γ∞ »αѪ¡¿Ñ
- º¡áτÑ¡¿∩ »α«µÑßßπ πªÑ ¡Ñ πñáßΓß∩, »«ß¬«½∞¬π ß¿ú¡á½δ ñá¡¡«ú« Γ¿»á ¡Ñ á¡á½¿º¿-
- απεΓß∩ »α«µÑßß«¼. æ½Ññ«óáΓѽ∞¡«, ñαπú¿Ñ »α«µÑßßδ, »δΓá∩ß∞ «íαáΓ¿Γ∞ß∩ ¬ ßѼá-
- Σ«αá¼, «í¡áαπªáΓ, τΓ« »«ß½Ññ¡¿Ñ ºáí½«¬¿α«óá¡δ, σ«Γ∩ ßá¼ ºáí½«¬¿α«óáóΦ¿⌐ ¿σ
- »α«µÑßß πªÑ »αѬαáΓ¿½ ßó«Ñ ßπΘÑßΓó«óá¡¿Ñ. ùΓ«íδ ¿ºíѪáΓ∞ 󫺡¿¬¡«óÑ¡¿∩ »«-
- ñ«í¡δσ ß¿Γπᵿ⌐, ó Σπ¡¬µ¿¿ semop »α«µÑßß ¼«ªÑΓ πßΓá¡«ó¿Γ∞ Σ½áú SEM_UNDO;
- ¬«úñá »α«µÑßß ºáóÑαΦ¿Γß∩, ∩ñα« ñáßΓ «íαáΓ¡δ⌐ σ«ñ óßѼ «»Ñαᵿ∩¼, óδ»«½¡Ñ¡¡δ¼
- »α«µÑßß«¼. ä½∩ φΓ«ú« ó αáß»«α∩ªÑ¡¿¿ π ∩ñαá ¿¼ÑÑΓß∩ Γáí½¿µá, ó ¬«Γ«α«⌐ ¬áªñ«-
- ¼π »α«µÑßßπ ó ß¿ßΓÑ¼Ñ «ΓóÑñÑ¡á «Γñѽ∞¡á∩ ºá»¿ß∞. çỿß∞ Γáí½¿µδ ß«ñÑনΓ
- π¬áºáΓѽ∞ ¡á úαπ»»π ßΓαπ¬Γπα ó«ßßΓá¡«ó½Ñ-
- ¡¿∩, »« «ñ¡«⌐ ßΓαπ¬ΓπαÑ ¡á ¬áªñδ⌐ ¿ß»«½∞ºπѼδ⌐ »α«µÑßß«¼ ßѼáΣ«α (É¿ßπ¡«¬
- 11.16). èáªñá∩ ßΓαπ¬Γπαá ó«ßßΓá¡«ó½Ñ¡¿∩ ß«ßΓ«¿Γ ¿º ΓαÑσ φ½Ñ¼Ñ¡Γ«ó - ¿ñÑ¡Γ¿-
- Σ¿¬áΓ«αá ßѼáΣ«αá, Ñú« »«α∩ñ¬«ó«ú« ¡«¼Ñαá ó ¡áí«αÑ ¿ πßΓá¡«ó«τ¡«ú« º¡áτÑ¡¿∩.
- ƒñα« óδñѽ∩ÑΓ ßΓαπ¬Γπαδ ó«ßßΓá¡«ó½Ñ¡¿∩ ñ¿¡á¼¿τÑ߬¿, ó« óαѼ∩ »Ñαó«ú« óδ-
- »«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ semop ß πßΓá¡«ó½Ñ¡¡δ¼ Σ½áú«¼ SEM_UNDO. Åα¿ »«ß½Ñ-
- ñπεΘ¿σ «íαáΘÑ¡¿∩σ ¬ Σπ¡¬µ¿¿ ß ΓѼ ªÑ Σ½áú«¼ ∩ñα« »α«ß¼áΓα¿óáÑΓ ßΓαπ¬Γπαδ
- ó«ßßΓá¡«ó½Ñ¡¿∩ ñ½∩ »α«µÑßßá ó »«¿ß¬áσ ßΓαπ¬Γπαδ ß ΓѼ ªÑ ßá¼δ¼ ¿ñÑ¡Γ¿Σ¿¬áΓ«-
-
-
- 351
-
- çáú«½«ó¬¿ τáßΓ¡δσ ßΓαπ¬Γπα
- ó«ßßΓá¡«ó½Ñ¡¿∩ æΓαπ¬Γπαδ ó«ßßΓá¡«ó½Ñ¡¿∩
- ┌──────┐
- │ ∙ │
- │ ∙ │
- │ ∙ │
- │ ∙ │ ┌──────────┐ ┌──────────┐ ┌──────────┐
- ├──────┤ │äÑß¬α¿»Γ«α│ │äÑß¬α¿»Γ«α│ │äÑß¬α¿»Γ«α│
- │ ├──>│ 쫼Ñα ├──>│ 쫼Ñα ├──>│ 쫼Ñα │
- ├──────┤ │ ç¡áτÑ¡¿Ñ │ │ ç¡áτÑ¡¿Ñ │ │ ç¡áτÑ¡¿Ñ │
- │ │ └──────────┘ └──────────┘ └──────────┘
- │ │ ┌──────────┐
- ├──────┤ │äÑß¬α¿»Γ«α│
- │ ├──>│ 쫼Ñα │
- ├──────┤ │ ç¡áτÑ¡¿Ñ │
- │ ∙ │ └──────────┘
- │ ∙ │
- │ ∙ │
- │ ∙ │
- └──────┘
-
- É¿ßπ¡«¬ 11.16. æΓαπ¬Γπαδ ó«ßßΓá¡«ó½Ñ¡¿∩ ßѼáΣ«α«ó
-
-
- α«¼ ¿ »«α∩ñ¬«óδ¼ ¡«¼Ñα«¼ ßѼáΣ«αá, τΓ« ¿ ó Σ«α¼áΓÑ ó맮óá Σπ¡¬µ¿¿. àß½¿
- ßΓαπ¬Γπαá «í¡áαπªÑ¡á, ∩ñα« óδτ¿ΓáÑΓ º¡áτÑ¡¿Ñ »α«¿ºóÑñÑ¡¡«⌐ ¡áñ ßѼáΣ«α«¼
- «»Ñαᵿ¿ ¿º πßΓá¡«ó«τ¡«ú« º¡áτÑ¡¿∩. Æá¬¿¼ «íαẫ¼, ó ßΓαπ¬ΓπαÑ ó«ßßΓá¡«ó½Ñ-
- ¡¿∩ σαá¡¿Γß∩ αѺπ½∞ΓáΓ óδτ¿Γá¡¿∩ ßπ¼¼δ º¡áτÑ¡¿⌐ óßÑσ «»Ñαᵿ⌐, »α«¿ºóÑñÑ¡¡δσ
- ¡áñ ßѼáΣ«α«¼, ñ½∩ ¬«Γ«α«ú« πßΓá¡«ó½Ñ¡ Σ½áú SEM_UNDO. àß½¿ ß««ΓóÑΓßΓóπεΘÑ⌐
- ßΓαπ¬Γπαδ ¡ÑΓ, ∩ñα« ß«ºñáÑΓ ÑÑ, ß«αΓ¿απ∩ »α¿ φΓ«¼ ß»¿ß«¬ ßΓαπ¬Γπα »« ¿ñÑ¡Γ¿-
- Σ¿¬áΓ«αá¼ ¿ ¡«¼Ñαá¼ ßѼáΣ«α«ó. àß½¿ πßΓá¡«ó«τ¡«Ñ º¡áτÑ¡¿Ñ ßΓá¡«ó¿Γß∩ αáó¡δ¼
- 0, ∩ñα« πñá½∩ÑΓ ßΓαπ¬Γπαπ ¿º ß»¿ß¬á. è«úñá »α«µÑßß ºáóÑαΦáÑΓß∩, ∩ñα« óδºδóá-
-
- ┌───────────────┬┬───────┐ ┌───────────────┬┬───────┬───────┐
- │ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ││ │ │ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ││ │ │
- │ ßѼáΣ«αá ││ semid │ │ ßѼáΣ«αá ││ semid │ semid │
- ├───────────────┼┼───────┤ ├───────────────┼┼───────┼───────┤
- │ ¡«¼Ñα ßѼáΣ«αá││ 0 │ │ ¡«¼Ñα ßѼáΣ«αá││ 0 │ 1 │
- ├───────────────┼┼───────┤ ├───────────────┼┼───────┼───────┤
- │ πßΓá¡«ó«τ¡«Ñ ││ │ │ πßΓá¡«ó«τ¡«Ñ ││ │ │
- │ º¡áτÑ¡¿Ñ ││ 1 │ │ º¡áτÑ¡¿Ñ ││ 1 │ 1 │
- └───────────────┴┴───────┘ └───────────────┴┴───────┴───────┘
-
- (á) Å«ß½Ñ »Ñαó«⌐ «»Ñαᵿ¿ (í) Å«ß½Ñ óΓ«α«⌐ «»Ñαᵿ¿
-
- ┌───────────────┬┬───────┐
- │ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ││ │
- │ ßѼáΣ«αá ││ semid │
- ├───────────────┼┼───────┤
- │ ¡«¼Ñα ßѼáΣ«αá││ 0 │ »πßΓ«
- ├───────────────┼┼───────┤
- │ πßΓá¡«ó«τ¡«Ñ ││ │
- │ º¡áτÑ¡¿Ñ ││ 1 │
- └───────────────┴┴───────┘
-
- (ó) Å«ß½Ñ ΓαÑΓ∞Ñ⌐ «»Ñαᵿ¿ (ú) Å«ß½Ñ τÑΓóÑαΓ«⌐ «»Ñαᵿ¿
-
- É¿ßπ¡«¬ 11.17. ū߽Ññ«óáΓѽ∞¡«ßΓ∞ ß«ßΓ«∩¡¿⌐ ß»¿ß¬á ßΓαπ¬Γπα ó«ßßΓá¡«ó½Ñ¡¿∩
-
-
- 352
-
-
-
- ÑΓ ß»Ñµ¿á½∞¡πε »α«µÑñπαπ, ¬«Γ«αá∩ »α«ß¼áΓα¿óáÑΓ óßÑ ßó∩ºá¡¡δÑ ß »α«µÑßß«¼
- ßΓαπ¬Γπαδ ó«ßßΓá¡«ó½Ñ¡¿∩ ¿ óδ»«½¡∩ÑΓ ¡áñ π¬áºá¡¡δ¼ ßѼáΣ«α«¼ óßÑ «íπß½«ó½Ñ¡-
- ¡δÑ ñÑ⌐ßΓó¿∩.
- ƒñα« ß«ºñáÑΓ ßΓαπ¬Γπαπ ó«ßßΓá¡«ó½Ñ¡¿∩ óß∩¬¿⌐ αáº, ¬«úñá »α«µÑßß π¼Ñ¡∞Φá-
- ÑΓ º¡áτÑ¡¿Ñ ßѼáΣ«αá, á πñá½∩ÑΓ ÑÑ, ¬«úñá »α«µÑßß πóѽ¿τ¿óáÑΓ º¡áτÑ¡¿Ñ ßѼá-
- Σ«αá, »«ß¬«½∞¬π πßΓá¡«ó«τ¡«Ñ º¡áτÑ¡¿Ñ
- ßΓαπ¬Γπαδ αáó¡« 0. ìá É¿ßπ¡¬Ñ 11.17 »«¬áºá¡á »«ß½Ññ«óáΓѽ∞¡«ßΓ∞ ß«ßΓ«∩¡¿⌐
- ß»¿ß¬á ßΓαπ¬Γπα »α¿ óδ»«½¡Ñ¡¿¿ »α«úαá¼¼δ ß »áαá¼ÑΓα«¼ 'a'. Å«ß½Ñ »Ñαó«⌐ «»Ñ-
- αᵿ¿ »α«µÑßß ¿¼ÑÑΓ «ñ¡π ßΓαπ¬Γπαπ, ß«ßΓ«∩Θπε ¿º ¿ñÑ¡Γ¿Σ¿¬áΓ«αá semid, ¡«¼Ñ-
- αá ßѼáΣ«αá, αáó¡«ú« 0, ¿ πßΓá¡«ó«τ¡«ú« º¡áτÑ¡¿∩, αáó¡«ú« 1, á »«ß½Ñ óΓ«α«⌐
- «»Ñαᵿ¿ »«∩ó½∩ÑΓß∩ óΓ«αá∩ ßΓαπ¬Γπαá ß ¡«¼Ñα«¼ ßѼáΣ«αá, αáó¡δ¼ 1, ¿ πßΓá¡«-
- ó«τ¡δ¼ º¡áτÑ¡¿Ñ¼, αáó¡δ¼ 1. àß½¿ »α«µÑßß ¡Ñ«ª¿ñá¡¡« ºáóÑαΦáÑΓß∩, ∩ñα« »α«σ«-
- ñ¿Γ »« óßѼ ßΓαπ¬Γπαá¼ ¿ »α¿íáó½∩ÑΓ ¬ ¬áªñ«¼π ßѼáΣ«απ »« Ññ¿¡¿µÑ, ó«ßßΓá-
- ¡áó½¿óá∩ ¿σ º¡áτÑ¡¿∩ ó 0. é τáßΓ¡«¼ ß½πτáÑ ∩ñα« π¼Ñ¡∞ΦáÑΓ πßΓá¡«ó«τ¡«Ñ º¡á-
- τÑ¡¿Ñ ñ½∩ ßѼáΣ«αá 1 ¡á ΓαÑΓ∞Ñ⌐ «»Ñαᵿ¿, ó ß««ΓóÑΓßΓó¿¿ ß πóѽ¿τÑ¡¿Ñ¼ º¡á-
- τÑ¡¿∩ ßἫú« ßѼáΣ«αá, ¿ πñá½∩ÑΓ óßε ßΓαπ¬Γπαπ µÑ½¿¬«¼, »«ß¬«½∞¬π πßΓá¡«ó«τ-
- ¡«Ñ º¡áτÑ¡¿Ñ ßΓá¡«ó¿Γß∩ ¡π½Ñóδ¼. Å«ß½Ñ τÑΓóÑαΓ«⌐ «»Ñαᵿ¿ π »α«µÑßßá í«½∞ΦÑ
- ¡ÑΓ ßΓαπ¬Γπα ó«ßßΓá¡«ó½Ñ¡¿∩, »«ß¬«½∞¬π óßÑ πßΓá¡«ó«τ¡δÑ º¡áτÑ¡¿∩ ßΓ὿ ¡π½Ñ-
- ó묨.
- éÑ¬Γ«α¡δÑ «»Ñαᵿ¿ ¡áñ ßѼáΣ«αἿ »«ºó«½∩εΓ ¿ºíѪáΓ∞ óºá¿¼¡δσ í½«¬¿α«-
- ó«¬, ¬á¬ í佫 »«¬áºá¡« óδΦÑ, «ñ¡á¬« «¡¿ »αÑñßΓáó½∩εΓ ¿ºóÑßΓ¡πε Γαπñ¡«ßΓ∞ ñ½∩
- »«¡¿¼á¡¿∩ ¿ αÑ὿ºáµ¿¿, ¿ ó í«½∞Φ¿¡ßΓóÑ »α¿½«ªÑ¡¿⌐ »«½¡δ⌐ ¡áí«α ¿σ 󫺼«ª-
- ¡«ßΓÑ⌐ ¡Ñ ∩ó½∩ÑΓß∩ «í∩ºáΓѽ∞¡δ¼. Åα«úαá¼¼δ, ¿ß»δΓδóáεΘ¿Ñ »«ΓαÑí¡«ßΓ∞ ó ¿ß-
- »«½∞º«óá¡¿¿ ¡áí«αá ßѼáΣ«α«ó, ßΓὬ¿óáεΓß∩ ß ó«º¡¿¬¡«óÑ¡¿Ñ¼ óºá¿¼¡δσ í½«¬¿-
- α«ó«¬ ¡á »«½∞º«óáΓѽ∞߬«¼ πα«ó¡Ñ, ¿ ∩ñαπ πªÑ ¡ÑΓ ¡Ñ«íσ«ñ¿¼«ßΓ¿ »«ññÑনóáΓ∞
- Γá¬¿Ñ ß½«ª¡δÑ Σ«α¼δ ß¿ßΓѼ¡δσ Σπ¡¬µ¿⌐.
- æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ semctl:
-
- semctl(id,number,cmd,arg);
-
- Åáαá¼ÑΓα arg «íΩ∩ó½Ñ¡ ¬á¬ «íΩÑñ¿¡Ñ¡¿Ñ Γ¿»«ó ñá¡¡δσ:
-
- union semunion {
- int val;
- struct semid_ds *semstat; /* «»¿ßá¡¿Ñ Γ¿»«ó ß¼. ó Åα¿-
- * ½«ªÑ¡¿¿ */
- unsigned short *array;
- } arg;
-
- ƒñα« ¿¡ΓÑα»αÑΓ¿απÑΓ »áαá¼ÑΓα arg ó ºáó¿ß¿¼«ßΓ¿ «Γ º¡áτÑ¡¿∩ »áαá¼ÑΓαá
- cmd, »«ñ«í¡« Γ«¼π, ¬á¬ ¿¡ΓÑα»αÑΓ¿απÑΓ ¬«¼á¡ñδ ioctl (ú½áóá 10). Æ¿»δ ñÑ⌐ßΓ-
- ó¿⌐, ¬«Γ«αδÑ ¼«úπΓ ¿ß»«½∞º«óáΓ∞ß∩ ó »áαá¼ÑΓαÑ cmd: »«½πτ¿Γ∞ ¿½¿ πßΓá¡«ó¿Γ∞
- º¡áτÑ¡¿∩ π»αáó½∩εΘ¿σ »áαá¼ÑΓα«ó (»αáóá ñ«ßΓπ»á ¿ ñα.), πßΓá¡«ó¿Γ∞ º¡áτÑ¡¿∩
- «ñ¡«ú« ¿½¿ óßÑσ ßѼáΣ«α«ó ó ¡áí«αÑ, »α«τ¿ΓáΓ∞ º¡áτÑ¡¿∩ ßѼáΣ«α«ó. Å«ñα«í¡«ß-
- Γ¿ »« ¬áªñ«¼π ñÑ⌐ßΓó¿ε ß«ñÑαªáΓß∩ ó Åα¿½«ªÑ¡¿¿. àß½¿ π¬áºá¡á ¬«¼á¡ñá πñá½Ñ-
- ¡¿∩, IPC_RMID, ∩ñα« óÑñÑΓ »«¿ß¬ óßÑσ »α«µÑßß«ó, ß«ñÑαªáΘ¿σ ßΓαπ¬Γπαδ ó«ßßΓá-
- ¡«ó½Ñ¡¿∩ ñ½∩ ñá¡¡«ú« ßѼáΣ«αá, ¿ πñá½∩ÑΓ ß««ΓóÑΓßΓóπεΘ¿Ñ ßΓαπ¬Γπαδ ¿º ß¿ßΓÑ-
- ¼δ. çáΓѼ ∩ñα« ¿¡¿µ¿á½¿º¿απÑΓ ¿ß»«½∞ºπѼδÑ ßѼáΣ«α«¼ ßΓαπ¬Γπαδ ñá¡¡δσ ¿ óδ-
- ó«ñ¿Γ ¿º ß«ßΓ«∩¡¿∩ »α¿«ßΓá¡«óá óßÑ »α«µÑßßδ, «ª¿ñáεΘ¿Ñ ¡áßΓπ»½Ñ¡¿∩ ¡Ñ¬«Γ«α«-
- ú« ßó∩ºá¡¡«ú« ß ßѼáΣ«α«¼ ß«íδΓ¿∩: ¬«úñá »α«µÑßßδ ó«º«í¡«ó½∩εΓ ßó«Ñ óδ»«½¡Ñ-
- ¡¿Ñ, «¡¿ «í¡áαπª¿óáεΓ, τΓ« ¿ñÑ¡Γ¿Σ¿¬áΓ«α ßѼáΣ«αá í«½∞ΦÑ ¡Ñ ∩ó½∩ÑΓß∩ ¬«ααѬ-
- Γ¡δ¼, ¿ ó«ºóαáΘáεΓ óδºδóáεΘÑ⌐ »α«úαá¼¼Ñ «Φ¿í¬π.
-
-
- E11.2.4 ÄíΘ¿Ñ ºá¼Ñτá¡¿∩F
-
- îÑσá¡¿º¼ Σπ¡¬µ¿«¡¿α«óá¡¿∩ Σá⌐½«ó«⌐ ß¿ßΓÑ¼δ ¿ ¼Ñσá¡¿º¼δ óºá¿¼«ñÑ⌐ßΓó¿∩
-
- 353
-
- »α«µÑßß«ó ¿¼ÑεΓ α∩ñ «íΘ¿σ τÑαΓ. æ¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ Γ¿»á "get" »«σ«ª¿ ¡á Σπ¡¬-
- µ¿¿ creat ¿ open, Σπ¡¬µ¿¿ Γ¿»á "control" »αÑñ«ßΓáó½∩εΓ ó«º¼«ª¡«ßΓ∞ πñá½∩Γ∞
- ñÑß¬α¿»Γ«αδ ¿º ß¿ßΓѼδ, τѼ »«σ«ª¿ ¡á Σπ¡¬µ¿ε unlink. ÆÑ¼ ¡Ñ ¼Ñ¡ÑÑ, ó ¼Ñσá-
- ¡¿º¼áσ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó «ΓßπΓßΓóπεΓ «»Ñαᵿ¿, á¡á½«ú¿τ¡δÑ «»Ñαᵿ∩¼,
- óδ»«½¡∩Ñ¼δ¼ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿Ñ⌐ close. æ½Ññ«óáΓѽ∞¡«, ∩ñα« ¡Ñ αáß»«½áúáÑΓ
- ßóÑñÑ¡¿∩¼¿ « Γ«¼, ¬á¬¿Ñ »α«µÑßßδ ¼«úπΓ ¿ß»«½∞º«óáΓ∞ ¼Ñσá¡¿º¼ IPC, ¿, ñÑ⌐ßΓ-
- ó¿Γѽ∞¡«, »α«µÑßßδ ¼«úπΓ »α¿íÑúáΓ∞ ¬ πß½πúá¼ φΓ«ú« ¼Ñσá¡¿º¼á, Ñß½¿ »αáó¿½∞¡«
- πúáñδóáεΓ ß««ΓóÑΓßΓóπεΘ¿⌐ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ¿ Ñß½¿ π ¡¿σ ¿¼ÑεΓß∩ ¡Ñ«íσ«ñ¿¼δÑ
- »αáóá ñ«ßΓπ»á, ñáªÑ Ñß½¿ «¡¿ ¡Ñ óδ»«½¡¿½¿ »αÑñóáα¿Γѽ∞¡« Σπ¡¬µ¿ε Γ¿»á "get".
- ƒñα« ¡Ñ ¼«ªÑΓ áóΓ«¼áΓ¿τÑ߬¿ «τ¿ΘáΓ∞ ¡Ñ¿ß»«½∞ºπѼδÑ ßΓαπ¬Γπαδ ¼Ñσá¡¿º¼á óºá¿-
- ¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó, »«ß¬«½∞¬π ∩ñαπ ¡Ñ¿ºóÑßΓ¡«, ¬á¬¿Ñ ¿º φΓ¿σ ßΓαπ¬Γπα
- í«½∞ΦÑ ¡Ñ ¡πª¡δ. Æá¬¿¼ «íαẫ¼, ºáóÑαΦ¿óΦ¿Ñß∩ óß½ÑñßΓó¿Ñ 󫺡¿¬¡«óÑ¡¿∩ «Φ¿í-
- ¬¿ »α«µÑßßδ ¼«úπΓ «ßΓáó¿Γ∞ »«ß½Ñ ßÑí∩ ¡Ñ¡πª¡δÑ ¿ ¡Ñ¿ß»«½∞ºπѼδÑ ßΓαπ¬Γπαδ,
- »ÑαÑúαπªáεΘ¿Ñ ¿ ºáß«α∩εΘ¿Ñ ß¿ßΓѼπ. ìÑß¼«Γα∩ ¡á Γ«, τΓ« ó ßΓαπ¬Γπαáσ ¼Ñσá-
- ¡¿º¼á óºá¿¼«ñÑ⌐ßΓó¿∩ »«ß½Ñ ºáóÑαΦÑ¡¿∩ ßπΘÑßΓó«óá¡¿∩ »α«µÑßßá ∩ñα« ¼«ªÑΓ ß«σ-
- αá¡¿Γ∞ ¿¡Σ«α¼áµ¿ε « ß«ßΓ«∩¡¿¿ ¿ ñá¡¡δÑ, ½πτΦÑ óßÑ-Γᬿ ñ½∩ φΓ¿σ µÑ½Ñ⌐ ¿ß-
- »«½∞º«óáΓ∞ Σá⌐½δ.
- é¼ÑßΓ« Γαáñ¿µ¿«¡¡δσ, »«½πτ¿óΦ¿σ Φ¿α«¬«Ñ αáß»α«ßΓαá¡Ñ¡¿Ñ Σá⌐½«ó ¼Ñσá¡¿º¼δ
- óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó ¿ß»«½∞ºπεΓ ¡«ó«Ñ »α«ßΓαá¡ßΓó« ¿¼Ñ¡, ß«ßΓ«∩ΘÑÑ ¿º
- ¬½ετÑ⌐ (keys). ÉáßΦ¿α¿Γ∞ ßѼá¡Γ¿¬π ¬½ετÑ⌐ ¡á óßε ßÑΓ∞ ñ«ó«½∞¡« Γαπñ¡«, »«ß-
- ¬«½∞¬π ¡á αạδσ ¼áΦ¿¡áσ ¬½ετ¿ ¼«úπΓ «»¿ßδóáΓ∞ αẽ¿τ¡δÑ «íΩѬΓδ. è«α«τÑ ú«-
- ó«α∩, ¬½ετ¿ ó «ß¡«ó¡«¼ »αÑñ¡áº¡áτÑ¡δ ñ½∩ ¿ß»«½∞º«óá¡¿∩ ó «ñ¡«¼áΦ¿¡¡δσ ß¿ßΓÑ-
- ¼áσ. ê¼Ñ¡á Σá⌐½«ó ó í«½∞ΦÑ⌐ ßΓѻѡ¿ »«ñσ«ñ∩Γ ñ½∩ αáß»αÑñѽѡ¡δσ ß¿ßΓѼ (ß¼.
- ú½áóπ 13). êß»«½∞º«óá¡¿Ñ ¬½ετÑ⌐ ó¼ÑßΓ« ¿¼Ñ¡ Σá⌐½«ó Γá¬ªÑ ßó¿ñÑΓѽ∞ßΓóπÑΓ «
- Γ«¼, τΓ« ßαÑñßΓóá óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó ∩ó½∩εΓß∩ "óÑΘ∞ε ó ßÑíÑ", »«½Ñº¡«⌐
- ó ߻ѵ¿á½∞¡δσ »α¿½«ªÑ¡¿∩σ, ¡« ¡Ñ ¿¼ÑεΘÑ⌐ ΓÑσ 󫺼«ª¡«ßΓÑ⌐, ¬«Γ«α묨 «í½áñá-
- εΓ, ¡á»α¿¼Ñα, ¬á¡á½δ ¿ Σá⌐½δ. ü«½∞Φá∩ τáßΓ∞ Σπ¡¬µ¿«¡á½∞¡δσ 󫺼«ª¡«ßΓÑ⌐,
- »αÑñ«ßΓáó½∩Ѽδσ ñá¡¡δ¼¿ ßαÑñßΓóἿ, ¼«ªÑΓ íδΓ∞ αÑ὿º«óá¡á ß »«¼«Θ∞ε ñαπú¿σ
- ß¿ßΓѼ¡δσ ßαÑñßΓó, »«φΓ«¼π ó¬½ετáΓ∞ ¿σ ó ß«ßΓáó ∩ñαá óα∩ñ ½¿ ß½Ññ«óὫ íδ.
- ÆÑ¼ ¡Ñ ¼Ñ¡ÑÑ, ¿σ ¿ß»«½∞º«óá¡¿Ñ ó ß«ßΓáóÑ »á¬ÑΓ«ó »α¿¬½áñ¡δσ »α«úαá¼¼ ΓÑß¡«ú«
- óºá¿¼«ñÑ⌐ßΓó¿∩ ñáÑΓ ½πτΦ¿Ñ αѺπ½∞ΓáΓδ »« ßαáó¡Ñ¡¿ε ß« ßΓá¡ñáαΓ¡δ¼¿ Σá⌐½«ó묨
- ßαÑñßΓóἿ (ß¼. ô»α᪡ѡ¿∩).
-
-
- E11.3 éçÇêîÄäàëæÆéêà é æàÆêF
-
- Åα«úαá¼¼δ, »«ññÑনóáεΘ¿Ñ ¼Ñª¼áΦ¿¡¡πε ßó∩º∞, ΓᬿÑ, ¬á¬ φ½Ñ¬Γα«¡¡á∩ »«τ-
- Γá, »α«úαá¼¼δ ñ¿ßΓᡵ¿«¡¡«⌐ »ÑαÑß佬¿ Σá⌐½«ó ¿ πñá½Ñ¡¡«⌐ αÑú¿ßΓαᵿ¿, ¿ºñáó-
- ¡á ¿ß»«½∞ºπεΓß∩ ó ¬áτÑßΓóÑ ß»Ñµ¿á½∞¡δσ ßαÑñßΓó «αúá¡¿ºáµ¿¿ »«ñ¬½ετÑ¡¿⌐ ¿ ¿¡-
- Σ«α¼áµ¿«¡¡«ú« «í¼Ñ¡á. Æá¬, ¡á»α¿¼Ñα, ßΓá¡ñáαΓ¡δÑ »α«úαá¼¼δ, αáí«ΓáεΘ¿Ñ ó
- ß«ßΓáóÑ φ½Ñ¬Γα«¡¡«⌐ »«τΓδ, ß«σαá¡∩εΓ ΓѬßΓ »«τΓ«óδσ ß««íΘÑ¡¿⌐ »«½∞º«óáΓѽ∩ ó
- «Γñѽ∞¡«¼ Σá⌐½Ñ (ñ½∩ »«½∞º«óáΓѽ∩ "mjb" φëà Σá⌐½ ¿¼ÑÑΓ ¿¼∩
- "/usr/mail/mjb"). è«úñá «ñ¿¡ »«½∞º«óáΓѽ∞ »«ßδ½áÑΓ ñαπú«¼π »«τΓ«ó«Ñ ß««íΘÑ-
- ¡¿Ñ ¡á Γπ ªÑ ¼áΦ¿¡π, »α«úαá¼¼á mail (»«τΓá) ñ«íáó½∩ÑΓ ß««íΘÑ¡¿Ñ ó ¬«¡Ñµ Σá⌐-
- ½á áñαÑßáΓá, ¿ß»«½∞ºπ∩ ó µÑ½∩σ ß«σαá¡Ñ¡¿∩ µÑ½«ßΓ¡«ßΓ¿ αẽ¿τ¡δÑ í½«¬¿απεΘ¿Ñ
- ¿ óαѼѡ¡δÑ Σá⌐½δ. è«úñá áñαÑßáΓ »«½πτáÑΓ »«τΓπ, »α«úαá¼¼á mail «Γ¬αδóáÑΓ
- »α¿¡áñ½ÑªáΘ¿⌐ Ñ¼π »«τΓ«óδ⌐ Σá⌐½ ¿ τ¿ΓáÑΓ ß««íΘÑ¡¿∩. ä½∩ Γ«ú«, τΓ«íδ »«ß½áΓ∞
- ß««íΘÑ¡¿Ñ ¡á ñαπúπε ¼áΦ¿¡π, »α«úαá¼¼á mail ñ«½ª¡á ó ¬«¡Ñτ¡«¼ ¿Γ«úÑ «Γδ߬áΓ∞
- ¡á ¡Ñ⌐ ß««ΓóÑΓßΓóπεΘ¿⌐ »«τΓ«óδ⌐ Σá⌐½. ū߬«½∞¬π »α«úαá¼¼á ¡Ñ ¼«ªÑΓ αáí«ΓáΓ∞
- ß πñá½Ñ¡¡δ¼¿ Σá⌐½á¼¿ ¡Ñ»«ßαÑñßΓóÑ¡¡«, »α«µÑßß, »α«ΓѬáεΘ¿⌐ ¡á ñαπú«⌐ ¼áΦ¿¡Ñ,
- ñ«½ªÑ¡ ñÑ⌐ßΓó«óáΓ∞ ó ¬áτÑßΓóÑ áúÑ¡Γá ½«¬á½∞¡«ú« »«τΓ«ó«ú« »α«µÑßßá; ß½Ññ«óá-
- Γѽ∞¡«, ½«¬á½∞¡«¼π »α«µÑßßπ ¡Ñ«íσ«ñ¿¼ ß»«ß«í ßó∩º¿ ß« ßó«¿¼ πñá½Ñ¡¡δ¼ áúÑ¡-
- Γ«¼ τÑαѺ ¼Ñª¼áΦ¿¡¡δÑ úαá¡¿µδ. 﫬á½∞¡δ⌐ »α«µÑßß ∩ó½∩ÑΓß∩ ¬½¿Ñ¡Γ«¼ πñá½Ñ¡¡«-
- ú« «íß½πª¿óáεΘÑú« (ßÑαóÑα¡«ú«) »α«µÑßßá.
- ū߬«½∞¬π ó ß¿ßΓÑ¼Ñ UNIX ¡«óδÑ »α«µÑßßδ ß«ºñáεΓß∩ ß »«¼«Θ∞ε ß¿ßΓѼ¡«⌐
- Σπ¡¬µ¿¿ fork, ¬ Γ«¼π ¼«¼Ñ¡Γπ, ¬«úñá ¬½¿Ñ¡Γ »«»δΓáÑΓß∩ óδ»«½¡¿Γ∞ »«ñ¬½ετÑ¡¿Ñ,
- «íß½πª¿óáεΘ¿⌐ »α«µÑßß πªÑ ñ«½ªÑ¡ ßπΘÑßΓó«óáΓ∞. àß½¿ íδ ó ¼«¼Ñ¡Γ ß«ºñá¡¿∩ ¡«-
- ó«ú« »α«µÑßßá πñá½Ñ¡¡«Ñ ∩ñα« »«½πτὫ ºá»α«ß ¡á »«ñ¬½ετÑ¡¿Ñ (»« ¬á¡á½á¼ ¼Ñª-
- ¼áΦ¿¡¡«⌐ ßó∩º¿), 󫺡¿¬½á íδ ¡Ñß«ú½áß«óá¡¡«ßΓ∞ ß áασ¿ΓѬΓπα«⌐ ß¿ßΓѼδ. ùΓ«íδ
-
- 354
-
- ¿ºíѪáΓ∞ φΓ«ú«, ¡Ñ¬¿⌐ »α«µÑßß, «íδτ¡« init, »«α«ªñáÑΓ «íß½πª¿óáεΘ¿⌐ »α«µÑßß,
- ¬«Γ«αδ⌐ óÑñÑΓ τΓÑ¡¿Ñ ¿º ¬á¡á½á ßó∩º¿, »«¬á ¡Ñ »«½πτáÑΓ ºá»α«ß ¡á «íß½πª¿óá-
- ¡¿Ñ, »«ß½Ñ τÑú« ó ß««ΓóÑΓßΓó¿¿ ß ¡Ñ¬«Γ«αδ¼ »α«Γ«¬«½«¼ óδ»«½¡∩ÑΓ πßΓá¡«ó¬π
- ß«Ññ¿¡Ñ¡¿∩. éδí«α ßÑΓÑóδσ ßαÑñßΓó ¿ »α«Γ«¬«½«ó «íδτ¡« óδ»«½¡∩εΓ »α«úαá¼¼δ
- ¬½¿Ñ¡Γá ¿ ßÑαóÑαá, «ß¡«óδóá∩ß∞ ¡á ¿¡Σ«α¼áµ¿¿, σαá¡∩ΘÑ⌐ß∩ ó »α¿¬½áñ¡δσ íáºáσ
- ñá¡¡δσ; ß ñαπú«⌐ ßΓ«α«¡δ, óδíαá¡¡δÑ »«½∞º«óáΓѽѼ ßαÑñßΓóá ¼«úπΓ íδΓ∞ ºá¬«-
- ñ¿α«óá¡δ ó ßἿσ »α«úαá¼¼áσ.
- é ¬áτÑßΓóÑ »α¿¼Ñαá αáßß¼«Γα¿¼ »α«úαá¼¼π uucp, ¬«Γ«αá∩ «íß½πª¿óáÑΓ »ÑαÑ-
- ß佬π Σá⌐½«ó ó ßÑΓ¿ ¿ ¿ß»«½¡Ñ¡¿Ñ ¬«¼á¡ñ ¡á πñá½Ñ¡¿¿ (ß¼. [Nowitz 80]). Åα«-
- µÑßß-¬½¿Ñ¡Γ ºá»αáΦ¿óáÑΓ ó íáºÑ ñá¡¡δσ áñαÑß ¿ ñαπúπε ¼áαΦαπΓ¡πε ¿¡Σ«α¼áµ¿ε
- (¡á»α¿¼Ñα, ¡«¼Ñα ΓѽÑΣ«¡á), «Γ¬αδóáÑΓ áóΓ«¬«¼¼πΓáΓ«α, ºá»¿ßδóáÑΓ ¿½¿ »α«óÑ-
- α∩ÑΓ ¿¡Σ«α¼áµ¿ε ó ñÑß¬α¿»Γ«αÑ «Γ¬αδóáѼ«ú« Σá⌐½á ¿ óδºδóáÑΓ πñá½Ñ¡¡πε ¼áΦ¿-
- ¡π. ôñá½Ñ¡¡á∩ ¼áΦ¿¡á ¼«ªÑΓ ¿¼ÑΓ∞ ߻ѵ¿á½∞¡δÑ ½¿¡¿¿, óδñѽѡ¡δÑ ñ½∩ ¿ß»«½∞º«-
- óá¡¿∩ »α«úαá¼¼«⌐ uucp; óδ»«½¡∩εΘ¿⌐ß∩ ¡á φΓ«⌐ ¼áΦ¿¡Ñ »α«µÑßß init »«α«ªñáÑΓ
- getty-»α«µÑßßδ - ßÑαóÑαδ, ¬«Γ«αδÑ π»αáó½∩εΓ ½¿¡¿∩¼¿ ¿ »«½πτáεΓ ¿ºóÑΘÑ¡¿∩ «
- »«ñ¬½ετÑ¡¿∩σ. Å«ß½Ñ óδ»«½¡Ñ¡¿∩ á»»áαáΓ¡«ú« »«ñ¬½ετÑ¡¿∩ »α«µÑßß-¬½¿Ñ¡Γ αÑú¿ß-
- Γα¿απÑΓß∩ ó ß¿ßΓÑ¼Ñ ó ß««ΓóÑΓßΓó¿¿ ß «íδτ¡δ¼ »α«Γ«¬«½«¼ αÑú¿ßΓαᵿ¿:
- getty-»α«µÑßß ºá»π߬áÑΓ ß»Ñµ¿á½∞¡δ⌐ ¿¡ΓÑα»αÑΓáΓ«α ¬«¼á¡ñ, uucico, π¬áºá¡¡δ⌐
- ó Σá⌐½Ñ "/etc/passwd", á »α«µÑßß-¬½¿Ñ¡Γ »ÑαÑñáÑΓ ¡á πñá½Ñ¡¡πε ¼áΦ¿¡π »«ß½Ñ-
- ñ«óáΓѽ∞¡«ßΓ∞ ¬«¼á¡ñ, ΓѼ ßá¼δ¼ ºáßΓáó½∩∩ ÑÑ ¿ß»«½¡∩Γ∞ »α«µÑßßδ «Γ ¿¼Ñ¡¿ ½«-
- ¬á½∞¡«⌐ ¼áΦ¿¡δ.
- æÑΓÑó«Ñ óºá¿¼«ñÑ⌐ßΓó¿Ñ ó ß¿ßΓÑ¼Ñ UNIX »αÑñßΓáó½∩ÑΓ ßÑα∞Ѻ¡πε »α«í½Ñ¼π,
- »«ß¬«½∞¬π ß««íΘÑ¡¿∩ ñ«½ª¡δ ó¬½ετáΓ∞ ó ßÑí∩ ¬á¬ ¿¡Σ«α¼áµ¿«¡¡πε, Γᬠ¿ π»αáó-
- ½∩εΘπε τáßΓ¿. é π»αáó½∩εΘÑ⌐ τáßΓ¿ ß««íΘÑ¡¿∩ ¼«ªÑΓ αáß»«½áúáΓ∞ß∩ áñαÑß ¡áº¡á-
- τÑ¡¿∩ ß««íΘÑ¡¿∩. é ßó«ε «τÑαÑñ∞, ßΓαπ¬Γπαá áñαÑß¡δσ ñá¡¡δσ ºáó¿ß¿Γ «Γ Γ¿»á
- ßÑΓ¿ ¿ ¿ß»«½∞ºπѼ«ú« »α«Γ«¬«½á. æ½Ññ«óáΓѽ∞¡«, »α«µÑßßá¼ ¡πª¡« º¡áΓ∞ Γ¿» ßÑ-
- Γ¿, á φΓ« ¿ñÑΓ óαáºαѺ ß ΓѼ »α¿¡µ¿»«¼, »« ¬«Γ«α«¼π »«½∞º«óáΓѽ¿ ¡Ñ ñ«½ª¡δ
- «íαáΘáΓ∞ 󡿼᡿∩ ¡á Γ¿» Σá⌐½á, ¿í« óßÑ πßΓα«⌐ßΓóá ñ½∩ »«½∞º«óáΓѽÑ⌐ óδú½∩-
- ñ∩Γ ¬á¬ Σá⌐½δ. Æαáñ¿µ¿«¡¡δÑ ¼ÑΓ«ñδ αÑ὿ºáµ¿¿ ßÑΓÑó«ú« óºá¿¼«ñÑ⌐ßΓó¿∩ »α¿
- πßΓá¡«ó¬Ñ π»αáó½∩εΘ¿σ »áαá¼ÑΓα«ó ó ß¿½∞¡«⌐ ßΓѻѡ¿ »«½áúáεΓß∩ ¡á »«¼«Θ∞ ß¿ß-
- ΓѼ¡«⌐ Σπ¡¬µ¿¿ ioctl, «ñ¡á¬« ó αạδσ Γ¿»áσ ßÑΓÑ⌐ φëà ¼«¼Ñ¡Γ ó«»½«ΘáÑΓß∩
- »«-αạ«¼π. ÄΓßεñá 󫺡¿¬áÑΓ ¡ÑªÑ½áΓѽ∞¡δ⌐ »«í«τ¡δ⌐ φΣΣѬΓ, ßó∩ºá¡¡δ⌐ ß ΓѼ,
- τΓ« »α«úαá¼¼δ, αáºαáí«Γá¡¡δÑ ñ½∩ «ñ¡«⌐ ßÑΓ¿, ó ñαπú¿σ ßÑΓ∩σ ¼«úπΓ ¡Ñ ºáαáí«-
- ΓáΓ∞.
- ùΓ«íδ αáºαáí«ΓáΓ∞ ßÑΓÑóδÑ ¿¡ΓÑαΣÑ⌐ßδ ñ½∩ ß¿ßΓѼδ UNIX, í뫨 »αÑñ»α¿¡∩Γδ
- º¡áτ¿Γѽ∞¡δÑ πß¿½¿∩. ÉÑ὿ºáµ¿∩ »«Γ«¬«ó ó »«ß½Ññ¡¿σ αÑñᬵ¿∩σ óÑαß¿¿ V αáß-
- »«½áúáÑΓ φ½Ñúá¡Γ¡δ¼ ¼Ñσá¡¿º¼«¼ »«ññÑ᪬¿ ßÑΓÑó«ú« óºá¿¼«ñÑ⌐ßΓó¿∩, «íÑß»Ñτ¿-
- óáεΘ¿¼ ú¿í¬«Ñ ß«τÑΓá¡¿Ñ «Γñѽ∞¡δσ ¼«ñπ½Ñ⌐ »α«Γ«¬«½«ó ¿ ¿σ ß«ú½áß«óá¡¡«Ñ ¿ß-
- »«½∞º«óá¡¿Ñ ¡á πα«ó¡Ñ ºáñáτ. æ½ÑñπεΘ¿⌐ αáºñѽ »«ßó∩ΘÑ¡ ¬αáΓ¬«¼π «»¿ßá¡¿ε ¼Ñ-
- Γ«ñá αÑΦÑ¡¿∩ ñá¡¡δσ »α«í½Ñ¼ ó ß¿ßΓÑ¼Ñ BSD, «ß¡«óá¡¡«ú« ¡á ¿ß»«½∞º«óá¡¿¿
- ú¡Ñºñ.
-
-
- E11.4 âìàçäÇF
-
- é »αÑñδñπΘѼ αáºñÑ½Ñ í佫 »«¬áºá¡«, ¬á¬¿¼ «íαẫ¼ óºá¿¼«ñÑ⌐ßΓóπεΓ ¼Ñªñπ
- ß«í«⌐ »α«µÑßßδ, »α«ΓѬáεΘ¿Ñ ¡á αạδσ ¼áΦ¿¡áσ, »α¿ φΓ«¼ «íαáΘὫß∞ 󡿼᡿Ñ
- ¡á Γ«, τΓ« ß»«ß«íδ αÑ὿ºáµ¿¿ óºá¿¼«ñÑ⌐ßΓó¿∩ ¼«úπΓ íδΓ∞ αẽ¿τáΓ∞ß∩ ó ºáó¿-
- ß¿¼«ßΓ¿ «Γ ¿ß»«½∞ºπѼδσ »α«Γ«¬«½«ó ¿ ßÑΓÑóδσ ßαÑñßΓó. ü«½ÑÑ Γ«ú«, φΓ¿ ß»«ß«-
- íδ ¡Ñ óßÑúñá »α¿¼Ñ¡¿¼δ ñ½∩ «íß½πª¿óá¡¿∩ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó, óδ»«½¡∩ε-
- Θ¿σß∩ ¡á «ñ¡«⌐ ¿ Γ«⌐ ªÑ ¼áΦ¿¡Ñ, »«ß¬«½∞¬π ó ¡¿σ »αÑñ»«½áúáÑΓß∩ ßπΘÑßΓó«óá¡¿Ñ
- «íß½πª¿óáεΘÑú« (ßÑαóÑα¡«ú«) »α«µÑßßá, ¬«Γ«αδ⌐ »α¿ óδ»«½¡Ñ¡¿¿ ß¿ßΓѼ¡δσ Σπ¡¬-
- µ¿⌐ open ¿½¿ read íπñÑΓ »α¿«ßΓá¡áó½¿óáΓ∞ß∩ ñαá⌐óÑα«¼. é µÑ½∩σ ß«ºñá¡¿∩ í«½ÑÑ
- π¡¿óÑαßá½∞¡δσ ¼ÑΓ«ñ«ó óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó ¡á «ß¡«óÑ ¿ß»«½∞º«óá¡¿∩ ¼¡«-
- ú«πα«ó¡Ñóδσ ßÑΓÑóδσ »α«Γ«¬«½«ó ñ½∩ ß¿ßΓѼδ BSD íδ½ αáºαáí«Γá¡ ¼Ñσá¡¿º¼, »«-
- ½πτ¿óΦ¿⌐ ¡áºóá¡¿Ñ "sockets" (ú¡Ñºñá) (ß¼. [Berkeley 83]). é ñá¡¡«¼ αáºñѽÑ
- ¼δ αáßß¼«Γα¿¼ ¡Ñ¬«Γ«αδÑ á߻ѬΓδ »α¿¼Ñ¡Ñ¡¿∩ ú¡Ñºñ (¡á »«½∞º«óáΓѽ∞߬«¼ πα«ó¡Ñ
- »αÑñßΓáó½Ñ¡¿∩).
-
-
- 355
-
- Åα«µÑßß-¬½¿Ñ¡Γ Åα«µÑßß-ßÑαóÑα
- │ │
- └──┐ ┌──┘
- ┌─────────────────────────┼──┐ ┌──┼──────────────────────────┐
- │ ôα«óÑ¡∞ ú¡Ñºñ │ │ ôα«óÑ¡∞ ú¡Ñºñ │
- ├─────────────────────────┼──┤ ├──┼──────────────────────────┤
- │ TCP │ │ TCP │
- │ ôα«óÑ¡∞ »α«Γ«¬«½«ó │ │ │ │ ôα«óÑ¡∞ »α«Γ«¬«½«ó │
- │ IP │ │ IP │
- ├─────────────────────────┼──┤ ├──┼──────────────────────────┤
- │ äαá⌐óÑα│ │ äαá⌐óÑα │
- │ ôα«óÑ¡∞ πßΓα«⌐ßΓó Ethernet│ │Ethernet ôα«óÑ¡∞ πßΓα«⌐ßΓó │
- └─────────────────────────┼──┘ └──┼──────────────────────────┘
- └───┐ ┌───┘
- │ │
- æ Ñ Γ ∞
-
- É¿ßπ¡«¬ 11.18. î«ñѽ∞ ß ¿ß»«½∞º«ó᡿Ѽ ú¡Ñºñ
-
- æΓαπ¬Γπαá ∩ñαá ¿¼ÑÑΓ Γα¿ πα«ó¡∩: ú¡Ñºñ, »α«Γ«¬«½«ó ¿ πßΓα«⌐ßΓó (É¿ßπ¡«¬
- 11.18). ôα«óÑ¡∞ ú¡Ñºñ óδ»«½¡∩ÑΓ Σπ¡¬µ¿¿ ¿¡ΓÑαΣÑ⌐ßá ¼Ñªñπ «íαáΘÑ¡¿∩¼¿ ¬ «»Ñ-
- αᵿ«¡¡«⌐ ß¿ßΓÑ¼Ñ (ß¿ßΓѼ¡δ¼ Σπ¡¬µ¿∩¼) ¿ ßαÑñßΓóἿ ¡¿º¬¿σ πα«ó¡Ñ⌐, πα«óÑ¡∞
- »α«Γ«¬«½«ó ß«ñÑαª¿Γ ¼«ñπ½¿, «íÑß»Ñτ¿óáεΘ¿Ñ óºá¿¼«ñÑ⌐ßΓó¿Ñ »α«µÑßß«ó (¡á α¿-
- ßπ¡¬Ñ π»«¼∩¡πΓδ »α«Γ«¬«½δ TCP ¿ IP), á πα«óÑ¡∞ πßΓα«⌐ßΓó ß«ñÑαª¿Γ ñαá⌐óÑαδ,
- π»αáó½∩εΘ¿Ñ ßÑΓÑó묨 πßΓα«⌐ßΓóἿ. ä«»πßΓ¿¼δÑ ß«τÑΓá¡¿∩ »α«Γ«¬«½«ó ¿ ñαá⌐óÑ-
- α«ó π¬áºδóáεΓß∩ »α¿ »«ßΓα«Ñ¡¿¿ ß¿ßΓѼδ (ó ßѬµ¿¿ ¬«¡Σ¿úπαᵿ¿); φΓ«Γ ß»«ß«í
- πßΓπ»áÑΓ »« ú¿í¬«ßΓ¿ óδΦÑπ»«¼∩¡πΓ«¼π »«Γ«¬«ó«¼π ¼Ñσá¡¿º¼π. Åα«µÑßßδ óºá¿¼«-
- ñÑ⌐ßΓóπεΓ ¼Ñªñπ ß«í«⌐ »« ßσÑ¼Ñ ¬½¿Ñ¡Γ-ßÑαóÑα: ßÑαóÑα ªñÑΓ ß¿ú¡á½á «Γ ú¡Ñºñá,
- ¡áσ«ñ∩ß∞ ¡á «ñ¡«¼ ¬«¡µÑ ñπ»½Ñ¬ß¡«⌐ ½¿¡¿¿ ßó∩º¿, á »α«µÑßßδ-¬½¿Ñ¡Γδ óºá¿¼«-
- ñÑ⌐ßΓóπεΓ ß ßÑαóÑα«¼ τÑαѺ ú¡Ñºñ«, ¡áσ«ñ∩ΘÑÑß∩ ¡á ñαπú«¼ ¬«¡µÑ, ¬«Γ«αδ⌐ ¼«-
- ªÑΓ αáß»«½áúáΓ∞ß∩ ¡á ñαπú«⌐ ¼áΦ¿¡Ñ. ƒñα« «íÑß»Ñτ¿óáÑΓ ó¡πΓαÑ¡¡εε ßó∩º∞ ¿ »Ñ-
- αÑñáÑΓ ñá¡¡δÑ «Γ ¬½¿Ñ¡Γá ¬ ßÑαóÑαπ.
- â¡Ñºñá, «í½áñáεΘ¿Ñ «ñ¿¡á¬«ó묨 ßó«⌐ßΓóἿ, ¡á»α¿¼Ñα, «»¿αáεΘ¿Ñß∩ ¡á «í-
- Θ¿Ñ ß«ú½áΦÑ¡¿∩ »« ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ ¿ Σ«α¼áΓδ áñαÑß«ó (ó »α«Γ«¬«½áσ), úαπ»»¿απ-
- εΓß∩ ó ñ«¼Ñ¡δ (π»αáó½∩ѼδÑ «ñ¡¿¼ πº½«¼). é ß¿ßΓÑ¼Ñ BSD 4.2 »«ññÑনóáεΓß∩
- ñ«¼Ñ¡δ: "UNIX system" - ñ½∩ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó ó¡πΓα¿ «ñ¡«⌐ ¼áΦ¿¡δ ¿
- "Internet" (¼ÑªßÑΓÑó«⌐) - ñ½∩ óºá¿¼«ñÑ⌐ßΓó¿∩ τÑαѺ ßÑΓ∞ ß »«¼«Θ∞ε »α«Γ«¬«½á
- DARPA (ô»αáó½Ñ¡¿Ñ »Ñαß»Ñ¬Γ¿ó¡δσ ¿ßß½Ññ«óá¡¿⌐ ¿ αáºαáí«Γ«¬ î¿¡¿ßΓÑαßΓóá «í«-
- α«¡δ æÿÇ) (ß¼. [Postel 80] ¿ [Postel 81]). â¡Ñºñá íδóáεΓ ñóπσ Γ¿»«ó: ó¿αΓπ-
- á½∞¡δ⌐ ¬á¡á½ (»«Γ«¬«ó«Ñ ú¡Ñºñ«, Ñß½¿ »«½∞º«óáΓ∞ß∩ ΓÑନ¡«½«ú¿Ñ⌐ üÑᬽ¿) ¿
- ñÑ⌐Γáúαá¼¼á. é¿αΓπá½∞¡δ⌐ ¬á¡á½ «íÑß»Ñτ¿óáÑΓ ¡áñѪ¡πε ñ«ßΓáó¬π ñá¡¡δσ ß ß«σ-
- αá¡Ñ¡¿Ñ¼ ¿ßσ«ñ¡«⌐ »«ß½Ññ«óáΓѽ∞¡«ßΓ¿. äÑ⌐Γáúαá¼¼δ ¡Ñ úáαá¡Γ¿απεΓ ¡áñѪ¡πε
- ñ«ßΓáó¬π ß ß«σαá¡Ñ¡¿Ñ¼ π¡¿¬á½∞¡«ßΓ¿ ¿ »«ß½Ññ«óáΓѽ∞¡«ßΓ¿, ¡« «¡¿ í«½ÑÑ φ¬«-
- ¡«¼¡δ ó ß¼δ᫥ ¿ß»«½∞º«óá¡¿∩ αÑßπαß«ó, »«ß¬«½∞¬π ñ½∩ ¡¿σ ¡Ñ ΓαÑíπεΓß∩ ß½«ª-
- ¡δÑ πßΓá¡«ó«τ¡δÑ «»Ñαᵿ¿; Γᬿ¼ «íαẫ¼, ñÑ⌐Γáúαá¼¼δ »«½Ñº¡δ ó «Γñѽ∞¡δσ
- ß½πτá∩σ óºá¿¼«ñÑ⌐ßΓó¿∩. ä½∩ ¬áªñ«⌐ ñ«»πßΓ¿¼«⌐ ¬«¼í¿¡áµ¿¿ Γ¿»á ñ«¼Ñ¡-ú¡Ñºñ« ó
- ß¿ßΓÑ¼Ñ »«ññÑনóáÑΓß∩ π¼«½τá¡¿Ñ ¡á ¿ß»«½∞ºπѼδ⌐ »α«Γ«¬«½. Æá¬, ¡á»α¿¼Ñα,
- ñ½∩ ñ«¼Ñ¡á "Internet" πß½πú¿ ó¿αΓπá½∞¡«ú« ¬á¡á½á óδ»«½¡∩ÑΓ »α«Γ«¬«½ Γαá¡ß-
- »«αΓ¡«⌐ ßó∩º¿ (TCP), á Σπ¡¬µ¿¿ ñÑ⌐Γáúαá¼¼δ - »«½∞º«óáΓѽ∞߬¿⌐ ñÑ⌐Γáúαá¼¼¡δ⌐
- »α«Γ«¬«½ (UDP).
- æπΘÑßΓóπÑΓ ¡Ñ߬«½∞¬« ß¿ßΓѼ¡δσ Σπ¡¬µ¿⌐ αáí«Γδ ß ú¡ÑºñἿ. öπ¡¬µ¿∩ socket
- πßΓá¡áó½¿óáÑΓ «¬«¡Ñτ¡πε Γ«τ¬π ½¿¡¿¿ ßó∩º¿.
-
- sd = socket(format,type,protocol);
-
- Format «í«º¡áτáÑΓ ñ«¼Ñ¡ ("UNIX system" ¿½¿ "Internet"), type - Γ¿» ßó∩º¿ τÑ-
- αѺ ú¡Ñºñ« (ó¿αΓπá½∞¡δ⌐ ¬á¡á½ ¿½¿ ñÑ⌐Γáúαá¼¼á), á protocol - Γ¿» »α«Γ«¬«½á,
- π»αáó½∩εΘÑú« óºá¿¼«ñÑ⌐ßΓó¿Ñ¼. äÑß¬α¿»Γ«α ú¡Ñºñá sd, ó«ºóαáΘáѼδ⌐ Σπ¡¬µ¿Ñ⌐
- socket, ¿ß»«½∞ºπÑΓß∩ ñαπú¿¼¿ ß¿ßΓѼ¡δ¼¿ Σπ¡¬µ¿∩¼¿. çá¬αδΓ¿Ñ ú¡Ñºñ óδ»«½¡∩ÑΓ
-
- 356
-
- Σπ¡¬µ¿∩ close.
- öπ¡¬µ¿∩ bind ßó∩ºδóáÑΓ ñÑß¬α¿»Γ«α ú¡Ñºñá ß ¿¼Ñ¡Ñ¼:
-
- bind(sd,address,length);
-
- úñÑ sd - ñÑß¬α¿»Γ«α ú¡Ñºñá, address - áñαÑß ßΓαπ¬Γπαδ, «»αÑñѽ∩εΘÑ⌐ ¿ñÑ¡Γ¿-
- Σ¿¬áΓ«α, σáαá¬ΓÑα¡δ⌐ ñ½∩ ñá¡¡«⌐ ¬«¼í¿¡áµ¿¿ ñ«¼Ñ¡á ¿ »α«Γ«¬«½á (ó Σπ¡¬µ¿¿
- socket). Length - ñ½¿¡á ßΓαπ¬Γπαδ address; íѺ φΓ«ú« »áαá¼ÑΓαá ∩ñα« ¡Ñ º¡á½«
- íδ, ¬á¬«óá ñ½¿¡á ßΓαπ¬Γπαδ, »«ß¬«½∞¬π ñ½∩ αạδσ ñ«¼Ñ¡«ó ¿ »α«Γ«¬«½«ó «¡á
- ¼«ªÑΓ íδΓ∞ αẽ¿τ¡«⌐. ìá»α¿¼Ñα, ñ½∩ ñ«¼Ñ¡á "UNIX system" ßΓαπ¬Γπαá ß«ñÑনΓ
- ¿¼∩ Σá⌐½á. Åα«µÑßßδ-ßÑαóÑαδ ßó∩ºδóáεΓ ú¡Ñºñá ß ¿¼Ñ¡á¼¿ ¿ «íΩ∩ó½∩εΓ « ß«ßΓ«-
- ∩óΦѼß∩ »α¿ßó«Ñ¡¿¿ ¿¼Ñ¡ »α«µÑßßá¼-¬½¿Ñ¡Γá¼.
- æ »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ connect ñѽáÑΓß∩ ºá»α«ß ¡á »«ñ¬½ετÑ¡¿Ñ ¬ ßπ-
- ΘÑßΓóπεΘѼπ ú¡Ñºñπ:
-
- connect(sd,address,length);
-
- æÑ¼á¡Γ¿τÑ߬¿⌐ ß¼δß½ »áαá¼ÑΓα«ó Σπ¡¬µ¿¿ «ßΓáÑΓß∩ »αѪ¡¿¼ (ß¼. Σπ¡¬µ¿ε bind),
- ¡« address π¬áºδóáÑΓ πªÑ ¡á óδσ«ñ¡«Ñ ú¡Ñºñ«, «íαáºπεΘÑÑ »α«Γ¿ó«»«½«ª¡δ⌐ ¬«-
- ¡Ñµ ½¿¡¿¿ ßó∩º¿. Äíá ú¡Ñºñá ñ«½ª¡δ ¿ß»«½∞º«óáΓ∞ «ñ¡¿ ¿ ΓÑ ªÑ ñ«¼Ñ¡ ¿ »α«Γ«-
- ¬«½ ßó∩º¿, ¿ Γ«úñá ∩ñα« πñ«ßΓ«óÑα¿Γ »αáó¿½∞¡«ßΓ∞ πßΓá¡«ó¬¿ ½¿¡¿¿ ßó∩º¿. àß½¿
- Γ¿» ú¡Ñºñá - ñÑ⌐Γáúαá¼¼á, ß««íΘáѼδ⌐ Σπ¡¬µ¿Ñ⌐ connect ∩ñαπ áñαÑß íπñÑΓ ¿ß-
- »«½∞º«óáΓ∞ß∩ ó »«ß½ÑñπεΘ¿σ «íαáΘÑ¡¿∩σ ¬ Σπ¡¬µ¿¿ send τÑαѺ ñá¡¡«Ñ ú¡Ñºñ«; ó
- ¼«¼Ñ¡Γ ó맮óá ¡¿¬á¬¿σ ß«Ññ¿¡Ñ¡¿⌐ ¡Ñ »α«¿ºó«ñ¿Γß∩.
- Å«¬á »α«µÑßß-ßÑαóÑα ú«Γ«ó¿Γß∩ ¬ »α¿Ñ¼π ßó∩º¿ »« ó¿αΓπá½∞¡«¼π ¬á¡á½π, ∩ñ-
- απ ß½ÑñπÑΓ óδßΓα«¿Γ∞ »«ßΓπ»áεΘ¿Ñ ºá»α«ßδ ó «τÑαÑñ∞ ¡á «íß½πª¿óá¡¿Ñ. îá¬ß¿-
- ¼á½∞¡á∩ ñ½¿¡á «τÑαÑñ¿ ºáñáÑΓß∩ ß »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ listen:
-
- listen(sd,qlength)
-
- úñÑ sd - ñÑß¬α¿»Γ«α ú¡Ñºñá, á qlength - ¼á¬ß¿¼á½∞¡«-ñ«»πßΓ¿¼«Ñ τ¿ß½« ºá»α«-
- ß«ó, «ª¿ñáεΘ¿σ «íαáí«Γ¬¿.
-
-
- ┌────────────────────┐ ┌─────────────────────────┐
- │ Åα«µÑßß-¬½¿Ñ¡Γ │ │ Åα«µÑßß-ßÑαóÑα │
- │ │ │ │ │ ∙ │
- │ │ │ │ ┌────┘ ∙∙∙∙∙∙ │
- │ │ │ │ │ ∙ │
- │ │ │ │listen addr accept addr│
- └─────────┼──────────┘ └─────┼────────────∙──────┘
- │ │ ∙
- └──────────────────────────┘∙∙∙∙∙∙∙∙∙∙∙∙∙
-
- É¿ßπ¡«¬ 11.19. Åα¿Ñ¼ ó맮óá ßÑαóÑα«¼
-
-
- æ¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ accept »α¿¡¿¼áÑΓ ºá»α«ßδ ¡á »«ñ¬½ετÑ¡¿Ñ, »«ßΓπ»áεΘ¿Ñ
- ¡á óσ«ñ »α«µÑßßá-ßÑαóÑαá:
-
- nsd = accept(sd,address,addrlen);
-
- úñÑ sd - ñÑß¬α¿»Γ«α ú¡Ñºñá, address - π¬áºáΓѽ∞ ¡á »«½∞º«óáΓѽ∞߬¿⌐ ¼áßß¿ó,
- ó ¬«Γ«α«¼ ∩ñα« ó«ºóαáΘáÑΓ áñαÑß »«ñ¬½ετáѼ«ú« ¬½¿Ñ¡Γá, addrlen - αẼÑα
- »«½∞º«óáΓѽ∞߬«ú« ¼áßß¿óá. Å« ºáóÑαΦÑ¡¿¿ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ ∩ñα« ºá»¿ßδóáÑΓ
- ó »ÑαѼѡ¡πε addrlen αẼÑα »α«ßΓαá¡ßΓóá, Σá¬Γ¿τÑ߬¿ ºá¡∩Γ«ú« ¼áßß¿ó«¼. öπ¡-
- ¬µ¿∩ ó«ºóαáΘáÑΓ ¡«óδ⌐ ñÑß¬α¿»Γ«α ú¡Ñºñá (nsd), «Γ½¿τ¡δ⌐ «Γ ñÑß¬α¿»Γ«αá sd.
- Åα«µÑßß-ßÑαóÑα ¼«ªÑΓ »α«ñ«½ªáΓ∞ ߽Ѫѡ¿Ñ ºá ß«ßΓ«∩¡¿Ñ¼ «íΩ∩ó½Ñ¡¡«ú« ú¡Ñºñá,
- »«ññÑনóá∩ ßó∩º∞ ß ¬½¿Ñ¡Γ«¼ »« «Γñѽ∞¡«¼π ¬á¡á½π (É¿ßπ¡«¬ 11.19).
-
- 357
-
- öπ¡¬µ¿¿ send ¿ recv óδ»«½¡∩εΓ »ÑαÑñáτπ ñá¡¡δσ τÑαѺ »«ñ¬½ετÑ¡¡«Ñ ú¡Ñºñ«.
- æ¿¡Γá¬ß¿ß ó맮óá Σπ¡¬µ¿¿ send:
-
- count = send(sd,msg,length,flags);
-
- úñÑ sd - ñÑß¬α¿»Γ«α ú¡Ñºñá, msg - π¬áºáΓѽ∞ ¡á »«ßδ½áѼδÑ ñá¡¡δÑ, length -
- αẼÑα ñá¡¡δσ, count - ¬«½¿τÑßΓó« Σá¬Γ¿τÑ߬¿ »ÑαÑñá¡¡δσ íá⌐Γ. Åáαá¼ÑΓα flags
- ¼«ªÑΓ ß«ñÑαªáΓ∞ º¡áτÑ¡¿Ñ SOF_OOB (»«ß½áΓ∞ ñá¡¡δÑ out-of-band - "τÑαѺ ΓἫª-
- ¡ε"), Ñß½¿ »«ßδ½áѼδÑ ñá¡¡δÑ ¡Ñ πτ¿ΓδóáεΓß∩ ó «íΘѼ ¿¡Σ«α¼áµ¿«¡¡«¼ «í¼Ñ¡Ñ
- ¼Ñªñπ óºá¿¼«ñÑ⌐ßΓóπεΘ¿¼¿ »α«µÑßßἿ. Åα«úαá¼¼á πñá½Ñ¡¡«⌐ αÑú¿ßΓαᵿ¿, ¡á»α¿-
- ¼Ñα, ¼«ªÑΓ »«ß½áΓ∞ out-of-band ß««íΘÑ¡¿Ñ, ¿¼¿Γ¿απεΘÑÑ ¡áªáΓ¿Ñ ¡á ¬½áó¿áΓπαÑ
- ΓÑନ¡á½á ¬½áó¿Φ¿ "delete". æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ recv:
-
- count = recv(sd,buf,length,flags);
-
- úñÑ buf - ¼áßß¿ó ñ½∩ »α¿Ñ¼á ñá¡¡δσ, length - «ª¿ñáѼδ⌐ «íΩѼ ñá¡¡δσ, count -
- ¬«½¿τÑßΓó« íá⌐Γ, Σá¬Γ¿τÑ߬¿ »ÑαÑñá¡¡δσ »«½∞º«óáΓѽ∞߬«⌐ »α«úαá¼¼Ñ. ö½áú¿
- (flags) ¼«úπΓ íδΓ∞ πßΓá¡«ó½Ñ¡δ Γᬿ¼ «íαẫ¼, τΓ« »«ßΓπ»¿óΦÑÑ ß««íΘÑ¡¿Ñ »«ß-
- ½Ñ τΓÑ¡¿∩ ¿ á¡á½¿ºá Ñú« ß«ñÑন¼«ú« ¡Ñ íπñÑΓ πñá½Ñ¡« ¿º «τÑαÑñ¿, ¿½¿ ¡áßΓα«-
- Ñ¡δ ¡á »«½πτÑ¡¿Ñ ñá¡¡δσ out-of-band. é ñÑ⌐Γáúαá¼¼¡δσ óÑαß¿∩σ π¬áºá¡¡δσ Σπ¡¬-
- µ¿⌐, sendto ¿ recvfrom, ó ¬áτÑßΓóÑ ñ«»«½¡¿Γѽ∞¡δσ »áαá¼ÑΓα«ó π¬áºδóáεΓß∩ áñ-
- αÑßá. Å«ß½Ñ óδ»«½¡Ñ¡¿∩ »«ñ¬½ετÑ¡¿∩ ¬ ú¡Ñºñá¼ »«Γ«¬«ó«ú« Γ¿»á »α«µÑßßδ ¼«úπΓ
- ó¼ÑßΓ« Σπ¡¬µ¿⌐ send ¿ recv ¿ß»«½∞º«óáΓ∞ Σπ¡¬µ¿¿ read ¿ write. Æá¬¿¼ «íαẫ¼,
- ß«ú½áß«óáó Γ¿» »α«Γ«¬«½á, ßÑαóÑαδ ¼«ú½¿ íδ »«α«ªñáΓ∞ »α«µÑßßδ, αáí«ΓáεΘ¿Ñ
- Γ«½∞¬« ß Σπ¡¬µ¿∩¼¿ read ¿ write, ß½«ó¡« ¿¼ÑεΓ ñѽ« ß «íδτ¡δ¼¿ Σá⌐½á¼¿.
- öπ¡¬µ¿∩ shutdown ºá¬αδóáÑΓ ú¡Ñºñ«óπε ßó∩º∞:
-
- shutdown(sd,mode)
-
- úñÑ mode π¬áºδóáÑΓ, ¬á¬«⌐ ¿º ßΓ«α«¡ (»«ßδ½áεΘÑ⌐, »α¿¡¿¼áεΘÑ⌐ ¿½¿ «íÑ¿¼ ó¼Ñß-
- ΓÑ) «Γ¡δ¡Ñ ºá»αÑΘÑ¡« πτáßΓ¿Ñ ó »α«µÑßßÑ »ÑαÑñáτ¿ ñá¡¡δσ. öπ¡¬µ¿∩ ß««íΘáÑΓ
- ¿ß»«½∞ºπѼ«¼π »α«Γ«¬«½π « ºáóÑαΦÑ¡¿¿ ßÑá¡ßá ßÑΓÑó«ú« óºá¿¼«ñÑ⌐ßΓó¿∩, «ßΓáó-
- ½∩∩, ΓѼ ¡Ñ ¼Ñ¡ÑÑ, ñÑß¬α¿»Γ«αδ ú¡Ñºñ ó ¡Ñ»α¿¬«ß¡«óÑ¡¡«ßΓ¿. Äßó«í«ªñáÑΓß∩
- ñÑß¬α¿»Γ«α ú¡Ñºñá Γ«½∞¬« ó αѺπ½∞ΓáΓÑ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ close.
- æ¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ getsockname »«½πτáÑΓ ¿¼∩ ú¡Ñºñ«ó«⌐ ßó∩º¿, πßΓá¡«ó½Ñ¡-
- ¡«⌐ αá¡ÑÑ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ bind:
-
- getsockname(sd,name,length);
-
- öπ¡¬µ¿¿ getsockopt ¿ setsockopt »«½πτáεΓ ¿ πßΓá¡áó½¿óáεΓ º¡áτÑ¡¿∩ αáº-
- ½¿τ¡δσ ßó∩ºá¡¡δσ ß ú¡Ñºñ«¼ »áαá¼ÑΓα«ó ó ß««ΓóÑΓßΓó¿¿ ß Γ¿»«¼ ñ«¼Ñ¡á ¿ »α«Γ«-
- ¬«½á.
- Éáßß¼«Γα¿¼ «íß½πª¿óáεΘπε »α«úαá¼¼π, »αÑñßΓáó½Ñ¡¡πε ¡á É¿ßπ¡¬Ñ 11.20.
- Åα«µÑßß ß«ºñáÑΓ ó ñ«¼Ñ¡Ñ "UNIX system" ú¡Ñºñ« »«Γ«¬«ó«ú« Γ¿»á ¿ »α¿ßóá¿óáÑΓ
- Ñ¼π ¿¼∩ sockname. çáΓѼ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ listen πßΓá¡áó½¿óáÑΓß∩ ñ½¿¡á «τÑ-
- αÑñ¿ »«ßΓπ»áεΘ¿σ ß««íΘÑ¡¿⌐ ¿ ¡áτ¿¡áÑΓß∩ µ¿¬½ «ª¿ñá¡¿∩ »«ßΓπ»½Ñ¡¿∩ ºá»α«ß«ó.
- öπ¡¬µ¿∩ accept »α¿«ßΓá¡áó½¿óáÑΓ ßó«Ñ óδ»«½¡Ñ¡¿Ñ ñ« ΓÑσ »«α, »«¬á »α«Γ«¬«½«¼
- ¡Ñ íπñÑΓ ºáαÑú¿ßΓα¿α«óá¡ ºá»α«ß ¡á »«ñ¬½ετÑ¡¿Ñ ¬ ú¡Ñºñπ ß «º¡áτÑ¡¡δ¼ ¿¼Ñ¡Ñ¼;
- »«ß½Ñ φΓ«ú« Σπ¡¬µ¿∩ ºáóÑαΦáÑΓß∩, ó«ºóαáΘá∩ »«ßΓπ»¿óΦѼπ ºá»α«ßπ ¡«óδ⌐ ñÑ߬-
- α¿»Γ«α ú¡Ñºñá. Åα«µÑßß-ßÑαóÑα »«α«ªñáÑΓ »«Γ«¼¬á, τÑαѺ ¬«Γ«α«ú« íπñÑΓ »«ñ-
- ñÑনóáΓ∞ß∩ ßó∩º∞ ß »α«µÑßß«¼-¬½¿Ñ¡Γ«¼; α«ñ¿Γѽ∞ ¿ »«Γ«¼«¬ »α¿ φΓ«¼ ºá¬αδóá-
- εΓ ßó«¿ ñÑß¬α¿»Γ«αδ, τΓ«íδ «¡¿ ¡Ñ ßΓᡫ󿽿ß∞ »«¼Ñσ«⌐ ñ½∩ ¬«¼¼π¡¿¬áµ¿«¡¡«ú«
- ΓαáΣΣ¿¬á ñαπú«ú« »α«µÑßßá. Åα«µÑßß-»«Γ«¼«¬ óÑñÑΓ αáºú«ó«α ß ¬½¿Ñ¡Γ«¼ ¿ ºá-
- óÑαΦáÑΓß∩ »«ß½Ñ óδσ«ñá ¿º Σπ¡¬µ¿¿ read. Åα«µÑßß-ßÑαóÑα ó«ºóαáΘá-
- ÑΓß∩ ¬ ¡áτá½π µ¿¬½á ¿ ªñÑΓ »«ßΓπ»½Ñ¡¿∩ ß½ÑñπεΘÑú« ºá»α«ßá ¡á »«ñ¬½ετÑ¡¿Ñ.
- ìá É¿ßπ¡¬Ñ 11.21 »«¬áºá¡ »α¿¼Ñα »α«µÑßßá-¬½¿Ñ¡Γá, óÑñπΘÑú« «íΘÑ¡¿Ñ ß
- ßÑαóÑα«¼. è½¿Ñ¡Γ ß«ºñáÑΓ ú¡Ñºñ« ó Γ«¼ ªÑ ñ«¼Ñ¡Ñ, τΓ« ¿ ßÑαóÑα, ¿ »«ßδ½áÑΓ
- ºá»α«ß ¡á »«ñ¬½ετÑ¡¿Ñ ¬ ú¡Ñºñπ ß ¿¼Ñ¡Ñ¼ sockname. é αѺπ½∞ΓáΓÑ »«ñ¬½ετÑ¡¿∩
-
-
- 358
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <sys/types.h> │
- │ #include <sys/socket.h> │
- │ │
- │ main() │
- │ { │
- │ int sd,ns; │
- │ char buf[256]; │
- │ struct sockaddr sockaddr; │
- │ int fromlen; │
- │ │
- │ sd = socket(AF_UNIX,SOCK_STREAM,0); │
- │ │
- │ /* ¿¼∩ ú¡Ñºñá - ¡Ñ ¼«ªÑΓ ó¬½ετáΓ∞ »πßΓ«⌐ ß¿¼ó«½ */ │
- │ bind(sd,"sockname",sizeof("sockname") - 1); │
- │ listen(sd,1); │
- │ │
- │ for (;;) │
- │ { │
- │ │
- │ ns = accept(sd,&sockaddr,&fromlen); │
- │ if (fork() == 0) │
- │ { │
- │ /* »«Γ«¼«¬ */ │
- │ close(sd); │
- │ read(ns,buf,sizeof(buf)); │
- │ printf("ßÑαóÑα τ¿ΓáÑΓ '%s'\n",buf); │
- │ exit(); │
- │ } │
- │ close(ns); │
- │ } │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.20. Åα«µÑßß-ßÑαóÑα ó ñ«¼Ñ¡Ñ "UNIX system"
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <sys/types.h> │
- │ #include <sys/socket.h> │
- │ │
- │ main() │
- │ { │
- │ int sd,ns; │
- │ char buf[256]; │
- │ struct sockaddr sockaddr; │
- │ int fromlen; │
- │ │
- │ sd = socket(AF_UNIX,SOCK_STREAM,0); │
- │ │
- │ /* ¿¼∩ ó ºá»α«ßÑ ¡á »«ñ¬½ετÑ¡¿Ñ ¡Ñ ¼«ªÑΓ ó¬½ετáΓ∞ │
- │ /* »πßΓ«⌐ ß¿¼ó«½ */ │
- │ if (connect(sd,"sockname",sizeof("sockname") - 1) == -1)│
- │ exit(); │
- │ │
- │ write(sd,"hi guy",6); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 11.21. Åα«µÑßß-¬½¿Ñ¡Γ ó ñ«¼Ñ¡Ñ "UNIX system"
-
- 359
-
-
-
- »α«µÑßß-¬½¿Ñ¡Γ »«½πτáÑΓ ó¿αΓπá½∞¡δ⌐ ¬á¡á½ ßó∩º¿ ß ßÑαóÑα«¼. é αáßß¼áΓα¿óáÑ-
- ¼«¼ »α¿¼ÑαÑ ¬½¿Ñ¡Γ »ÑαÑñáÑΓ «ñ¡« ß««íΘÑ¡¿Ñ ¿ ºáóÑαΦáÑΓß∩.
- àß½¿ ßÑαóÑα «íß½πª¿óáÑΓ »α«µÑßßδ ó ßÑΓ¿, π¬áºá¡¿Ñ « Γ«¼, τΓ« ú¡Ñºñ« »α¿-
- ¡áñ½Ñª¿Γ ñ«¼Ñ¡π "Internet", ¼«ª¡« ßñѽáΓ∞ ß½ÑñπεΘ¿¼ «íαẫ¼:
-
- socket(AF_INET,SOCK_STREAM,0);
-
- ¿ ßó∩ºáΓ∞ß∩ ß ßÑΓÑóδ¼ áñαÑß«¼, »«½πτÑ¡¡δ¼ «Γ ßÑαóÑαá. é ß¿ßΓÑ¼Ñ BSD ¿¼ÑεΓß∩
- í¿í½¿«ΓÑτ¡δÑ Σπ¡¬µ¿¿, óδ»«½¡∩εΘ¿Ñ φΓ¿ ñÑ⌐ßΓó¿∩. éΓ«α«⌐ »áαá¼ÑΓα óδºδóáѼ«⌐
- ¬½¿Ñ¡Γ«¼ Σπ¡¬µ¿¿ connect ß«ñÑαª¿Γ áñαÑß¡πε ¿¡Σ«α¼áµ¿ε, ¡Ñ«íσ«ñ¿¼πε ñ½∩ ¿ñÑ¡-
- Γ¿Σ¿¬áµ¿¿ ¼áΦ¿¡δ ó ßÑΓ¿ (¿½¿ áñαÑßá ¼áαΦαπΓ«ó »«ß佬¿ ß««íΘÑ¡¿⌐ τÑαѺ »α«¼Ñ-
- ªπΓ«τ¡δÑ ¼áΦ¿¡δ), á Γá¬ªÑ ñ«»«½¡¿Γѽ∞¡πε ¿¡Σ«α¼áµ¿ε, ¿ñÑ¡Γ¿Σ¿µ¿απεΘπε »α¿Ñ¼-
- ¡«Ñ ú¡Ñºñ« ¼áΦ¿¡δ-áñαÑßáΓá. àß½¿ ßÑαóÑαπ ¡πª¡« «ñ¡«óαѼѡ¡« ß½Ññ¿Γ∞ ºá ß«ß-
- Γ«∩¡¿Ñ¼ ßÑΓ¿ ¿ óδ»«½¡Ñ¡¿Ñ¼ ½«¬á½∞¡δσ »α«µÑßß«ó, «¡ ¿ß»«½∞ºπÑΓ ñóá ú¡Ñºñá ¿ ß
- »«¼«Θ∞ε Σπ¡¬µ¿¿ select «»αÑñѽ∩ÑΓ, ß ¬á¬¿¼ ¬½¿Ñ¡Γ«¼ πßΓá¡áó½¿óáÑΓß∩ ßó∩º∞ ó
- ñá¡¡δ⌐ ¼«¼Ñ¡Γ.
-
-
- E11.5 é¢éÄä¢F
-
- îδ αáßß¼«Γαѽ¿ ¡Ñ߬«½∞¬« Σ«α¼ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó. ÅÑαó«⌐ Σ«α¼«⌐,
- »«½«ª¿óΦÑ⌐ ¡áτὫ «íßπªñÑ¡¿ε, ∩ó¿½áß∞ Γαáßß¿α«ó¬á »α«µÑßß«ó - óºá¿¼«ñÑ⌐ßΓó¿Ñ
- ñóπσ »α«µÑßß«ó, óδßΓπ»áεΘÑÑ ó ¬áτÑßΓóÑ »«½Ñº¡«ú« ßαÑñßΓóá «Γ½áñ¬¿ »α«úαá¼¼.
- Åα¿ óßÑσ ßó«¿σ »αÑ¿¼πΘÑßΓóáσ Γαáßß¿α«ó¬á »α«µÑßß«ó ß »«¼«Θ∞ε Σπ¡¬µ¿¿ ptrace
- óßÑ ªÑ ñ«ßΓáΓ«τ¡« ñ«α«ú«ßΓ«∩ΘÑÑ ¿ »α¿¼¿Γ¿ó¡«Ñ ¼Ñα«»α¿∩Γ¿Ñ, »«ß¬«½∞¬π ºá «ñ¿¡
- ßÑá¡ß Σπ¡¬µ¿∩ ß»«ß«í¡á »ÑαÑñáΓ∞ ßΓα«ú« «úαá¡¿τÑ¡¡δ⌐ «íΩѼ ñá¡¡δσ, ΓαÑíπÑΓß∩
- í«½∞Φ«Ñ ¬«½¿τÑßΓó« »ÑαѬ½ετÑ¡¿⌐ ¬«¡ΓѬßΓá, óºá¿¼«ñÑ⌐ßΓó¿Ñ «úαá¡¿τ¿óáÑΓß∩
- Γ«½∞¬« Σ«α¼«⌐ «Γ¡«ΦÑ¡¿⌐ α«ñ¿Γѽ∞-»«Γ«¼«¬, ¿ ¡á¬«¡Ñµ, ßá¼á Γαáßß¿α«ó¬á »α«¿º-
- ó«ñ¿Γß∩ Γ«½∞¬« »« «í«εñ¡«¼π ß«ú½áß¿ε πτáßΓóπεΘ¿σ ó ¡Ñ⌐ »α«µÑßß«ó. é óÑαß¿¿ V
- ß¿ßΓѼδ UNIX ¿¼ÑÑΓß∩ »á¬ÑΓ óºá¿¼«ñÑ⌐ßΓó¿∩ »α«µÑßß«ó (IPC), ó¬½ετáεΘ¿⌐ ó ßÑí∩
- ¼Ñσá¡¿º¼δ «í¼Ñ¡á ß««íΘÑ¡¿∩¼¿, αáí«Γδ ß ßѼáΣ«αἿ ¿ αáºñѽѡ¿∩ »á¼∩Γ¿. è ß«-
- ªá½Ñ¡¿ε, óßÑ φΓ¿ ¼Ñσá¡¿º¼δ ¿¼ÑεΓ πº¬«ß»Ñµ¿á½∞¡«Ñ ¡áº¡áτÑ¡¿Ñ, ¡Ñ ¿¼ÑεΓ σ«α«-
- ΦÑ⌐ ßΓδ¬«ó¬¿ ß ñαπú¿¼¿ φ½Ñ¼Ñ¡ΓἿ «»Ñαᵿ«¡¡«⌐ ß¿ßΓÑ¼δ ¿ ¡Ñ ñÑ⌐ßΓóπεΓ ó ßÑ-
- Γ¿. ÆÑ¼ ¡Ñ ¼Ñ¡ÑÑ, «¡¿ ¿ß»«½∞ºπεΓß∩ ó« ¼¡«ú¿σ »α¿½«ªÑ¡¿∩σ ¿ »« ßαáó¡Ñ¡¿ε ß
- ñαπú¿¼¿ ßσѼἿ «Γ½¿τáεΓß∩ í«½ÑÑ óδß«¬«⌐ φΣΣÑ¬Γ¿ó¡«ßΓ∞ε.
- æ¿ßΓѼá UNIX »«ññÑনóáÑΓ Φ¿α«¬¿⌐ ߻ѬΓα óδτ¿ß½¿Γѽ∞¡δσ ßÑΓÑ⌐. Æαáñ¿µ¿-
- «¡¡δÑ ¼ÑΓ«ñδ ß«ú½áß«óá¡¿∩ »α«Γ«¬«½«ó ó ß¿½∞¡«⌐ ßΓѻѡ¿ »«½áúáεΓß∩ ¡á »«¼«Θ∞
- ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ioctl, «ñ¡á¬« ó αạδσ Γ¿»áσ ßÑΓÑ⌐ «¡¿ αÑ὿ºπεΓß∩ »«-αáº-
- ¡«¼π. é ß¿ßΓÑ¼Ñ BSD ¿¼ÑεΓß∩ ß¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ ñ½∩ αáí«Γδ ß ú¡ÑºñἿ, »«ññÑα-
- ª¿óáεΘ¿Ñ í«½ÑÑ π¡¿óÑαßá½∞¡πε ßΓαπ¬Γπαπ ßÑΓÑó«ú« óºá¿¼«ñÑ⌐ßΓó¿∩. é íπñπΘѼ ó
- óÑαß¿ε V »αÑñ»«½áúáÑΓß∩ ó¬½ετ¿Γ∞ «»¿ßá¡¡δ⌐ ó ú½áóÑ 10 »«Γ«¬«óδ⌐ ¼Ñσá¡¿º¼,
- »«óδΦáεΘ¿⌐ ß«ú½áß«óá¡¡«ßΓ∞ αáí«Γδ ó ßÑΓ¿.
-
-
- E11.6 ôÅÉÇåìàìêƒF
-
- 1. ùΓ« »α«¿º«⌐ñÑΓ ó Γ«¼ ß½πτáÑ, Ñß½¿ ó »α«úαá¼¼Ñ debug íπñÑΓ «ΓßπΓßΓó«óáΓ∞
- ó맮ó Σπ¡¬µ¿¿ wait (É¿ßπ¡«¬ 11.3) ? (ìá¼Ñ¬: 󫺼«ª¡δ ñóá ¿ßσ«ñá.)
- 2. æ »«¼«Θ∞ε Σπ¡¬µ¿¿ ptrace «Γ½áñτ¿¬ ßτ¿ΓδóáÑΓ ñá¡¡δÑ ¿º »α«ßΓαá¡ßΓóá
- Γαáßß¿απѼ«ú« »α«µÑßßá »« «ñ¡«¼π ß½«óπ ºá «ñ¡π «»Ñαᵿε. èá¬¿Ñ ¿º¼Ñ¡Ñ-
- ¡¿∩ ß½ÑñπÑΓ »α«¿ºóÑßΓ¿ ó ∩ñαÑ «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼδ ñ½∩ Γ«ú«, τΓ«íδ πóÑ-
- ½¿τ¿Γ∞ ¬«½¿τÑßΓó« ßτ¿ΓδóáѼδσ ß½«ó ? èá¬¿Ñ ¿º¼Ñ¡Ñ¡¿∩ »α¿ φΓ«¼ ¡Ñ«íσ«ñ¿-
- ¼« ßñѽáΓ∞ ó ßἫ⌐ Σπ¡¬µ¿¿ ptrace ?
- 3. ÉáßΦ¿α∞ΓÑ «í½áßΓ∞ ñÑ⌐ßΓó¿∩ Σπ¡¬µ¿¿ ptrace Γá¬, τΓ«íδ ó ¬áτÑßΓóÑ »áαá-
- ¼ÑΓαá pid ¼«ª¡« í佫 π¬áºδóáΓ∞ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑßßá, ¡Ñ ∩ó½∩εΘÑú«ß∩
- »«Γ«¼¬«¼ ΓѬπΘÑú« »α«µÑßßá. Å«ñπ¼á⌐ΓÑ ¡áñ ó«»α«ßἿ, ßó∩ºá¡¡δ¼¿ ß ºáΘ¿-
- Γ«⌐ ¿¡Σ«α¼áµ¿¿: Åα¿ ¬á¬¿σ «íßΓ«∩Γѽ∞ßΓóáσ »α«µÑßßπ ¼«ªÑΓ íδΓ∞ »«ºó«½Ñ¡«
-
- 360
-
- τ¿ΓáΓ∞ ñá¡¡δÑ ¿º áñαÑß¡«ú« »α«ßΓαá¡ßΓóá ñαπú«ú«, »α«¿ºó«½∞¡«ú« »α«µÑßßá
- ? Åα¿ ¬á¬¿σ «íßΓ«∩Γѽ∞ßΓóáσ αáºαÑΦáÑΓß∩ óÑßΓ¿ ºá»¿ß∞ ó áñαÑß¡«Ñ »α«ßΓ-
- αá¡ßΓó« ñαπú«ú« »α«µÑßßá ?
- 4. Äαúá¡¿ºπ⌐ΓÑ ¿º Σπ¡¬µ¿⌐ αáí«Γδ ß ß««íΘÑ¡¿∩¼¿ í¿í½¿«ΓÑ¬π »«½∞º«óáΓѽ∞߬«-
- ú« πα«ó¡∩ ß ¿ß»«½∞º«ó᡿Ѽ «íδτ¡δσ Σá⌐½«ó, »«¿¼Ñ¡«óá¡¡δσ ¬á¡á½«ó ¿ φ½Ñ-
- ¼Ñ¡Γ«ó í½«¬¿α«ó¬¿. 櫺ñáóá∩ «τÑαÑñ∞ ß««íΘÑ¡¿⌐, «Γ¬α«⌐ΓÑ π»αáó½∩εΘ¿⌐
- Σá⌐½ ñ½∩ ºá»¿ß¿ ó ¡Ñú« ¿¡Σ«α¼áµ¿¿ « ß«ßΓ«∩¡¿¿ «τÑαÑñ¿; ºáΘ¿Γ¿ΓÑ Σá⌐½ ß
- »«¼«Θ∞ε ßαÑñßΓó ºáσóáΓá Σá⌐½«ó ¿ ñαπú¿σ πñ«í¡δσ ñ½∩ óáß ¼Ñσá¡¿º¼«ó. Å«-
- ßδ½á∩ ß««íΘÑ¡¿Ñ ñá¡¡«ú« Γ¿»á, ß«ºñáóá⌐ΓÑ »«¿¼Ñ¡«óá¡¡δ⌐ ¬á¡á½ ñ½∩ óßÑσ
- ß««íΘÑ¡¿⌐ φΓ«ú« Γ¿»á, Ñß½¿ Γᬫú« ¬á¡á½á ÑΘÑ ¡Ñ í佫, ¿ »ÑαÑñáóá⌐ΓÑ ß«-
- «íΘÑ¡¿Ñ τÑαѺ ¡Ñú« (ß »«ñßτÑΓ«¼ »ÑαÑñá¡¡δσ íá⌐Γ). ô»αáó½∩εΘ¿⌐ Σá⌐½ ñ«½-
- ªÑ¡ ß««Γ¡«ß¿Γ∞ Γ¿» ß««íΘÑ¡¿∩ ß ¿¼Ñ¡Ñ¼ »«¿¼Ñ¡«óá¡¡«ú« ¬á¡á½á. Åα¿ τΓÑ¡¿¿
- ß««íΘÑ¡¿⌐ π»αáó½∩εΘ¿⌐ Σá⌐½ ¡á»αáó½∩ÑΓ »α«µÑßß ¬ ß««ΓóÑΓßΓóπεΘÑ¼π »«¿¼Ñ-
- ¡«óá¡¡«¼π ¬á¡á½π. æαáó¡¿ΓÑ φΓπ ßσѼπ ß ¼Ñσá¡¿º¼«¼, «»¿ßá¡¡δ¼ ó ¡áßΓ«∩-
- ΘÑ⌐ ú½áóÑ, »« φΣΣÑ¬Γ¿ó¡«ßΓ¿, ß½«ª¡«ßΓ¿ αÑ὿ºáµ¿¿ ¿ Σπ¡¬µ¿«¡á½∞¡δ¼ ó«º-
- ¼«ª¡«ßΓ∩¼.
- 5. èá¬¿Ñ ñÑ⌐ßΓó¿∩ »δΓáÑΓß∩ óδ»«½¡¿Γ∞ »α«úαá¼¼á, »αÑñßΓáó½Ñ¡¡á∩ ¡á É¿ßπ¡¬Ñ
- 11.22 ?
- *6. ìá»¿Φ¿ΓÑ »α«úαá¼¼π, ¬«Γ«αá∩ »«ñ¬½ετá½á íδ «í½áßΓ∞ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿
- ß½¿Φ¬«¼ í½¿º¬« ¬ óÑαΦ¿¡Ñ ßΓÑ¬á ºáñáτ¿ ¿ »«ºó«½∩½á íδ ßΓѬπ »α¿ πóѽ¿τÑ-
- ¡¿¿ »ÑαÑßѬáΓ∞ úαá¡¿µπ αáºñѽ∩Ѽ«⌐ «í½áßΓ¿. é ¬á¬«⌐ ¼«¼Ñ¡Γ »α«¿º«⌐ñÑΓ
- ΣáΓá½∞¡á∩ «Φ¿í¬á »á¼∩Γ¿ ?
- 7. êß»«½∞ºπ⌐ΓÑ ó »α«úαá¼¼Ñ, »αÑñßΓáó½Ñ¡¡«⌐ ¡á É¿ßπ¡¬Ñ 11.14, Σ½áú
- IPC_NOWAIT, αÑ὿ºπ∩ πß½«ó¡δ⌐ Γ¿» ßѼáΣ«αá. Åα«ñѼ«¡ßΓα¿απ⌐ΓÑ, ¬á¬ ºá
- ßτÑΓ φΓ«ú« ¼«ª¡« ¿ºíѪáΓ∞ 󫺡¿¬¡«óÑ¡¿∩ óºá¿¼¡δσ í½«¬¿α«ó«¬.
- 8. Å«¬áª¿ΓÑ, ¬á¬ «»Ñαᵿ¿ ¡áñ ßѼáΣ«αἿ Γ¿»á P ¿ V αÑ὿ºπεΓß∩ »α¿ αáí«ΓÑ
- ß »«¿¼Ñ¡«óá¡¡δ¼¿ ¬á¡á½á¼¿. èᬠíδ óδ αÑ὿º«ó὿ «»Ñαᵿε P πß½«ó¡«ú«
- Γ¿»á ?
- 9. æ«ßΓáó∞ΓÑ »α«úαá¼¼δ ºáσóáΓá αÑßπαß«ó, ¿ß»«½∞ºπεΘ¿Ñ (á) »«¿¼Ñ¡«óá¡¡δÑ
- ¬á¡á½δ, (í) ß¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ creat ¿ unlink, (ó) Σπ¡¬µ¿¿ «í¼Ñ¡á ß««í-
- ΘÑ¡¿∩¼¿. Åα«óÑñ¿ΓÑ ßαáó¡¿Γѽ∞¡δ⌐ á¡á½¿º ¿σ φΣΣÑ¬Γ¿ó¡«ßΓ¿.
- 10. ìá »αá¬Γ¿τÑ߬¿σ »α¿¼Ñαáσ αáí«Γδ ß »«¿¼Ñ¡«óá¡¡δ¼¿ ¬á¡á½á¼¿ ßαáó¡¿ΓÑ φΣ-
- ΣÑ¬Γ¿ó¡«ßΓ∞ ¿ß»«½∞º«óá¡¿∩ Σπ¡¬µ¿⌐ «í¼Ñ¡á ß««íΘÑ¡¿∩¼¿, ß «ñ¡«⌐ ßΓ«α«¡δ,
- ß Σπ¡¬µ¿∩¼¿ read ¿ write, ß ñαπú«⌐.
- 11. æαáó¡¿ΓÑ ¡á ¬«¡¬αÑΓ¡δσ »α«úαá¼¼áσ ߬«α«ßΓ∞ »ÑαÑñáτ¿ ñá¡¡δσ »α¿ αáí«ΓÑ ß
- αáºñѽ∩Ѽ«⌐ »á¼∩Γ∞ε ¿ »α¿ ¿ß»«½∞º«óá¡¿¿ ¼Ñσá¡¿º¼á «í¼Ñ¡á ß««íΘÑ¡¿∩¼¿.
- Åα«úαá¼¼δ, ¿ß»«½∞ºπεΘ¿Ñ αáºñѽ∩Ѽπε »á¼∩Γ∞, ñ½∩ ß¿¡σα«¡¿ºáµ¿¿ ºáóÑαΦÑ-
- ¡¿∩ «»Ñαᵿ⌐ τΓÑ¡¿∩-ºá»¿ß¿ ñ«½ª¡δ «»¿αáΓ∞ß∩ ¡á ßѼáΣ«αδ.
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <sys/types.h> │
- │ #include <sys/ipc.h> │
- │ #include <sys/msg.h> │
- │ #define ALLTYPES 0 │
- │ │
- │ main() │
- │ { │
- │ struct msgform │
- │ { │
- │ long mtype; │
- │ char mtext[1024]; │
- │ } msg; │
- │ register unsigned int id; │
- │ │
- │ for (id = 0; ; id++) │
- │ while (msgrcv(id,&msg,1024,ALLTYPES,IPC_NOWAIT) > 0)│
- │ ; │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- 361