home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / k-r.doc / c_8.doc < prev    next >
Encoding:
Text File  |  1988-11-18  |  39.8 KB  |  968 lines

  1.                            - 167 -
  2.      
  3.      8. ê¡ΓÑαΣÑ⌐ß ß¿ßΓѼδ UNIX
  4.      îáΓÑα¿á½ φΓ«⌐ ú½áóδ «Γ¡«ß¿Γß∩ ¬ ¿¡ΓÑαΣÑ⌐ßπ ¼Ñªñπ ß-»α«ú-
  5.  αἼἿ ¿ «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼ«⌐ UNIX. Æá¬ ¬á¬ í«½∞Φ¿¡ßΓó«
  6.  »«½∞º«óáΓѽÑ⌐ ∩ºδ¬á "C" αáí«ΓáεΓ ¡á ß¿ßΓѼѠUNIX, φΓá ú½áóá
  7.  «¬áªÑΓß∩ »«½Ñº¡«⌐ ñ½∩ í«½∞Φ¿¡ßΓóá τ¿ΓáΓѽÑ⌐. ñáªÑ Ñß½¿ óδ
  8.  ¿ß»«½∞ºπÑΓÑ ß-¬«¼»¿½∩Γ«α ¡á ñαπú«⌐ ¼áΦ¿¡Ñ, ¿ºπτÑ¡¿Ñ »α¿ó«ñ¿-
  9.  ¼δσ ºñÑß∞ »α¿¼Ñα«ó ñ«½ª¡« »«¼«τ∞ óá¼ ú½πíªÑ »α«¡¿¬¡πΓ∞ ó ¼Ñ-
  10.  Γ«ñδ »α«úαá¼¼¿α«óá¡¿∩ ¡á ∩ºδ¬Ñ "C".
  11.      ¥Γá ú½áóá ñѽ¿Γß∩ ¡á Γα¿ «ß¡«ó¡δÑ τáßΓ¿: óó«ñ/óδó«ñ,
  12.  ß¿ßΓѼá Σá⌐½«ó ¿ αáß»αÑñѽѡ¿Ñ »á¼∩Γ¿. ÅÑαóδÑ ñóÑ τáßΓ¿
  13.  »αÑñ»«½áúáεΓ ¡Ñí«½∞Φ«Ñ º¡á¬«¼ßΓó« ß ó¡ÑΦ¡¿¼¿ σáαá¬ΓÑα¿ßΓ¿¬á-
  14.  ¼¿ ß¿ßΓѼδ UNIX.
  15.      é ú½áóÑ 7 ¼δ ¿¼Ñ½¿ ñѽ« ß ß¿ßΓѼ¡δ¼ ¿¡ΓÑαΣÑ⌐ß«¼, ¬«Γ«αδ⌐
  16.  «ñ¿¡á¬«ó ñ½∩ óßÑú« ¼¡«ú««íαế∩ «»Ñαᵿ«¡¡δσ ß¿ßΓѼ. ìá ¬áª-
  17.  ñ«⌐ ¬«¡¬αÑΓ¡«⌐ ß¿ßΓѼѠΣπ¡¬µ¿¿ ßΓá¡ñáαΓ¡«⌐ í¿í½¿«ΓѬ¿ ñ«½ª¡δ
  18.  íδΓ∞ ¡á»¿ßá¡δ ó ΓÑନ¡áσ óó«ñá-óδó«ñá, ñ«ßΓπ»¡δσ ¡á ñá¡¡«⌐
  19.  ¼áΦ¿¡Ñ. é ß½ÑñπεΘ¿σ ¡Ñ߬«½∞¬¿σ αáºñѽáσ ¼δ «»¿ΦѼ «ß¡«ó¡πε
  20.  ß¿ßΓѼπ ßó∩ºá¡¡δσ ß óó«ñ«¼ ¿ óδó«ñ«¼ Γ«τѬ óσ«ñá «»Ñαᵿ«¡-
  21.  ¡«⌐ ß¿ßΓѼδ UNIX ¿ »α«¿½½εßΓα¿απѼ, ¬á¬ ß ¿σ »«¼«Θ∞ε ¼«úπΓ
  22.  íδΓ∞ αÑ὿º«óá¡δ αẽ¿τ¡δÑ τáßΓ¿ ßΓá¡ñáαΓ¡«⌐ í¿í½¿«ΓѬ¿.
  23.  
  24.      8.1. äÑß¬α¿»Γ«αδ Σá⌐½«ó
  25.      é «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼѠUNIX óÑß∞ óó«ñ ¿ óδó«ñ «ßπΘÑßΓó-
  26.  ½∩ÑΓß∩ »«ßαÑñßΓó«¼ τΓÑ¡¿∩ Σá⌐½«ó ¿½¿ ¿σ ºá»¿ß¿, »«Γ«¼π τΓ«
  27.  óßÑ »Ñα¿ΣÑα¿⌐¡δÑ πßΓα«⌐ßΓóá, ó¬½ετá∩ ñáªÑ ΓÑନ¡á½ »«½∞º«óá-
  28.  Γѽ∩, ∩ó½∩εΓß∩ Σá⌐½á¼¿ «»αÑñѽѡ¡«⌐ Σá⌐½«ó«⌐ ß¿ßΓѼδ. ¥Γ«
  29.  «º¡áτáÑΓ, τΓ« «ñ¿¡ «ñ¡«α«ñ¡δ⌐ ¿¡ΓÑαΣÑ⌐ß π»αáó½∩ÑΓ óßѼ¿ ßó∩-
  30.  º∩¼¿ ¼Ñªñπ »α«úαá¼¼«⌐ ¿ »Ñα¿ΣÑα¿⌐¡δ¼¿ πßΓα«⌐ßΓóἿ.
  31.      é ¡á¿í«½ÑÑ «íΘѼ ß½πτáÑ »ÑαÑñ τΓÑ¡¿Ñ¼ ¿º Σá⌐½á ¿½¿ ºá-
  32.  »¿ß∞ε ó Σá⌐½ ¡Ñ«íσ«ñ¿¼« ß««íΘ¿Γ∞ ß¿ßΓѼѠ« óáΦѼ ¡á¼ÑαÑ¡¿¿;
  33.  φëà»α«µÑßß ¡áºδóáÑΓß∩ "«Γ¬αδΓ¿Ñ¼" Σá⌐½á. æ¿ßΓѼá óδ∩ß¡∩-
  34.  ÑΓ,¿¼ÑÑΓÑ ½¿ óδ »αáó« »«ßΓπ»áΓ∞ Γᬿ¼ «íαẫ¼ (ßπΘÑßΓóπÑΓ ½¿
  35.  φëàΣá⌐½? ¿¼ÑÑΓß∩ ½¿ π óáß αáºαÑΦÑ¡¿Ñ ¡á «íαáΘÑ¡¿Ñ ¬ ¡Ñ-
  36.  ¼π?), ¿ Ñß½¿ óßÑ ó »«α∩ñ¬Ñ, ó«ºóαáΘáÑΓ ó »α«úαá¼¼π ¡Ñí«½∞Φ«Ñ
  37.  »«½«ª¿Γѽ∞¡«Ñ µÑ½«Ñ τ¿ß½«, ¡áºδóáѼ«Ñ ñÑß¬α¿»Γ«α«¼ Σá⌐½á.
  38.  óß∩¬¿⌐ αáº, ¬«úñá φëàΣá⌐½ ¿ß»«½∞ºπÑΓß∩ ñ½∩ óó«ñá ¿½¿ óδó«-
  39.  ñá, ñ½∩ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ Σá⌐½á π»«ΓαÑí½∩ÑΓß∩ ñÑß¬α¿»Γ«α Σá⌐½á,
  40.  á ¡Ñ Ñú« ¿¼∩. (çñÑß∞ ßπΘÑßΓóπÑΓ »α¿¼Ñα¡á∩ á¡á½«ú¿∩ ß ¿ß»«½∞-
  41.  º«ó᡿Ѽ READ (5,...) ¿ WRITE (6,...) ó Σ«αΓαá¡Ñ). éß∩ ¿¡-
  42.  Σ«α¼áµ¿∩ «í «Γ¬αδΓ«¼ Σá⌐½Ñ ß«ñÑনΓß∩ ó ß¿ßΓѼÑ; »α«úαá¼¼á
  43.  »«½∞º«óáΓѽ∩ «íαáΘáÑΓß∩ ¬ Σá⌐½π Γ«½∞¬« τÑαѺ ñÑß¬α¿»Γ«α Σá⌐-
  44.  ½á.
  45.      ä½∩ πñ«íßΓóá óδ»«½¡Ñ¡¿∩ «íδτ¡δσ «»Ñαᵿ⌐ óó«ñá ¿ óδó«ñá
  46.  ß »«¼«Θ∞ε ΓÑନ¡á½á »«½∞º«óáΓѽ∩ ßπΘÑßΓóπεΓ ß»Ñµ¿á½∞¡δÑ ß«ú-
  47.  ½áΦÑ¡¿∩. è«úñá ¿¡ΓÑα»αÑΓáΓ«α ¬«¼á¡ñ ("SHELL") »α«ú«¡∩ÑΓ
  48.  »α«úαá¼¼π, «¡ «Γ¬αδóáÑΓ Γα¿ Σá⌐½á, ¡áºδóáѼδÑ ßΓá¡ñáαΓ¡δ¼
  49.  óó«ñ«¼, ßΓá¡ñáαΓ¡δ¼ óδó«ñ«¼ ¿ ßΓá¡ñáαΓ¡δ¼ óδó«ñ«¼ «Φ¿í«¬,
  50.  ¬«Γ«αδÑ ¿¼ÑεΓ ß««ΓóÑΓßΓóÑ¡¡« τ¿ß½á 0, 1 ¿ 2 ó ¬áτÑßΓóÑ ñÑ߬-
  51.  α¿»Γ«α«ó φΓ¿σ Σá⌐½«ó. é ¡«α¼á½∞¡«¼ ß«ßΓ«∩¡¿¿ óßÑ «¡¿ ßó∩ºá¡δ
  52.  ß ΓÑନ¡á½«¼, ΓᬠτΓ« Ñß½¿ »α«úαá¼¼á τ¿ΓáÑΓ ß ñÑß¬α¿»Γ«α«¼
  53.  Σá⌐½á 0 ¿ »¿ΦÑΓ ß ñÑß¬α¿»Γ«αἿ Σá⌐½«ó 1 ¿ 2, Γ« «¡á ¼«ªÑΓ
  54.  «ßπΘÑßΓó½∩Γ∞ óó«ñ ¿ óδó«ñ ß »«¼«Θ∞ε ΓÑନ¡á½á, ¡Ñ ºáí«Γ∩ß∞
  55.  «í «Γ¬αδΓ¿¿ ß««ΓóÑΓßΓóπεΘ¿σ Σá⌐½«ó.
  56.      
  57.                            - 168 -
  58.      
  59.      Å«½∞º«óáΓѽ∞ »α«úαá¼¼δ ¼«ªÑΓ »ÑαÑ¡á»αáó½∩Γ∞ óó«ñ ¿ óδó«ñ
  60.  ¡á Σá⌐½δ, ¿ß»«½∞ºπ∩ «»Ñαᵿ¿ ¬«¼á¡ñ¡«ú« ¿¡ΓÑα»αÑΓáΓ«αá SHELL
  61.  "<" ¿ ">" :
  62.  
  63.    PROG <INFILE>OUTFILE
  64.  
  65.  é φΓ«¼ ß½πτáÑ ¿¡ΓÑα»αÑΓáΓ«α ¬«¼á¡ñ SHELL ¿º¼Ñ¡¿Γ »α¿ßóá¿óá-
  66.  ¡¿Ñ »« π¼«½τá¡¿ε ñÑß¬α¿»Γ«α«ó Σá⌐½«ó 0 ¿ 1 ß ΓÑନ¡á½á ¡á
  67.  π¬áºá¡¡δÑ Σá⌐½δ. ì«α¼á½∞¡« ñÑß¬α¿»Γ«α Σá⌐½á 2 «ßΓáÑΓß∩ ßó∩-
  68.  ºá¡¡δ¼ ß ΓÑନ¡á½«¼, ΓᬠτΓ« ß««íΘÑ¡¿∩ «í «Φ¿í¬áσ ¼«úπΓ »«ß-
  69.  Γπ»áΓ∞ Γπñá. Å«ñ«í¡δÑ ºá¼Ñτá¡¿∩ ß»αáóÑñ½¿óδ ¿ Γ«úñá, ¬«úñá
  70.  óó«ñ ¿ óδó«ñ ßó∩ºá¡ ß ¬á¡á½«¼. æ½ÑñπÑΓ «Γ¼ÑΓ¿Γ∞, τΓ« ó« óßÑσ
  71.  ß½πτá∩σ »α¿¬αÑ»½Ñ¡¿∩ Σá⌐½«ó ¿º¼Ñ¡∩εΓß∩ ¿¡ΓÑα»αÑΓáΓ«α«¼
  72.  SHELL, á ¡Ñ »α«úαá¼¼«⌐. æá¼á »α«úαá¼¼á, »«¬á «¡á ¿ß»«½∞ºπÑΓ
  73.  Σá⌐½ 0 ñ½∩ óó«ñá ¿ Σá⌐½δ 1 ¿ 2 ñ½∩ óδó«ñá, ¡Ñ º¡áÑΓ ¡¿ «Γ¬π-
  74.  ñá »α¿σ«ñ¿Γ ÑÑ óó«ñ, ¡¿ ¬πñá »«ßΓπ»áÑΓ ÑÑ óδñáτá.
  75.      
  76.      8.2. ì¿º¬«πα«ó¡Ñóδ⌐ óó«ñ/óδó«ñ - «»ÑαáΓ«αδ READ ¿ WRITE.
  77.      æá¼δ⌐ ¡¿º¬¿⌐ πα«óÑ¡∞ óó«ñá/óδó«ñá ó ß¿ßΓѼѠUNIX ¡Ñ »αÑ-
  78.  ñπß¼áΓα¿óáÑΓ ¡¿ ¬á¬«⌐-½¿í« íπΣÑα¿ºáµ¿¿, ¡¿ ¬á¬«ú«-½¿í« ñαπ-
  79.  ú«ú« ßÑαó¿ßá; «¡ »« ßπΘÑßΓóπ ∩ó½∩ÑΓß∩ ¡Ñ»«ßαÑñßΓóÑ¡¡δ¼ óσ«-
  80.  ñ«¼ ó «»Ñαᵿ«¡¡πε ß¿ßΓѼπ. éÑß∞ óó«ñ ¿ óδó«ñ «ßπΘÑßΓó½∩ÑΓß∩
  81.  ñóπ¼∩ Σπ¡¬µ¿∩¼¿: READ ¿ WRITE. ÅÑαóδ¼ áαúπ¼Ñ¡Γ«¼ «íÑ¿σ Σπ¡¬-
  82.  µ¿⌐ ∩ó½∩ÑΓß∩ ñÑß¬α¿»Γ«α Σá⌐½á. éΓ«αδ¼ áαúπ¼Ñ¡Γ«¼ ∩ó½∩ÑΓß∩
  83.  íπΣÑα ó óáΦÑ⌐ »α«úαá¼¼Ñ, «Γ¬πñá ¿½¿ ¬πñá ñ«½ª¡δ »«ßΓπ»áΓ∞
  84.  ñá¡¡δÑ. ÆαÑΓ¿⌐ áαúπ¼Ñ¡Γ - φΓ« τ¿ß½« »«ñ½ÑªáΘ¿σ »ÑαÑß佬Ñ
  85.  íá⌐Γ«ó. ÄíαáΘÑ¡¿∩ ¬ φΓ¿¼ Σπ¡¬µ¿∩¼ ¿¼ÑεΓ ó¿ñ:
  86.  
  87.  N_READ=READ(FD,BUF,N);
  88.  N_WRITTEN=WRITE(FD,BUF,N);
  89.  
  90.  Åα¿ ¬áªñ«¼ «íαáΘÑ¡¿¿ ó«ºóαáΘáÑΓß∩ ßτÑΓτ¿¬ íá⌐Γ«ó, π¬áºδóáε-
  91.  Θ¿⌐ Σá¬Γ¿τÑ߬«Ñ τ¿ß½« »ÑαÑñá¡¡δσ íá⌐Γ«ó. Åα¿ τΓÑ¡¿¿ ó«ºóαá-
  92.  ΘÑ¡¡«Ñ τ¿ß½« íá⌐Γ«ó ¼«ªÑΓ «¬áºáΓ∞ß∩ ¼Ñ¡∞ΦÑ, τѼ ºá»α«ΦÑ¡¡«Ñ
  93.  τ¿ß½«. é«ºóαáΘÑ¡¡«Ñ ¡π½Ñó«Ñ τ¿ß½« íá⌐Γ«ó «º¡áτáÑΓ ¬«¡Ñµ Σá⌐-
  94.  ½á, á "-1" π¬áºδóáÑΓ ¡á ¡á½¿τ¿Ñ ¬á¬«⌐-½¿í« «Φ¿í¬¿. Åα¿ ºá»¿-
  95.  ß¿ ó«ºóαáΘÑ¡¡«Ñ º¡áτÑ¡¿Ñ αáó¡« τ¿ß½π Σá¬Γ¿τÑ߬¿ ºá»¿ßá¡¡δσ
  96.  íá⌐Γ«ó; ¡Ñß«ó»áñÑ¡¿Ñ φΓ«ú« τ¿ß½á ß τ¿ß½«¼ íá⌐Γ«ó, ¬«Γ«α«Ñ
  97.  »αÑñ»«½áúὫß∞ ºá»¿ßáΓ∞, «íδτ¡« ßó¿ñÑΓѽ∞ßΓóπÑΓ «í «Φ¿í¬Ñ.
  98.      è«½¿τÑßΓó« íá⌐Γ«ó, »«ñ½ÑªáΘ¿σ τΓÑ¡¿ε ¿½¿ ºá»¿ß¿, ¼«ªÑΓ
  99.  íδΓ∞ ß«óÑαΦÑ¡¡« »α«¿ºó«½∞¡δ¼. äóπ¼∩ ßá¼δ¼¿ αáß»α«ßΓαá¡Ñ¡¡δ¼¿
  100.  óѽ¿τ¿¡á¼¿ ∩ó½∩εΓß∩ "1", ¬«Γ«αá∩ «º¡áτáÑΓ »ÑαÑñáτπ «ñ¡«ú«
  101.  ß¿¼ó«½á ºá «íαáΘÑ¡¿Ñ (Γ.Ñ. üѺ ¿ß»«½∞º«óá¡¿∩ íπΣÑαá), ¿
  102.  "512", ¬«Γ«αá∩ ß««ΓóÑΓßΓóπÑΓ Σ¿º¿τÑ߬«¼π αẼÑαπ í½«¬á ¡á
  103.  ¼¡«ú¿σ »Ñα¿ΣÑα¿⌐¡δσ πßΓα«⌐ßΓóáσ. ¥Γ«Γ »«ß½Ññ¡¿⌐ αẼÑα íπñÑΓ
  104.  ¡á¿í«½ÑÑ φΣΣÑ¬Γ¿ó¡δ¼, ¡« ñáªÑ óó«ñ ¿½¿ óδó«ñ »« «ñ¡«¼π ß¿¼-
  105.  ó«½π ºá «íαáΘÑ¡¿Ñ ¡Ñ íπñÑΓ ¡Ñ«í몭«óÑ¡¡« ñ«α«ú¿¼.
  106.      ÄíΩÑñ¿¡¿ó óßÑ φΓ¿ Σá¬Γδ, ¼δ ¡á»¿ß὿ »α«ßΓπε »α«úαá¼¼π
  107.  ñ½∩ ¬«»¿α«óá¡¿∩ óó«ñá ¡á óδó«ñ, φ¬ó¿óá½Ñ¡Γ¡πε »α«úαἼѠ¬«-
  108.  »¿α«ó¬¿ Σá⌐½«ó, ¡á»¿ßá¡¡«⌐ ó ú½áóÑ 1. ìá ß¿ßΓѼѠUNIX φΓá
  109.  »α«úαá¼¼á íπñÑΓ ¬«»¿α«óáΓ∞ τΓ« πú«ñ¡« ¬πñá πú«ñ¡«, »«Γ«¼π
  110.  τΓ« óó«ñ ¿ óδó«ñ ¼«úπΓ íδΓ∞ »ÑαÑ¡á»αáó½Ñ¡δ ¡á ½εí«⌐ Σá⌐½ ¿½¿
  111.  πßΓα«⌐ßΓó«.
  112.      
  113.                            - 169 -
  114.      
  115.  
  116.     #DEFINE BUFSIZE 512 /*BEST SIZE FOR PDP-11 UNIX*/
  117.     MAIN() /*COPY INPUT TO OUTPUT*/
  118.     \(
  119.    CHAR BUF[BUFSIZE];
  120.    INT N;
  121.    WHILE((N=READ(0,BUF,BUFSIZE))>0)
  122.    WRITE(1,BUF,N);
  123.     \)
  124.  
  125.  àß½¿ αẼÑα Σá⌐½á ¡Ñ íπñÑΓ ¬αáΓÑ¡ BUFSIZE, Γ« »α¿ ¡Ñ¬«Γ«α«¼
  126.  «íαáΘÑ¡¿¿ ¬ READ íπñÑΓ ó«ºóαáΘÑ¡« ¼Ñ¡∞ΦÑÑ τ¿ß½« íá⌐Γ«ó, ¬«-
  127.  Γ«αδÑ ºáΓѼ ºá»¿ßδóáεΓß∩ ß »«¼«Θ∞ε WRITE; »α¿ ß½ÑñπεΘѼ »«ß-
  128.  ½Ñ φΓ«ú« «íαáΘÑ¡¿¿ ¬ READ íπñÑΓ ó«ºóαáΘÑ¡ ¡π½∞.
  129.      Å«πτ¿Γѽ∞¡« αẫíαáΓ∞ß∩, ¬á¬ ¼«ª¡« ¿ß»«½∞º«óáΓ∞ Σπ¡¬µ¿¿
  130.  READ ¿ WRITE ñ½∩ »«ßΓα«Ñ¡¿∩ »α«µÑñπα í«½ÑÑ óδß«¬«ú« πα«ó¡∩,
  131.  Γᬿσ ¬á¬ GETCHAR, PUTCHAR ¿ Γ.ñ. é«Γ, ¡á»α¿¼Ñα, óáα¿á¡Γ
  132.  Σπ¡¬µ¿¿ GETCHAR, «ßπΘÑßΓó½∩εΘ¿⌐ óó«ñ íѺ ¿ß»«½∞º«óá¡¿∩ íπΣÑ-
  133.  αá.
  134.  
  135.     #DEFINE CMASK 0377 /*FOR MAKING CHAR'S > 0*/
  136.     GETCHAR() /*UNBUFFERED SINGLE CHARACTER INPUT*/
  137.     \(
  138.    CHAR C;
  139.    RETURN((READ(0,&C,1)>0 7 & CMASK : EOF);
  140.     \)
  141.  
  142.  ÅÑαѼѡ¡á∩ "C" ñ«½ª¡á íδΓ∞ «»¿ßá¡á ¬á¬ CHAR, »«Γ«¼π τΓ« Σπ¡-
  143.  ¬µ¿∩ READ »α¿¡¿¼áÑΓ π¬áºáΓѽ∞ ¡á ß¿¼ó«½δ. é«ºóαáΘáѼδ⌐ ß¿¼-
  144.  ó«½ ñ«½ªÑ¡ íδΓ∞ ¼á߬¿α«óá¡ τ¿ß½«¼ 0377 ñ½∩ úáαá¡Γ¿¿ Ñú« »«-
  145.  ½«ª¿Γѽ∞¡«ßΓ¿; ó »α«Γ¿ó¡«¼ ß½πτáÑ º¡á¬«óδ⌐ αáºα∩ñ ¼«ªÑΓ ßñÑ-
  146.  ½áΓ∞ Ñú« º¡áτÑ¡¿Ñ «Γα¿µáΓѽ∞¡δ¼. (è«¡ßΓá¡Γá 0377 »«ñσ«ñ¿Γ
  147.  ñ½∩ φó¼ PDP-11, ¡« ¡Ñ «í∩ºáΓѽ∞¡« ñ½∩ ñαπú¿σ ¼áΦ¿¡).
  148.      éΓ«α«⌐ óáα¿á¡Γ Σπ¡¬µ¿¿ GETCHAR «ßπΘÑßΓó½∩ÑΓ óó«ñ í«½∞Φ¿-
  149.  ¼¿ »«αµ¿∩¼¿, á óδñáÑΓ ß¿¼ó«½δ »« «ñ¡«¼π ºá «íαáΘÑ¡¿Ñ.
  150.  
  151.    #DEFINE CMASK 0377 /*FOR MAKING CHAR'S>0*/
  152.    #DEFINE BUFSIZE 512
  153.    GETCHAR() /*BUFFERED VERSION*/
  154.    \(
  155.   STATIC CHAR  BUF[BUFSIZE];
  156.   STATIC CHAR  *BUFP = BUF;
  157.   STATIC INT   N = 0;
  158.   IF (N==0) \( /*BUFFER IS EMPTY*/
  159.   N=READ(0,BUF,BUFSIZE);
  160.   BUFP = BUF;
  161.   \)
  162.   RETURN((--N>=0) ? *BUFP++ & CMASK : EOF);
  163.    \)
  164.      
  165.      8.3. ÄΓ¬αδΓ¿Ñ, ß«ºñá¡¿Ñ, ºá¬αδΓ¿Ñ ¿ αáߵѻ½Ñ¡¿Ñ
  166.  (UNLINK).
  167.      èα«¼Ñ ß½πτá∩, ¬«úñá »« π¼«½τá¡¿ε «»αÑñѽѡδ ßΓá¡ñáαΓ¡δÑ
  168.  Σá⌐½δ óó«ñá, óδó«ñá ¿ «Φ¿í«¬, óδ ñ«½ª¡δ ∩ó¡« «Γ¬αδóáΓ∞ Σá⌐-
  169.  ½δ, τΓ«íδ ºáΓѼ τ¿ΓáΓ∞ ¿º ¡¿σ ¿½¿ »¿ßáΓ∞ ó ¡¿σ. ä½∩ φΓ«⌐ µÑ-
  170.  ½¿ ßπΘÑßΓóπεΓ ñóÑ Γ«τ¬¿ óσ«ñá: OPEN ¿ CREAT.
  171.      
  172.                            - 170 -
  173.      
  174.      öπ¡¬µ¿∩ OPEN óÑß∞¼á ßσ«ñ¡á ß Σπ¡¬µ¿Ñ⌐ FOPEN, αáßß¼«ΓαÑ¡-
  175.  ¡«⌐ ó ú½áóÑ 7, ºá ¿ß¬½ετÑ¡¿Ñ¼ Γ«ú«, τΓ« ó¼ÑßΓ« ó«ºóαáΘÑ¡¿∩
  176.  π¬áºáΓѽ∩ Σá⌐½á «¡á ó«ºóαáΘáÑΓ ñÑß¬α¿»Γ«α Σá⌐½á, ¬«Γ«αδ⌐ ∩ó-
  177.  ½∩ÑΓß∩ »α«ßΓ« µÑ½δ¼ Γ¿»á INT.
  178.  
  179.  INT FD;
  180.  FD=OPEN(NAME,RWMODE);
  181.  
  182.  èᬠ¿ ó ß½πτáÑ FOPEN, áαúπ¼Ñ¡Γ NAME ∩ó½∩ÑΓß∩ ß¿¼ó«½∞¡«⌐
  183.  ßΓ᫬«⌐, ß««ΓóÑΓßΓóπεΘÑ⌐ ó¡ÑΦ¡Ñ¼π ¿¼Ñ¡¿ Σá⌐½á. Äñ¡á¬« áαúπ-
  184.  ¼Ñ¡Γ, «»αÑñѽ∩εΘ¿⌐ αѪ¿¼ ñ«ßΓπ»á, «Γ½¿τÑ¡: RWMODE αáó¡«: 0 -
  185.  ñ½∩ τΓÑ¡¿∩, 1 - ñ½∩ ºá»¿ß¿, 2 - ñ½∩ τΓÑ¡¿∩ ¿ ºá»¿ß¿. àß½¿
  186.  »α«¿ßσ«ñ¿Γ ¬á¬á∩-Γ« «Φ¿í¬á, Σπ¡¬µ¿∩ OPEN ó«ºóαáΘáÑΓ "-1"; ó
  187.  »α«Γ¿ó¡«¼ ß½πτáÑ «¡á ó«ºóαáΘáÑΓ ñÑ⌐ßΓó¿Γѽ∞¡δ⌐ ñÑß¬α¿»Γ«α
  188.  Σá⌐½á.
  189.      Å«»δΓ¬á «Γ¬αδΓ∞ Σá⌐½, ¬«Γ«αδ⌐ ¡Ñ ßπΘÑßΓóπÑΓ, ∩ó½∩ÑΓß∩
  190.  «Φ¿í¬«⌐. Æ«τ¬á óσ«ñá CREAT »αÑñ«ßΓáó½∩ÑΓ ó«º¼«ª¡«ßΓ∞ ß«ºñá-
  191.  ¡¿∩ ¡«óδσ Σá⌐½«ó ¿½¿ »ÑαѺỿ߿ ßΓáαδσ. é αѺπ½∞ΓáΓÑ «íαáΘÑ-
  192.  ¡¿∩
  193.      
  194.  FD=CREAT(NAME,PMODE);
  195.  
  196.  ó«ºóαáΘáÑΓ ñÑß¬α¿»Γ«α Σá⌐½á, Ñß½¿ «¬áºá½«ß∞ ó«º¼«ª¡δ¼ ß«º-
  197.  ñáΓ∞ Σá⌐½ ß ¿¼Ñ¡Ñ¼ NAME, ¿ "-1" ó »α«Γ¿ó¡«¼ ß½πτáÑ. àß½¿
  198.  Σá⌐½ ß Γᬿ¼ ¿¼Ñ¡Ñ¼ πªÑ ßπΘÑßΓóπÑΓ, CREAT πßÑτÑΓ Ñú« ñ« ¡π-
  199.  ½Ñó«⌐ ñ½¿¡δ; ß«ºñá¡¿Ñ Σá⌐½á, ¬«Γ«αδ⌐ πªÑ ßπΘÑßΓóπÑΓ, ¡Ñ ∩ó-
  200.  ½∩ÑΓß∩ «Φ¿í¬«⌐.
  201.      àß½¿ Σá⌐½ ∩ó½∩ÑΓß∩ ß«óÑαΦÑ¡¡« ¡«óδ¼, Γ« CREAT ß«ºñáÑΓ
  202.  Ñú« ß «»αÑñѽѡ¡δ¼ αѪ¿¼«¼ ºáΘ¿Γδ, ß»Ñµ¿Σ¿µ¿απÑ¼δ¼ áαúπ¼Ñ¡-
  203.  Γ«¼ PMODE. é ß¿ßΓѼѠΣá⌐½«ó ¡á UNIX ß Σá⌐½«¼ ßó∩ºδóáεΓß∩ ñÑ-
  204.  ó∩Γ∞ í¿Γ«ó ºáΘ¿Γδ ¿¡Σ«α¼áµ¿¿, ¬«Γ«αδÑ π»αáó½∩εΓ αáºαÑΦÑ¡¿Ñ¼
  205.  ¡á τΓÑ¡¿Ñ, ºá»¿ß∞ ¿ óδ»«½¡Ñ¡¿Ñ ñ½∩ ó½áñѽ∞µá Σá⌐½á, ñ½∩
  206.  úαπ»»δ ó½áñѽ∞µÑó ¿ ñ½∩ óßÑσ «ßΓá½∞¡δσ »«½∞º«óáΓѽÑ⌐. Æá¬¿¼
  207.  «íαẫ¼, ΓαÑσº¡áτ¡«Ñ ó«ß∞¼Ñα¿τ¡«Ñ τ¿ß½« ¡á¿í«½ÑÑ πñ«í¡« ñ½∩
  208.  ß»Ñµ¿Σ¿¬áµ¿¿ αáºαÑΦÑ¡¿⌐. ìá»α¿¼Ñα, τ¿ß½« 0755 ßó¿ñÑΓѽ∞ßΓóπ-
  209.  ÑΓ « αáºαÑΦÑ¡¿¿ ¡á τΓÑ¡¿Ñ, ºá»¿ß∞ ¿ óδ»«½¡Ñ¡¿Ñ ñ½∩ ó½áñѽ∞µá
  210.  ¿ « αáºαÑΦÑ¡¿¿ ¡á τΓÑ¡¿Ñ ¿ óδ»«½¡Ñ¡¿Ñ ñ½∩ úαπ»»δ ¿ óßÑσ «ß-
  211.  Γá½∞¡δσ.
  212.      ä½∩ ¿½½εßΓαᵿ¿ ¡¿ªÑ »α¿ó«ñ¿Γß∩ »α«úαἼᠬ«»¿α«óá¡¿∩
  213.  «ñ¡«ú« Σá⌐½á ó ñαπú«⌐, ∩ó½∩εΘá∩ß∩ π»α«ΘÑ¡¡δ¼ óáα¿á¡Γ«¼ πΓ¿-
  214.  ½¿Γδ CP ß¿ßΓѼδ UNIX. (Äß¡«ó¡«Ñ π»α«ΘÑ¡¿Ñ ºá¬½ετáÑΓß∩ ó Γ«¼,
  215.  τΓ« ¡áΦ óáα¿á¡Γ ¬«»¿απÑΓ Γ«½∞¬« «ñ¿¡ Σá⌐½ ¿ τΓ« óΓ«α«⌐ áαúπ-
  216.  ¼Ñ¡Γ ¡Ñ ñ«½ªÑ¡ íδΓ∞ ß»αáó«τ¡¿¬«¼).
  217.  
  218.     #DEFINE NULL 0
  219.     #DEFINE BUFSIZE 512
  220.     #DEFINE PMODE 0644/*RW FOR OWNER,R FOR GROUP,OTHERS*/
  221.     MAIN(ARGC,ARGV) /*CP: COPY F1 TO F2*/
  222.     INT ARGC;
  223.     CHAR *ARGV[];
  224.     \(
  225.    INT F1, F2, N;
  226.    CHAR BUF[BUFSIZE];
  227.      
  228.                            - 171 -
  229.      
  230.    IF (ARGC ! = 3)
  231.    ERROR("USAGE:CP FROM TO", NULL);
  232.    IF ((F1=OPEN(ARGV[1],0))== -1)
  233.    ERROR("CP:CAN'T OPEN %S", ARGV[1]);
  234.    IF ((F2=CREAT(ARGV[2],PMODE))== -1)
  235.    ERROR("CP: CAN'T CREATE %S", ARGV[2]);
  236.    WHILE ((N=READ(F1,BUF,BUFSIZE))>0)
  237.    IF (WRITE(F2,BUF,N) !=N)
  238.         ERROR("CP: WRITE ERROR", NULL);
  239.    EXIT(0);
  240.     \)
  241.     ERROR(S1,S2) /*PRINT ERROR MESSAGE AND DIE*/
  242.     CHAR *S1, S2;
  243.     \(
  244.    PRINTF(S1,S2);
  245.    PRINTF("\N");
  246.    EXIT(1);
  247.     \)
  248.  
  249.      æπΘÑßΓóπÑΓ «úαá¡¿τÑ¡¿Ñ («íδτ¡« 15 - 25) ¡á ¬«½¿τÑßΓó«
  250.  Σá⌐½«ó, ¬«Γ«αδÑ »α«úαἼᠼ«ªÑΓ ¿¼ÑΓ∞ «Γ¬αδΓ묨 «ñ¡«óαѼѡ-
  251.  ¡«. é ß««ΓóÑΓßΓó¿¿ ß φΓ¿¼ ½εíá∩ »α«úαá¼¼á, ß«í¿αáεΘá∩ß∩ αá-
  252.  í«ΓáΓ∞ ß« ¼¡«ú¿¼¿ Σá⌐½á¼¿, ñ«½ª¡á íδΓ∞ »«ñú«Γ«ó½Ñ¡á ¬ »«ó-
  253.  Γ«α¡«¼π ¿ß»«½∞º«óá¡¿ε ñÑß¬α¿»Γ«α«ó Σá⌐½«ó. Åα«µÑñπαá CLOSE
  254.  »αÑαδóáÑΓ ßó∩º∞ ¼Ñªñπ ñÑß¬α¿»Γ«α«¼ Σá⌐½á ¿ «Γ¬αδΓδ¼ Σá⌐½«¼ ¿
  255.  «ßó«í«ªñáÑΓ ñÑß¬α¿»Γ«α Σá⌐½á ñ½∩ ¿ß»«½∞º«óá¡¿∩ ß ¡Ñ¬«Γ«αδ¼
  256.  ñαπú¿¼ Σá⌐½«¼. çáóÑαΦÑ¡¿Ñ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ τÑαѺ EXIT
  257.  ¿½¿ ó αѺπ½∞ΓáΓÑ ó«ºóαáΓá ¿º óÑñπΘÑ⌐ »α«úαá¼¼δ »α¿ó«ñ¿Γ ¬
  258.  ºá¬αδΓ¿ε óßÑσ «Γ¬αδΓδσ Σá⌐½«ó.
  259.      öπ¡¬µ¿∩ αáߵѻ½Ñ¡¿∩ UNLINK (FILENAME) πñá½∩ÑΓ ¿º ß¿ßΓѼδ
  260.  Σá⌐½«ó Σá⌐½ ß ¿¼Ñ¡Ñ¼ FILENAME ( ¿º ñá¡¡«ú« ß»αáó«τ¡«ú« Σá⌐-
  261.  ½á. öá⌐½ ¼«ªÑΓ íδΓ∞ ßµÑ»½Ñ¡ ß ñαπú¿¼ ß»αáó«τ¡¿¬«¼, ó«º¼«ª¡«,
  262.  »«ñ ñαπú¿¼ ¿¼Ñ¡Ñ¼ - »α¿¼Ñτ.»ÑαÑó«ñτ¿¬á).
  263.      ô»α᪡ѡ¿Ñ 8-1.
  264.      --------------
  265.      ÅÑαÑ»¿Φ¿ΓÑ »α«úαá¼¼π CAT ¿º ú½áóδ 7, ¿ß»«½∞ºπ∩ Σπ¡¬µ¿¿
  266.  READ, WRITE, OPEN ¿ CLOSE ó¼ÑßΓ« ¿σ φ¬ó¿óá½Ñ¡Γ«ó ¿º ßΓá¡ñáα-
  267.  Γ¡«⌐ í¿í½¿«ΓѬ¿. Åα«óÑñ¿ΓÑ φ¬ß»Ñα¿¼Ñ¡Γδ ñ½∩ «»αÑñѽѡ¿∩ «Γ-
  268.  ¡«ß¿Γѽ∞¡«⌐ ß¬«α«ßΓ¿ αáí«Γδ φΓ¿σ ñóπσ óáα¿á¡Γ«ó.
  269.  
  270.      8.4. Åα«¿ºó«½∞¡δ⌐ ñ«ßΓπ» - SEEK ¿ LSEEK.
  271.      ì«α¼á½∞¡« »α¿ αáí«ΓÑ ß Σá⌐½á¼¿ óó«ñ ¿ óδó«ñ «ßπΘÑßΓó½∩-
  272.  ÑΓß∩ »«ß½Ññ«óáΓѽ∞¡«: »α¿ ¬áªñ«¼ «íαáΘÑ¡¿¿ ¬ Σπ¡¬µ¿∩¼ READ ¿
  273.  WRITE τΓÑ¡¿Ñ ¿½¿ ºá»¿ß∞ ¡áτ¿¡áεΓß∩ ß »«º¿µ¿¿, ¡Ñ»«ßαÑñßΓóÑ¡-
  274.  ¡« ß½ÑñπεΘÑ⌐ ºá »αÑñδñπΘÑ⌐ «íαáí«Γá¡¡«⌐. ì« »α¿ ¡Ñ«íσ«ñ¿¼«ß-
  275.  Γ¿ Σá⌐½ ¼«ªÑΓ τ¿ΓáΓ∞ß∩ ¿½¿ ºá»¿ßδóáΓ∞ß∩ ó ½εí«¼ »α«¿ºó«½∞¡«¼
  276.  »«α∩ñ¬Ñ. ÄíαáΘÑ¡¿Ñ ¬ ß¿ßΓѼѠߠ»«¼«Θ∞ε Σπ¡¬µ¿¿ LSEEK »«ºó«-
  277.  ½∩ÑΓ »ÑαÑñó¿úáΓ∞ß∩ »« Σá⌐½π, ¡Ñ »α«¿ºó«ñ∩ Σá¬Γ¿τÑ߬«ú« τΓÑ-
  278.  ¡¿∩ ¿½¿ ºá»¿ß¿. é αѺπ½∞ΓáΓÑ «íαáΘÑ¡¿∩
  279.  
  280.   LSEEK(FD,OFFSET,ORIGIN);
  281.             
  282.                            - 172 -
  283.      
  284.  ΓѬπΘá∩ »«º¿µ¿∩ ó Σá⌐½Ñ ß ñÑß¬α¿»Γ«α«¼ FD »ÑαÑñó¿úáÑΓß∩ ¡á
  285.  »«º¿µ¿ε OFFSET (ß¼ÑΘÑ¡¿Ñ), ¬«Γ«αá∩ «Γßτ¿ΓδóáÑΓß∩ «Γ ¼ÑßΓá,
  286.  π¬áºδóáѼ«ú« áαúπ¼Ñ¡Γ«¼ ORIGIN (¡áτὫ «ΓßτÑΓá). Å«ß½ÑñπεΘÑÑ
  287.  τΓÑ¡¿Ñ ¿½¿ ºá»¿ß∞ íπñπΓ ΓÑ»Ñα∞ ¡áτ¿¡áΓ∞ß∩ ß φΓ«⌐ »«º¿µ¿¿.
  288.  Çαúπ¼Ñ¡Γ OFFSET ¿¼ÑÑΓ Γ¿» LONG; FD ¿ ORIGIN ¿¼ÑεΓ Γ¿» INT.
  289.  Çαúπ¼Ñ¡Γ ORIGIN ¼«ªÑΓ »α¿¡¿¼áΓ∞ º¡áτÑ¡¿∩ 0,1 ¿½¿ 2, π¬áºδóá∩
  290.  ¡á Γ«, τΓ« óѽ¿τ¿¡á OFFSET ñ«½ª¡á «Γßτ¿ΓδóáΓ∞ß∩ ß««ΓóÑΓßΓ-
  291.  óÑ¡¡« «Γ ¡áτá½á Σá⌐½á, «Γ ΓѬπΘÑ⌐ »«º¿µ¿¿ ¿½¿ «Γ ¬«¡µá Σá⌐-
  292.  ½á. ìá»α¿¼Ñα, τΓ«íδ ñ«»«½¡¿Γ∞ Σá⌐½, ß½ÑñπÑΓ »ÑαÑñ ºá»¿ß∞ε
  293.  ¡á⌐Γ¿ Ñú« ¬«¡Ñµ:
  294.  
  295.   LSEEK(FD,0L,2);
  296.  
  297.  τΓ«íδ óÑα¡πΓ∞ß∩ ¬ ¡áτá½π ("»ÑαѼ«ΓáΓ∞ «íαáΓ¡«"), ¼«ª¡« ¡á»¿-
  298.  ßáΓ∞:
  299.  
  300.   LSEEK(FD,0L,0);
  301.  
  302.  «íαáΓ¿ΓѠ󡿼᡿Ѡ¡á áαúπ¼Ñ¡Γ 0L; Ñú« ¼«ª¡« í佫 íδ ºá»¿ßáΓ∞
  303.  ¿ ó ó¿ñÑ (LONG) 0.
  304.      öπ¡¬µ¿∩ LSEEK »«ºó«½∩ÑΓ «íαáΘáΓ∞ß∩ ß Σá⌐½á¼¿ »α¿¼Ñα¡«
  305.  ΓᬠªÑ, ¬á¬ ß í«½∞Φ¿¼¿ ¼áßß¿óἿ, »αáóñᠵѡ«⌐ í«½ÑÑ ¼Ññ½Ñ¡-
  306.  ¡«ú« ñ«ßΓπ»á. ß½ÑñπεΘá∩ »α«ßΓá∩ Σπ¡¬µ¿∩, ¡á»α¿¼Ñα, ßτ¿ΓδóáÑΓ
  307.  ½εí«Ñ ¬«½¿τÑßΓó« íá⌐Γ«ó, ¡áτ¿¡á∩ ß »α«¿ºó«½∞¡«ú« ¼ÑßΓá ó
  308.  Σá⌐½Ñ.
  309.  
  310.     GET(FD,POS,BUF,N) /*READ N BYTES FROM POSITION POS*/
  311.     INT FD, N;
  312.     LONG POS;
  313.     CHAR *BUF;
  314.     \(
  315.    LSEEK(FD,POS,0); /*GET TO POS*/
  316.    RETURN(READ(FD,BUF,N));
  317.     \)
  318.  
  319.      é í«½ÑÑ αá¡¡¿σ αÑñᬵ¿∩σ, τѼ αÑñᬵ¿∩ 7 ß¿ßΓѼδ UNIX,
  320.  «ß¡«ó¡á∩ Γ«τ¬á óσ«ñá ó ß¿ßΓѼπ óó«ñá-óδó«ñá ¡áºδóáÑΓß∩ SEEK.
  321.  öπ¡¬µ¿∩ SEEK ¿ñÑ¡Γ¿τ¡á Σπ¡¬µ¿¿ LSEEK, ºá ¿ß¬½ετÑ¡¿Ñ¼ Γ«ú«,
  322.  τΓ« áαúπ¼Ñ¡Γ OFFSET ¿¼ÑÑΓ Γ¿» INT, á ¡Ñ LONG. ó ß««ΓóÑΓßΓó¿¿
  323.  ß φΓ¿¼, »«ß¬«½∞¬π ¡á PDP-11 µÑ½δÑ ¿¼ÑεΓ Γ«½∞¬« 16 í¿Γ«ó, áα-
  324.  úπ¼Ñ¡Γ OFFSET, π¬áºδóáѼδ⌐ Σπ¡¬µ¿¿ SEEK, «úαá¡¿τÑ¡ óѽ¿τ¿¡«⌐
  325.  65535; »« φΓ«⌐ »α¿τ¿¡Ñ áαúπ¼Ñ¡Γ ORIGIN ¼«ªÑΓ ¿¼ÑΓ∞ º¡áτÑ¡¿∩
  326.  3, 4, 5, ¬«Γ«αδÑ ºáßΓáó½∩εΓ Σπ¡¬µ¿ε SEEK π¼¡«ª¿Γ∞ ºáñá¡¡«Ñ
  327.  º¡áτÑ¡¿Ñ OFFSET ¡á 512 (¬«½¿τÑßΓó« íá⌐Γ«ó ó «ñ¡«¼ Σ¿º¿τÑ߬«¼
  328.  í½«¬Ñ) ¿ ºáΓѼ ¿¡ΓÑα»αÑΓ¿α«óáΓ∞ ORIGIN, ¬á¬ Ñß½¿ φΓ« 0, 1
  329.  ¿½¿ 2 ß««ΓóÑΓßΓóÑ¡¡«. æ½Ññ«óáΓѽ∞¡«, τΓ«íδ ñ«ßΓ¿τ∞ »α«¿º-
  330.  ó«½∞¡«ú« ¼ÑßΓá ó í«½∞Φ«¼ Σá⌐½Ñ, ¡πª¡« ñóá «íαáΘÑ¡¿∩ ¬ SEEK:
  331.  ß¡áτá½á «ñ¡«, ¬«Γ«α«Ñ óδñѽ∩ÑΓ ¡πª¡δ⌐ í½«¬, á ºáΓѼ óΓ«α«Ñ,
  332.  úñÑ ORIGIN ¿¼ÑÑΓ º¡áτÑ¡¿Ñ 1 ¿ ¬«Γ«α«Ñ «ßπΘÑßΓó½∩ÑΓ »ÑαÑñó¿-
  333.  ªÑ¡¿Ñ ¡á ªÑ½áѼδ⌐ íá⌐Γ ó¡πΓα¿ í½«¬á.
  334.      ô»α᪡ѡ¿Ñ 8-2.
  335.      ---------------
  336.      ÄτÑó¿ñ¡«, τΓ« SEEK ¼«ªÑΓ íδΓ∞ ¡á»¿ßá¡á ó ΓÑନ¡á½áσ
  337.  LSEEK ¿ ¡á«í«α«Γ. ¡á»¿Φ¿ΓÑ ¬áªñπε Σπ¡¬µ¿ε τÑαѺ ñαπúπε.
  338.             
  339.                           - 173 -
  340.      
  341.      8.5. Åα¿¼Ñα - αÑ὿ºáµ¿∩ Σπ¡¬µ¿⌐ FOPEN ¿ GETC.
  342.      äáóá⌐ΓÑ ΓÑ»Ñα∞ ¡á »α¿¼ÑαÑ αÑ὿ºáµ¿¿ Σπ¡¬µ¿⌐ FOPEN ¿
  343.  GETC ¿º ßΓá¡ñáαΓ¡«⌐ í¿í½¿«ΓѬ¿ »«ñ»α«úαá¼¼ »α«ñѼ«¡ßΓα¿απѼ,
  344.  ¬á¬ ¡Ñ¬«Γ«αδÑ ¿º «»¿ßá¡¡δσ φ½Ñ¼Ñ¡Γ«ó «íΩÑñ¿¡∩εΓß∩ ó¼ÑßΓÑ.
  345.      ìừ¼¡¿¼, τΓ« ó ßΓá¡ñáαΓ¡«⌐ í¿í½¿«ΓѬѠΣá⌐½δ «»¿ßδóáΓß∩
  346.  »«ßαÑñßΓó«¼ π¬áºáΓѽÑ⌐ Σá⌐½«ó, á ¡Ñ ñÑß¬α¿»Γ«α«ó. ô¬áºáΓѽ∞
  347.  Σá⌐½á ∩ó½∩ÑΓß∩ π¬áºáΓѽѼ ¡á ßΓαπ¬Γπαπ, ¬«Γ«αá∩ ß«ñÑনΓ
  348.  ¡Ñ߬«½∞¬« φ½Ñ¼Ñ¡Γ«ó ¿¡Σ«α¼áµ¿¿ « Σá⌐½Ñ: π¬áºáΓѽ∞ íπΣÑαá,
  349.  τΓ«íδ Σá⌐½ ¼«ú τ¿ΓáΓ∞ß∩ í«½∞Φ¿¼¿ »«αµ¿∩¼¿; ßτÑΓτ¿¬ τ¿ß½á
  350.  ß¿¼ó«½«ó, «ßΓáóΦ¿σß∩ ó íπΣÑαÑ; π¬áºáΓѽ∞ ß½ÑñπεΘÑ⌐ »«º¿µ¿¿
  351.  ß¿¼ó«½á ó íπΣÑαÑ; ¡Ñ¬«Γ«αδÑ »α¿º¡á¬¿, π¬áºδóáεΘ¿Ñ αѪ¿¼ τΓÑ-
  352.  ¡¿∩ ¿½¿ ºá»¿ß¿ ¿ Γ.ñ.; ñÑß¬α¿»Γ«α Σá⌐½á.
  353.      Ä»¿ßδóáεΘá∩ Σá⌐½ ßΓαπ¬Γπαá ñá¡¡δσ ß«ñÑনΓß∩ ó Σá⌐½Ñ
  354.  STDIO.H, ¬«Γ«αδ⌐ ñ«½ªÑ¡ ó¬½ετáΓ∞ß∩ (»«ßαÑñßΓó«¼ #INCLUDE) ó
  355.  ½εí«⌐ ¿ßσ«ñ¡δ⌐ Σá⌐½, ó ¬«Γ«α«¼ ¿ß»«½∞ºπεΓß∩ Σπ¡¬µ¿¿ ¿º ßΓá¡-
  356.  ñáαΓ¡«⌐ í¿í½¿«ΓѬ¿. Ä¡ ΓᬪѠó¬½ετáÑΓß∩ Σπ¡¬µ¿∩¼¿ φΓ«⌐ í¿í-
  357.  ½¿«ΓѬ¿. é »α¿ó«ñ¿¼«⌐ ¡¿ªÑ óδñÑαª¬Ñ ¿º Σá⌐½á STDIO.H ¿¼Ñ¡á,
  358.  »αÑñ¡áº¡áτáѼδÑ Γ«½∞¬« ñ½∩ ¿ß»«½∞º«óá¡¿∩ Σπ¡¬µ¿∩¼¿ í¿í½¿«ΓÑ-
  359.  ¬¿, ¡áτ¿¡áεΓß∩ ß »«ñτÑનóá¡¿∩, ß ΓѼ τΓ«íδ π¼Ñ¡∞Φ¿Γ∞ óÑα«-
  360.  ∩Γ¡«ßΓ∞ ß«ó»áñÑ¡¿∩ ß ¿¼Ñ¡á¼¿ ó »α«úαἼѠ»«½∞º«óáΓѽ∩.
  361.  
  362.   DEFINE _BUFSIZE 512
  363.   DEFINE _NFILE   20 /*FILES THAT CAN BE HANDLED*/
  364.    TYPEDEF STRUCT _IOBUF \(
  365.      CHAR *_PTR;   /*NEXT CHARACTER POSITION*/
  366.      INT  _CNT;    /*NUMBER OF CHARACTERS LEFT*/
  367.      CHAR *_BASE;  /*LOCATION OF BUFFER*/
  368.      INT  _FLAG;   /*MODE OF FILE ACCESS*/
  369.      INT  _FD;     /*FILE DESCRIPTOR*/
  370.   ) FILE;
  371.   XTERN FILE _IOB[_NFILE];
  372.    
  373.   DEFINE   STDIN         (&_IOB[0])
  374.   DEFINE   STDOUT        (&_IOB[1])
  375.   DEFINE   STDERR        (&_IOB[2])
  376.    
  377.   DEFINE   _READ   01  /* FILE OPEN FOR READING */
  378.   DEFINE   _WRITE  02  /* FILE OPEN FOR WRITING */
  379.   DEFINE   _UNBUF  04  /* FILE IS UNBUFFERED */
  380.   DEFINE   _BIGBUF 010 /* BIG BUFFER ALLOCATED */
  381.   DEFINE   _EOF 020 /* EOF HAS OCCURRED ON THIS FILE */
  382.   DEFINE   _ERR 040 /* ERROR HAS OCCURRED ON THIS FILE */
  383.   DEFINE   NULL 0
  384.   DEFINE   EOF  (-1)
  385.    
  386.   DEFINE   GETC(P) (--(P)->_CNT >= 0 \
  387.     ? *(P)->_PTR++ & 0377 : _FILEBUF(P))
  388.   DEFINE   GETCHAR() GETC(STDIN)
  389.    
  390.   DEFINE   PUTC(X,P) (--(P)->_CNT >= 0 \
  391.     ? *(P)->_PTR++ = (X) : _FLUSHBUF((X),P))
  392.   DEFINE   PUTCHAR(X)       PUTC(X,STDOUT)
  393.              
  394.                            - 174 -
  395.      
  396.      é ¡«α¼á½∞¡«¼ ß«ßΓ«∩¡¿¿ ¼á¬α«ß GETC »α«ßΓ« π¼Ñ¡∞ΦáÑΓ
  397.  ßτÑΓτ¿¬, »ÑαÑñó¿úáÑΓ π¬áºáΓѽ∞ ¿ ó«ºóαáΘáÑΓ ß¿¼ó«½. (àß½¿
  398.  «»αÑñѽѡ¿Ñ #DEFINE ß½¿Φ¬«¼ ñ½¿¡¡«Ñ, Γ« «¡« »α«ñ«½ªáÑΓß∩ ß
  399.  »«¼«Θ∞ε «íαáΓ¡«⌐ ¬«ß«⌐ τÑαΓδ). àß½¿ «ñ¡á¬« ßτÑΓτ¿¬ ßΓá¡«ó¿Γ-
  400.  ß∩ «Γα¿µáΓѽ∞¡δ¼, Γ« GETC óδºδóáÑΓ Σπ¡¬µ¿ε _FILEBUF, ¬«Γ«αá∩
  401.  ß¡«óᠺừ½¡∩ÑΓ íπΣÑα, αÑ¿¡¿µ¿á½¿º¿απÑΓ ß«ñÑন¼«Ñ ßΓαπ¬Γπαδ
  402.  ¿ ó«ºóαáΘáÑΓ ß¿¼ó«½. öπ¡¬µ¿∩ ¼«ªÑΓ »αÑñ«ßΓáó½∩Γ∞ »ÑαÑ¡«ß¿¼δ⌐
  403.  ¿¡ΓÑαΣÑ⌐ß ¿ ó Γ« ªÑ óαѼ∩ ß«ñÑαªáΓ∞ ¡Ñ»ÑαÑ¡«ß¿¼δÑ ¬«¡ßΓαπ¬-
  404.  µ¿¿: GETC ¼á߬¿απÑΓ ß¿¼ó«½ τ¿ß½«¼ 0377, ¬«Γ«α«Ñ »«ñáó½∩ÑΓ
  405.  º¡á¬«ó«Ñ αáßΦ¿αÑ¡¿Ñ, «ßπΘÑßΓó½∩Ѽ«Ñ ¡á PDP-11, ¿ ΓѼ ßá¼δ¼
  406.  úáαá¡Γ¿απÑΓ »«½«ª¿Γѽ∞¡«ßΓ∞ óßÑσ ß¿¼ó«½«ó.
  407.      ò«Γ∩ ¼δ ¡Ñ ß«í¿αáѼß∩ «íßπªñáΓ∞ ¬á¬¿Ñ-½¿í« ñÑΓ὿, ¼δ
  408.  óßÑ ªÑ ó¬½ετ¿½¿ ßεñá «»αÑñѽѡ¿Ñ ¼á¬α«ßá PUTC, ñ½∩ Γ«ú« τΓ«-
  409.  íδ »«¬áºáΓ∞, τΓ« «¡á αáí«ΓáÑΓ ó «ß¡«ó¡«¼ Γ«τ¡« ΓᬪÑ, ¬á¬ ¿
  410.  GETC, «íαáΘá∩ß∞ »α¿ ºá»«½¡Ñ¡¿¿ íπΣÑαá ¬ Σπ¡¬µ¿¿ _FLUSHBUF.
  411.      ÆÑ»Ñα∞ ¼«ªÑΓ íδΓ∞ ¡á»¿ßá¡á Σπ¡¬µ¿∩ FOPEN. ü«½∞Φá∩ τáßΓ∞
  412.  »α«úαá¼¼δ Σπ¡¬µ¿¿ FOPEN ßó∩ºá¡á ß «Γ¬αδó᡿Ѽ Σá⌐½á ¿ αáß»«-
  413.  ½«ªÑ¡¿Ñ¼ Ñú« ó ¡πª¡«¼ ¼ÑßΓÑ, á ΓᬪѠߠπßΓá¡«ó½Ñ¡¿Ñ¼ í¿Γ«ó
  414.  »α¿º¡á¬«ó Γᬿ¼ «íαẫ¼, τΓ«íδ «¡¿ π¬áºδó὿ ¡πª¡«Ñ ß«ßΓ«∩-
  415.  ¡¿Ñ. öπ¡¬µ¿∩ FOPEN ¡Ñ óδñѽ∩ÑΓ ¬á¬«⌐-½¿í« íπΣÑα¡«⌐ »á¼∩Γ¿;
  416.  φΓ« ñѽáÑΓß∩ Σπ¡¬µ¿Ñ⌐ _FILEBUF »α¿ »Ñαó«¼ τΓÑ¡¿¿ ¿º Σá⌐½á.
  417.  
  418.   #INCLUDE <STDIO.H>
  419.   #DEFINE  PMODE  0644 /*R/W FOR OWNER;R FOR OTHERS*/
  420.   FILE *FOPEN(NAME,MODE) /*OPEN FILE,RETURN FILE PTR*/
  421.   REGISTER CHAR *NAME, *MODE;
  422.   \(
  423.       REGISTER INT FD;
  424.       REGISTER FILE *FP;
  425.   IF(*MODE !='R'&&*MODE !='W'&&*MODE !='A') \(
  426.       FPRINTF(STDERR,"ILLEGAL MODE %S OPENING %S\N",
  427.      MODE,NAME);
  428.       EXIT(1);
  429.   \)
  430.   FOR (FP=_IOB;FP<_IOB+_NFILE;FP++)
  431.       IF((FP->_FLAG & (_READ \! _WRITE))==0)
  432.      BREAK; /*FOUND FREE SLOT*/
  433.   IF(FP>=_IOB+_NFILE) /*NO FREE SLOTS*/
  434.       RETURN(NULL);
  435.   IF(*MODE=='W') /*ACCESS FILE*/
  436.       FD=CREAT(NAME,PMODE);
  437.   ELSE IF(*MODE=='A') \(
  438.       IF((FD=OPEN(NAME,1))==-1)
  439.      FD=CREAT(NAME,PMODE);
  440.       LSEEK(FD,OL,2);
  441.   \) ELSE
  442.       FD=OPEN(NAME,0);
  443.   IF(FD==-1) /*COULDN'T ACCESS NAME*/
  444.       RETURN(NULL);
  445.   FP->_FD=FD;
  446.   FP->_CNT=0;
  447.   FP->_BASE=NULL;
  448.   FP->_FLAG &=(_READ \! _WRITE);
  449.   FP->_FLAG \!=(*MODE=='R') ? _READ : _WRITE;
  450.   RETURN(FP);
  451.   \)        
  452.                            - 175 -
  453.  
  454.      öπ¡¬µ¿∩ _FILEBUF ¡Ñ߬«½∞¬« í«½ÑÑ ß½«ª¡á∩. Äß¡«ó¡á∩ Γαπñ-
  455.  ¡«ßΓ∞ ºá¬½ετáÑΓß∩ ó Γ«¼, τΓ« _FILEBUF ßΓαѼ¿Γß∩ αáºαÑΦ¿Γ∞
  456.  ñ«ßΓπ» ¬ Σá⌐½π ¿ ó Γ«¼ ß½πτáÑ, ¬«úñá ¼«ªÑΓ ¡Ñ «¬áºáΓ∞ß∩ ñ«ß-
  457.  ΓáΓ«τ¡« ¼ÑßΓá ó »á¼∩Γ¿ ñ½∩ íπΣÑα¿ºáµ¿¿ óó«ñá ¿½¿ óδó«ñá. Ñß-
  458.  ½¿ »α«ßΓαá¡ßΓó« ñ½∩ ¡«ó«ú« íπΣÑαá ¼«ªÑΓ íδΓ∞ »«½πτÑ¡« «íαá-
  459.  ΘÑ¡¿Ñ¼ ¬ Σπ¡¬µ¿¿ CALLOC, Γ« óßÑ «Γ½¿τ¡«; Ñß½¿ ªÑ ¡ÑΓ, Γ«
  460.  _FILEBUF «ßπΘÑßΓó½∩ÑΓ ¡ÑíπΣÑਧ«óá¡¡δ⌐ óó«ñ/ óδó«ñ, ¿ß»«½∞-
  461.  ºπ∩ «Γñѽ∞¡δ⌐ ß¿¼ó«½, »«¼ÑΘÑ¡¡δ⌐ ó ½«¬á½∞¡«¼ ¼áßß¿óÑ.
  462.  
  463.    #INCLUDE  <STDIO.H>
  464.    _FILLBUF(FP) /*ALLOCATE AND FILL INPUT BUFFER*/
  465.    REGISTER FILE *FP;
  466.     (
  467.    STATIC CHAR SMALLBUF(NFILE);/*FOR UNBUFFERED 1/0*/
  468.     CHAR *CALLOC();
  469.   IF((FR->_FLAG&_READ)==0\!\!(FP->_FLAG&(EOF\!_ERR))\!=0
  470.      RETURN(EOF);
  471.   WHILE(FP->_BASE==NULL) /*FIND BUFFER SPACE*/
  472.      IF(FP->_FLAG & _UNBUF) /*UNBUFFERED*/
  473.     FP->_BASE=&SMALLBUF[FP->_FD];
  474.      ELSE IF((FP->_BASE=CALLOC(_BUFSIZE,1))==NULL)
  475.      FP->_FLAG \!=_UNBUF; /*CAN'T GET BIG BUF*/
  476.      ELSE
  477.      FP->_FLAG \!=_BIGBUF; /*GOT BIG ONE*/
  478.   FP->_PTR=FP->_BASE;
  479.   FP->_CNT=READ(FP->_FD, FP->_PTR,
  480.      FP->_FLAG & _UNBUF ? 1 : _BUFSIZE);
  481.   FF(--FP->_CNT<0) \(
  482.      IF(FP->_CNT== -1)
  483.      FP->_FLAG \! = _EOF;
  484.      ELSE
  485.      FP->_FLAG \! = _ ERR;
  486.      FP->_CNT = 0;
  487.      RETURN(EOF);
  488.       \)
  489.       RETURN(*FP->_PTR++ & 0377); /*MAKE CHAR POSITIVE*/
  490.    )
  491.  
  492.  Åα¿ »Ñαó«¼ «íαáΘÑ¡¿¿ ¬ GETC ñ½∩ ¬«¡¬αÑΓ¡«ú« Σá⌐½á ßτÑΓτ¿¬
  493.  «¬áºδóáÑΓß∩ αáó¡δ¼ ¡π½ε, τΓ« »α¿ó«ñ¿Γ ¬ «íαáΘÑ¡¿ε ¬
  494.  _FILEBUF. àß½¿ Σπ¡¬µ¿∩ _FILEBUF ¡á⌐ñÑΓ, τΓ« φëàΣá⌐½ ¡Ñ «Γ-
  495.  ¬αδΓ ñ½∩ τΓÑ¡¿∩, «¡á ¡Ñ¼Ññ½Ñ¡¡« ó«ºóαáΘáÑΓ EOF. é »α«Γ¿ó¡«¼
  496.  ß½πτáÑ «¡á »δΓáÑΓß∩ óδñѽ¿Γ∞ í«½∞Φ«⌐ íπΣÑα, á Ñß½¿ Ñ⌐ φΓ« ¡Ñ
  497.  πñáÑΓß∩, Γ« íπΣÑα ¿º «ñ¡«ú« ß¿¼ó«½á. Åα¿ φΓ«¼ «¡á ºá¡«ß¿Γ ó
  498.  _FLAG ß««ΓóÑΓßΓóπεΘπε ¿¡Σ«α¼áµ¿ε « íπΣÑα¿ºáµ¿¿.
  499.      ÉẠíπΣÑα πªÑ ß«ºñá¡, Σπ¡¬µ¿∩ _FILEBUF »α«ßΓ« óδºδóáÑΓ
  500.  Σπ¡¬µ¿ε READ ñ½∩ Ñú« ºá»«½¡Ñ¡¿∩, πßΓá¡áó½¿óáÑΓ ßτÑΓτ¿¬ ¿
  501.  π¬áºáΓѽ¿ ¿ ó«ºóαáΘáÑΓ ß¿¼ó«½ ¿º ¡áτá½á íπΣÑαá.
  502.      àñ¿¡ßΓóÑ¡¡δ⌐ «ßΓáóΦ¿⌐ß∩ ¡Ñóδ∩ߡѡ¡δ¼ ó«»α«ß ß«ßΓ«¿Γ ó
  503.  Γ«¼, ¬á¬ óßÑ ¡áτ¿¡áÑΓß∩. îáßß¿ó _IOB ñ«½ªÑ¡ íδΓ∞ «»αÑñѽѡ ¿
  504.  ¿¡¿µ¿á½¿º¿α«óá¡ ñ½∩ STDIN, STDOUT ¿ STDERR:
  505.             
  506.                            - 176 -
  507.      
  508.    FILE _IOB[NFILE] = \(
  509.   (NULL,0,_READ,0), /*STDIN*/
  510.   (NULL,0,NULL,1),  /*STDOUT*/
  511.   (NULL,0,NULL,_WRITE \! _UNBUF,2) /*STDERR*/
  512. );
  513.  
  514.  êº ¿¡¿µ¿á½¿ºáµ¿¿ τáßΓ¿ _FLAG φΓ«ú« ¼áßß¿óá ßΓαπ¬Γπα ó¿ñ¡«,
  515.  τΓ« Σá⌐½ STDIN »αÑñ¡áº¡áτÑ¡ ñ½∩ τΓÑ¡¿∩, Σá⌐½ STDOUT - ñ½∩
  516.  ºá»¿ß¿ ¿ Σá⌐½ STDERR - ñ½∩ ºá»¿ß¿ íѺ ¿ß»«½∞º«óá¡¿∩ íπΣÑαá.
  517.      ô»α᪡ѡ¿Ñ 8-3.
  518.      --------------
  519.      ÅÑαÑ»¿Φ¿ΓÑ Σπ¡¬µ¿¿ FOPEN ¿ _FILEBUF, ¿ß»«½∞ºπ∩ »«½∩
  520.  ó¼ÑßΓ« ∩ó¡δσ »«í¿Γ«óδσ «»Ñαᵿ⌐.
  521.      ô»α᪡ѡ¿Ñ 8-4.
  522.      ---------------
  523.      Éáºαáí«Γá⌐ΓÑ ¿ ¡á»¿Φ¿ΓÑ Σπ¡¬µ¿¿ _FLUSHBUF ¿ FCLOSE.
  524.      ô»α᪡ѡ¿Ñ 8-5.
  525.      ---------------
  526.      æΓá¡ñáαΓ¡á∩ í¿í½¿«ΓѬá ß«ñÑαª¿Γ Σπ¡¬µ¿ε
  527.  
  528.    FSEEK(FP, OFFSET, ORIGIN)
  529.  
  530.  ¬«Γ«αá∩ ¿ñÑ¡Γ¿τ¡á Σπ¡¬µ¿¿ LSEEK, ¿ß¬½ετá∩ Γ«, τΓ« FP ∩ó½∩ÑΓ-
  531.  ß∩ π¬áºáΓѽѼ Σá⌐½á, á ¡Ñ ñÑß¬α¿»Γ«α«¼ Σá⌐½á. ìá»¿Φ¿ΓÑ
  532.  FSEEK. ôíÑñ¿ΓÑß∞, τΓ« óáΦá FSEEK »αáó¿½∞¡« ß«ú½áßπÑΓß∩ ß íπ-
  533.  ΣÑα¿ºáµ¿Ñ⌐, ßñѽᡡ«⌐ ñ½∩ ñαπú¿σ Σπ¡¬µ¿⌐ í¿í½¿«ΓѬ¿.
  534.  
  535.      8.6. Åα¿¼Ñα - αáß»ÑτáΓ¬á ß»αáó«τ¡¿¬«ó
  536.      ê¡«úñá ΓαÑíπÑΓß∩ ñαπú«⌐ ó¿ñ óºá¿¼«ñÑ⌐ßΓó¿∩ ß ß¿ßΓѼ«⌐
  537.  Σá⌐½«ó - «»αÑñѽѡ¿Ñ ¿¡Σ«α¼áµ¿¿ « Σá⌐½Ñ, á ¡Ñ Γ«ú«, τΓ« ó
  538.  ¡Ñ¼ ß«ñÑনΓß∩. Åα¿¼Ñα«¼ ¼«ªÑΓ ß½πª¿Γ∞ ¬«¼á¡ñá LS ("ß»¿ß«¬
  539.  ß»αáó«τ¡¿¬á") ß¿ßΓѼδ UNIX. Å« φΓ«⌐ ¬«¼á¡ñÑ αáß»ÑτáΓδóáεΓß∩
  540.  ¿¼Ñ¡á Σá⌐½«ó ¿º ß»αáó«τ¡¿¬á ¿, ¡Ñ«í∩ºáΓѽ∞¡«, ñαπúá∩ ¿¡Σ«α-
  541.  ¼áµ¿∩, Γá¬á∩ ¬á¬ αẼÑαδ, αáºαÑΦÑ¡¿∩ ¿ Γ.ñ.
  542.      Å«ß¬«½∞¬π, »« ¬αá⌐¡Ñ⌐ ¼ÑαÑ, ¡á ß¿ßΓѼѠUNIX ß»αáó«τ¡¿¬
  543.  ∩ó½∩ÑΓß∩ »α«ßΓ« Σá⌐½«¼, Γ« ó Γᬫ⌐ ¬«¼á¡ñÑ, ¬á¬ LS ¡ÑΓ ¡¿τÑ-
  544.  ú« «ß«íÑ¡¡«ú«; «¡á τ¿ΓáÑΓ Σá⌐½ ¿ óδñѽ∩ÑΓ ¡πª¡δÑ τáßΓ¿ ¿º
  545.  ¡áσ«ñ∩ΘÑ⌐ß∩ Γá¼ ¿¡Σ«α¼áµ¿¿. Äñ¡á¬« Σ«α¼áΓ ¿¡Σ«α¼áµ¿¿ «»αÑñÑ-
  546.  ½∩ÑΓß∩ ß¿ßΓѼ«⌐, ΓᬠτΓ« LS ñ«½ª¡á º¡áΓ∞, ó ¬á¬«¼ ó¿ñÑ óßÑ
  547.  »αÑñßΓáó½∩ÑΓß∩ ó ß¿ßΓѼÑ.
  548.      îδ φΓ« τáßΓ¿τ¡« »α«¿½½εßΓα¿απѼ »α¿ ¡á»¿ßá¡¿¿ »α«úαá¼¼δ
  549.  FSIZE. Åα«úαá¼¼á FSIZE »αÑñßΓáó½∩ÑΓ ß«í«⌐ ß»Ñµ¿á½∞¡πε Σ«α¼π
  550.  LS, ¬«Γ«αá∩ »ÑτáΓáÑΓ αẼÑαδ óßÑσ Σá⌐½«ó, π¬áºá¡¡δσ ó ß»¿ß¬Ñ
  551.  ÑÑ áαúπ¼Ñ¡Γ«ó. àß½¿ «ñ¿¡ ¿º Σá⌐½«ó ∩ó½∩ÑΓß∩ ß»αáó«τ¡¿¬«¼, Γ«
  552.  ñ½∩ «íαáí«Γ¬¿ φΓ«ú« ß»αáó«τ¡¿¬á »α«úαá¼¼á FSIZE «íαáΘáÑΓß∩
  553.  ßá¼á ¬ ßÑíÑ αѬπαß¿ó¡«. Ñß½¿ ªÑ áαúπ¼Ñ¡Γδ ó««íΘÑ «ΓßπΓßΓóπ-
  554.  εΓ, Γ« «íαáíáΓδóáÑΓß∩ ΓѬπΘ¿⌐ ß»αáó«τ¡¿¬.
  555.      ä½∩ ¡áτá½á ñáñ¿¼ ¬αáΓ¬¿⌐ «íº«α ßΓαπ¬Γπαδ ß¿ßΓѼδ Σá⌐½«ó.
  556.  æ»αáó«τ¡¿¬ - φΓ« Σá⌐½, ¬«Γ«αδ⌐ ß«ñÑαª¿Γ ß»¿ß«¬ ¿¼Ñ¡ Σá⌐½«ó ¿
  557.  ¡Ñ¬«Γ«α«Ñ π¬áºá¡¿Ñ « Γ«¼, úñÑ «¡¿ αẼÑΘáεΓß∩. öá¬Γ¿τÑ߬¿
  558.  φΓ« π¬áºá¡¿Ñ ∩ó½∩ÑΓß∩ ¿¡ñѬ߫¼ ñ½∩ ñαπú«⌐ Γáí½¿µδ, ¬«Γ«απε
  559.  ¡áºδóáεΓ "I - πº½«ó«⌐ Γáí½¿µÑ⌐". ä½∩ Σá⌐½á I-πºÑ½ - φΓ« Γ«,
  560.      
  561.                            - 177 -
  562.      
  563.  úñÑ ß«ñÑনΓß∩ óß∩ ¿¡Σ«α¼áµ¿∩ « Σá⌐½Ñ, ºá ¿ß¬½ετÑ¡¿Ñ¼ Ñú«
  564.  ¿¼Ñ¡¿. çỿß∞ ó ß»αáó«τ¡¿¬Ñ ß«ßΓ«¿Γ Γ«½∞¬« ¿º ñóπσ φ½Ñ¼Ñ¡-
  565.  Γ«ó: ¡«¼Ñαá I-πº½á ¿ ¿¼Ñ¡¿ Σá⌐½á. Æ«τ¡á∩ ß»Ñµ¿Σ¿¬áµ¿∩ »«ßΓπ-
  566.  »áÑΓ »α¿ ó¬½ετÑ¡¿¿ Σá⌐½á SYS/DIR.H, ¬«Γ«αδ⌐ ß«ñÑনΓ
  567.  
  568.    #DEFINE DIRSIZ 14 /*MAX LENGTH OF FILE NAME*/
  569.    STRUCT DIRECT /*STRUCTURE OF DIRECTORY ENTRY*/
  570.    \(
  571.   INO_T&_INO; /*INODE NUMBER*/
  572.   CHAR &_NAME[DIRSIZ]; /*FILE NAME*/
  573.    \);
  574.  
  575.      "Æ¿»" INO_T - φΓ« «»αÑñѽ∩Ѽδ⌐ »«ßαÑñßΓó«¼ TYPEDEF Γ¿»,
  576.  ¬«Γ«αδ⌐ «»¿ßδóáÑΓ ¿¡ñѬߠI-πº½«ó«⌐ Γáí½¿µδ. ìá PDP-11 UNIX
  577.  φΓ¿¼ Γ¿»«¼ «¬áºδóáÑΓß∩ UNSIGNED, ¡« φΓ« ¡Ñ Γ«Γ ß«αΓ ¿¡Σ«α¼á-
  578.  µ¿¿, ¬«Γ«αδ⌐ »«¼ÑΘáεΓ ó¡πΓα∞ »α«úαá¼¼δ: ¡á αạδσ ß¿ßΓѼáσ
  579.  φΓ«Γ Γ¿» ¼«ªÑΓ íδΓ∞ αẽ¿τ¡δ¼. Å«φΓ«¼π ¿ ß½ÑñπÑΓ ¿ß»«½∞º«-
  580.  óáΓ∞ TYPEDEF. Å«½¡δ⌐ ¡áí«α "ß¿ßΓѼ¡δσ" Γ¿»«ó ¡áσ«ñ¿Γß∩ ó
  581.  Σá⌐½Ñ SYS/TUPES.H.
  582.      öπ¡¬µ¿∩ STAT íÑαÑΓ ¿¼∩ Σá⌐½á ¿ ó«ºóαáΘáÑΓ óßε ß«ñÑαªáΘπ-
  583.  εß∩ ó I-«¼ πº½Ñ ¿¡Σ«α¼áµ¿ε «í φΓ«¼ Σá⌐½Ñ (¿½¿ -1, Ñß½¿ ¿¼Ñ-
  584.  ÑΓß∩ «Φ¿í¬á). Æá¬¿¼ «íαẫ¼, ó αѺπ½∞ΓáΓÑ
  585.  
  586.    STRUCT STAT STBUF;
  587.    CHAR *NAME;
  588.    STAT(NAME,&STBUF);
  589.  
  590.  ßΓαπ¬Γπαá STBUF ¡á»«½¡∩ÑΓß∩ ¿¡Σ«α¼áµ¿Ñ⌐ ¿º I-ú« πº½á « Σá⌐½Ñ
  591.  ß ¿¼Ñ¡Ñ¼ NAME. æΓαπ¬Γπαá, «»¿ßδóáεΘá∩ ó«ºóαáΘáѼπε Σπ¡¬µ¿Ñ⌐
  592.  STAT ¿¡Σ«α¼áµ¿ε, ¡áσ«ñ¿Γß∩ ó Σá⌐½Ñ SYS/STAT.H ¿ óδú½∩ñ¿Γ
  593.  ß½ÑñπεΘ¿¼ «íαẫ¼:
  594.  
  595.    STRUCT STAT /*STRUCTURE RETURNED BY STAT*/
  596.    \(
  597.      DEV_T ST_DEV;   /* DEVICE OF INODE */
  598.      INO_T ST_INO;   /* INODE NUMBER */
  599.      SHORT ST_MODE   /* MODE BITS */
  600.      SHORT ST_NLINK; / *NUMBER OF LINKS TO FILE */
  601.      SHORT ST_UID;   /* OWNER'S USER ID */
  602.      SHORT ST_GID;   /* OWNER'S GROUP ID */
  603.      DEV_T ST_RDEV;  /* FOR SPECIAL FILES */
  604.      OFF_T ST_SIZE;  /* FILE SIZE IN CHARACTERS */
  605.      TIME_T ST_ATIME; /* TIME LAST ACCESSED */
  606.      TIME_T ST_MTIME; /* TIME LAST MODIFIED */
  607.      TIME_T ST_CTIME; /* TIME ORIGINALLY CREATED */
  608.    \)
  609.  
  610.  ü«½∞Φá∩ τáßΓ∞ φΓ«⌐ ¿¡Σ«α¼áµ¿¿ «íΩ∩ß¡∩ÑΓß∩ ó ¬«¼¼Ñ¡Γáα¿∩σ.
  611.  ¥½Ñ¼Ñ¡Γ ST.MODE ß«ñÑαª¿Γ ¡áí«α Σ½áú«ó, «»¿ßδóáεΘ¿σ Σá⌐½; ñ½∩
  612.  πñ«íßΓóá «»αÑñѽѡ¿∩ Σ½áú«ó ΓᬪѠ¡áσ«ñ∩Γß∩ ó Σá⌐½Ñ
  613.  SYS/STAT.H.
  614.      
  615.                            - 178 -
  616.      
  617.  
  618.   #DEFINE S_IFMT    0160000 /* TYPE OF FILE */
  619.   #DEFINE S_IFDIR   0040000 /* DIRECTORY */
  620.   #DEFINE S_IFCHR   0020000 /* CHARACTER SPECIAL */
  621.   #DEFINE S_IFBLK   0060000 /* BLOCK SPECIAL */
  622.   #DEFINE S_IFREG   0100000 /* REGULAR */
  623.   #DEFINE S_ISUID   04000   /* SET USER ID ON EXECUTION */
  624.   #DEFINE S_ISGID   02000   /* SET GROUP ID ON EXECUTION */
  625.   #DEFINE S_ISVTX   01000   /*SAVE SWAPPED TEXT AFTER USE*/
  626.   #DEFINE S_IREAD   0400    /* READ PERMISSION */
  627.   #DEFINE S_IWRITE  0200    /* WRITE PERMISSION */
  628.   #DEFINE S_IEXEC   0100    /* EXECUTE PERMISSION */
  629.  
  630.      ÆÑ»Ñα∞ ¼δ ó ß«ßΓ«∩¡¿¿ ¡á»¿ßáΓ∞ »α«úαá¼¼π FSIZE. àß½¿ »«-
  631.  ½πτÑ¡¡δ⌐ «Γ Σπ¡¬µ¿¿ STAT αѪ¿¼ π¬áºδóáÑΓ, τΓ« Σá⌐½ ¡Ñ ∩ó½∩-
  632.  ÑΓß∩ ß»αáó«τ¡¿¬«¼, Γ« Ñú« αẼÑα πªÑ »«ñ απ¬«⌐ ¿ ¼«ªÑΓ íδΓ∞
  633.  ¡á»ÑτáΓá¡ ¡Ñ»«ßαÑñßΓóÑ¡¡«. àß½¿ ªÑ «¡ «¬áºδóáÑΓß∩ ß»αáó«τ¡¿-
  634.  ¬«¼, Γ« ¼δ ñ«½ª¡δ «íαáíáΓδóáΓ∞ φΓ«Γ ß»αáó«τ¡¿¬ «Γñѽ∞¡« ñ½∩
  635.  ¬áªñ«ú« Σá⌐½á; Γᬠ¬á¬ ß»αáó«τ¡¿¬ ¼«ªÑΓ ó ßó«ε «τÑαÑñ∞ ß«-
  636.  ñÑαªáΓ∞ »«ñß»αáó«τ¡¿¬¿, φëà»α«µÑßß «íαáí«Γ¬¿ ∩ó½∩ÑΓß∩ αÑ-
  637.  ¬παß¿ó¡δ¼.
  638.      èᬠ«íδτ¡«, óÑñπΘá∩ »α«úαá¼¼á ú½áó¡δ¼ «íαẫ¼ ¿¼ÑÑΓ ñѽ«
  639.  ß ¬«¼á¡ñ¡«⌐ ßΓ᫬«⌐ áαúπ¼Ñ¡Γ«ó; «¡á »ÑαÑñáÑΓ ¬áªñδ⌐ áαúπ¼Ñ¡Γ
  640.  Σπ¡¬µ¿¿ FSIZE ó í«½∞Φ«⌐ íπΣÑα.
  641.  
  642. #INCLUDE <STDIO.H.>
  643. #INCLUDE <SYS/TYPES.H> /*TYPEDEFS*/
  644. #INCLUDE <SYS/DIR.H>   /*DIRECTORY ENTRY STRUCTURE*/
  645. #INCLUDE <SYS/STAT.H>  /*STRUCTURE RETURNED BY STAT*/
  646. #DEFINE BUFSIZE  256
  647. MAIN(ARGC,ARGV) /*FSIZE:PRINT FILE SIZES*/
  648. CHAR *ARGV[];
  649. \(
  650.    CHAR BUF[BUFSIZE];
  651.    IF(ARGC==1) \( /*DEFAULT:CURRENT DIRECTORY*/
  652.   ATRCPY(BUF,".");
  653.   FSIZE(BUF);
  654.    \) ELSE
  655.   WHILE(--ARGC>0) \(
  656.      STRCPY(BUF,*++ARGV);
  657.      FSIZE(BUF);
  658.   \)
  659. \)
  660.  
  661.      öπ¡¬µ¿∩ FSIZE »ÑτáΓáÑΓ αẼÑα Σá⌐½á. àß½¿ «ñ¡á¬« Σá⌐½
  662.  «¬áºδóáÑΓß∩ ß»αáó«τ¡¿¬«¼, Γ« FSIZE ß¡áτá½á óδºδóáÑΓ Σπ¡¬µ¿ε
  663.  DIRECTORY ñ½∩ «íαáí«Γ¬¿ óßÑσ π¬áºá¡¡δσ ó ¡Ñ¼ Σá⌐½«ó. ÄíαáΓ¿-
  664.  ΓѠ󡿼᡿Ѡ¡á ¿ß»«½∞º«óá¡¿Ñ ¿¼Ñ¡ Σ½áú«ó S_IFMT ¿ _IFDIR ¿º
  665.  Σá⌐½á STAT.H.
  666.      
  667.                            - 179 -
  668.  
  669.   FSIZE(NAME) /*PRINT SIZE FOR NAME*/
  670.   CHAR *NAME;
  671.   \(
  672.       STRUCT STAT STBUF;
  673.       IF(STAT(NAME,&STBUF)== -1) \(
  674.   FPRINTF(STDERR,"FSIZE:CAN'T FIND %S\N",NAME);
  675.   RETURN;
  676.   \)
  677.   IF((STBUF.ST_MODE & S_IFMT)==S_IFDIR)
  678.         DIRECTORY(NAME);
  679.   PRINTF("%8LD %S\N",STBUF.ST_SIZE,NAME);
  680. \)
  681.      öπ¡¬µ¿∩ DIRECTORY ∩ó½∩ÑΓß∩ ßἫ⌐ ß½«ª¡«⌐. Äñ¡á¬« º¡áτ¿-
  682.  Γѽ∞¡á∩ ÑÑ τáßΓ∞ ßó∩ºá¡á ß ß«ºñ᡿Ѽ ñ½∩ «íαáíáΓδóáѼ«ú« ó
  683.  ñá¡¡δ⌐ ¼«¼Ñ¡Γ Σá⌐½á Ñú« »«½¡«ú« ¿¼Ñ¡¿, »« ¬«Γ«α«¼π ¼«ª¡«
  684.  ó«ßßΓá¡«ó¿Γ∞ »πΓ∞ ó ñÑαÑóÑ.
  685.  
  686.   DIRECTORY(NAME)    /*FSIZE FOR ALL FILES IN NAME*/
  687.   CHAR *NAME;
  688.    (
  689.      STRUCT DIRECT DIRBUF;
  690.      CHAR *NBP, *NEP;
  691.      INT I, FD;
  692.      NBP=NAME+STRLEN(NAME);
  693.      *NBP++='/'; /*ADD SLASH TO DIRECTORY NAME*/
  694.      IF(NBP+DIRSIZ+2>=NAME+BUFSIZE) /*NAME TOO LONG*/
  695.     RETURN;
  696.      IF((FD=OPEN(NAME,0))== -1)
  697.     RETURN;
  698.      WHILE(READ(FD,(CHAR *)&DIRBUF,SIZEOF(DIRBUF))>0) \(
  699.     IF(DIRBUF.D_INO==0) /*SLOT NOT IN USE*/
  700.     CONTINUE;
  701.     IF(STRCMP (DIRBUF.D_NAME,".")==0
  702.     \!\! STRCMP(DIRBUF.D_NAME,"..")==0
  703.     CONTINUE; /*SKIP SELF AND PARENT*/
  704.     FOR (I=0,NEP=NBP;I<DIRSIZ;I++)
  705.     *NEP++=DIRBUF.D_NAME[I];
  706.     *NEP++='\0';
  707.     FSIZE(NAME);
  708.      \)
  709.      CLOSE(FD);
  710.      *--NBP='\0'; /*RESTORE NAME*/
  711.    )
  712.  
  713.      àß½¿ ¡Ñ¬«Γ«αá∩ ñδαá ó ß»αáó«τ¡¿¬Ñ ó ¡áßΓ«∩ΘÑÑ óαѼ∩ ¡Ñ
  714.  ¿ß»«½∞ºπÑΓß∩ (»«Γ«¼π τΓ« Σá⌐½ íδ½ πñá½Ñ¡), Γ« ó ß««ΓóÑΓßΓóπ-
  715.  εΘÑÑ I-πº½«ó«Ñ τ¿ß½« αáó¡« ¡π½ε, ¿ φΓá »«º¿µ¿∩ »α«»π߬áÑΓß∩.
  716.  èáªñδ⌐ ß»αáó«τ¡¿¬ ΓᬪѠ߫ñÑαª¿Γ ºá»¿ß∞ ó ßἫ¼ ßÑíÑ, ¡áºδ-
  717.  óáѼπε ".", ¿ « ßó«Ñ¼ α«ñ¿ΓѽÑ, ".."; «¡¿, «τÑó¿ñ¡«, ΓᬪÑ
  718.  ñ«½ª¡δ íδΓ∞ »α«»πΘÑ¡δ, á Γ« »α«úαá¼¼á íπñÑΓ αáí«ΓáΓ∞ óÑß∞¼á
  719.  ¿ óÑß∞¼á ñ«½ú«.
  720.             
  721.                            - 180 -
  722.      
  723.      ò«Γ∩ »α«úαá¼¼á FSIZE ñ«ó«½∞¡« ß»Ñµ¿á½¿º¿α«óá¡¡á, «¡á óßÑ
  724.  ªÑ ñѼ«¡ßΓα¿απÑΓ »áαπ ó᪡δσ ¿ñÑ⌐. ó«-»Ñαóδσ, ¼¡«ú¿Ñ »α«ú-
  725.  αá¼¼δ ¡Ñ ∩ó½∩εΓß∩ "ß¿ßΓѼ¡δ¼¿ »α«úαἼἿ"; «¡¿ Γ«½∞¬« ¿ß-
  726.  »«½∞ºπεΓ ¿¡Σ«α¼áµ¿ε, Σ«α¼á ¿½¿ ß«ñÑαªá¡¿Ñ ¬«Γ«α«⌐ «»αÑñѽ∩-
  727.  ÑΓß∩ «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼ«⌐. é«-óΓ«αδσ, ñ½∩ Γᬿσ »α«úαá¼¼
  728.  ßπΘÑßΓóÑ¡¡«, τΓ« »αÑñßΓáó½Ñ¡¿Ñ φΓ«⌐ ¿¡Σ«α¼áµ¿¿ óσ«ñ¿Γ Γ«½∞¬«
  729.  ó ßΓá¡ñáαΓ¡δÑ "ºáú«½«ó«τ¡δÑ Σá⌐½δ", ΓᬿѠ¬á¬ STAT.H ¿
  730.  DIR.H, ¿ τΓ« »α«úαá¼¼δ ó¬½ετáεΓ φΓ¿ Σá⌐½δ, á ¡Ñ »«¼ÑΘáεΓ
  731.  Σá¬Γ¿τÑ߬¿Ñ «»¿ßá¡¿∩ ó¡πΓα∞ ßἿσ »α«úαá¼¼.
  732.  
  733.      8.7. Åα¿¼Ñα - αáß»αÑñѽ¿Γѽ∞ »á¼∩Γ¿.
  734.      é ú½áóÑ 5 ¼δ ¡á»¿ß὿ íÑßσ¿Γα«ßΓ¡δ⌐ óáα¿á¡Γ Σπ¡¬µ¿¿
  735.  ALLOC. éáα¿á¡Γ, ¬«Γ«αδ⌐ ¼δ ¡á»¿ΦѼ ΓÑ»Ñα∞, ¡Ñ ß«ñÑαª¿Γ «úαá-
  736.  ¡¿τÑ¡¿⌐: «íαáΘÑ¡¿∩ ¬ Σπ¡¬µ¿∩¼ ALLOC ¿ FREE ¼«úπΓ »ÑαѼѪáΓ∞-
  737.  ß∩ ó ½εí«¼ »«α∩ñ¬Ñ; ¬«úñá φΓ« ¡Ñ«íσ«ñ¿¼«, Σπ¡¬µ¿∩ ALLOC «í-
  738.  αáΘáÑΓß∩ ¬ «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼѠºá ñ«»«½¡¿Γѽ∞¡«⌐ »á¼∩Γ∞ε.
  739.  èα«¼Ñ Γ«ú«, τΓ« φΓ¿ »α«µÑñπαδ »«½Ñº¡δ ßἿ »« ßÑíÑ, «¡¿ Γá¬-
  740.  ªÑ ¿½½εßΓα¿απεΓ ¡Ñ¬«Γ«αδÑ ß««íαáªÑ¡¿∩, ßó∩ºá¡¡δÑ ß ¡á»¿ßá¡¿-
  741.  Ñ¼ ¼áΦ¿¡¡«-ºáó¿ß¿¼δσ »α«úαá¼¼ «Γ¡«ß¿Γѽ∞¡« ¼áΦ¿¡¡«-¡Ñºáó¿ß¿-
  742.  ¼δ¼ «íαẫ¼, ¿ »«¬áºδóáεΓ »αá¬Γ¿τÑ߬«Ñ »α¿¼Ñ¡Ñ¡¿Ñ ßΓαπ¬Γπα,
  743.  «íΩÑñ¿¡Ñ¡¿⌐ ¿ ¬«¡ßΓαπ¬µ¿⌐ TYPEDEF.
  744.      é¼ÑßΓ« Γ«ú«, τΓ«íδ óδñѽ∩Γ∞ »á¼∩Γ∞ ¿º ß¬«¼»¿½¿α«óá¡¡«ú«
  745.  ó¡πΓα¿ ¼áßß¿óá Σ¿¬ß¿α«óá¡¡«ú« αẼÑαá, Σπ¡¬µ¿∩ ALLOC íπñÑΓ
  746.  »« ¼ÑαÑ ¡Ñ«íσ«ñ¿¼«ßΓ¿ «íαáΘáΓ∞ß∩ ºá »á¼∩Γ∞ε ¬ «»Ñαᵿ«¡¡«⌐
  747.  ß¿ßΓѼÑ. Å«ß¬«½∞¬π αẽ¿τ¡δÑ ß«íδΓ¿∩ ó »α«úαἼѠ¼«úπΓ ΓαÑ-
  748.  í«óáΓ∞ áß¿¡σα«¡¡«ú« óδñѽѡ¿∩ »á¼∩Γ¿, Γ« »á¼∩Γ∞, π»αáó½∩Ѽá∩
  749.  ALLOC, ¡Ñ ¼«ªÑΓ íδΓ∞ ¡Ñ»αÑαδó¡«⌐. é ß¿½π φΓ«ú« ßó«í«ñ¡á∩ »á-
  750.  ¼∩Γ∞ σαá¡¿Γß∩ ó ó¿ñÑ µÑ»«τ¬¿ ßó«í«ñ¡δσ í½«¬«ó. èáªñδ⌐ í½«¬
  751.  ó¬½ετáÑΓ αẼÑα, π¬áºáΓѽ∞ ß½ÑñπεΘÑú« í½«¬á ¿ ßá¼π ßó«í«ñ¡πε
  752.  »á¼∩Γ∞. ü½«¬¿ π»«α∩ñ«τ¿óáεΓß∩ ó »«α∩ñ¬Ñ ó«ºαáßΓá¡¿∩ áñαÑß«ó
  753.  »á¼∩Γ¿, »α¿τѼ »«ß½Ññ¡¿⌐ í½«¬ (ß ¡á¿í«½∞Φ¿¼ áñαÑß«¼) π¬áºδ-
  754.  óáÑΓ ¡á »Ñαóδ⌐, ΓᬠτΓ« µÑ»«τ¬á Σá¬Γ¿τÑ߬¿ «¬áºδóáÑΓß∩ ¬«½∞-
  755.  µ«¼.
  756.      Åα¿ »«ßΓπ»½Ñ¡¿¿ ºá»α«ßá ß»¿ß«¬ ßó«í«ñ¡δσ í½«¬«ó »α«ß¼áΓ-
  757.  α¿óáÑΓß∩ ñ« ΓÑσ »«α, »«¬á ¡Ñ íπñÑΓ ¡á⌐ñÑ¡ ñ«ßΓáΓ«τ¡« í«½∞Φ«⌐
  758.  í½«¬. àß½¿ φΓ«Γ í½«¬ ¿¼ÑÑΓ ó Γ«τ¡«ßΓ¿ ΓαÑíπѼδ⌐ αẼÑα, Γ«
  759.  «¡ «ΓµÑ»½∩ÑΓß∩ «Γ ß»¿ß¬á ¿ »ÑαÑñáÑΓß∩ »«½∞º«óáΓѽε. àß½¿ ªÑ
  760.  φΓ«Γ í½«¬ ß½¿Φ¬«¼ óѽ¿¬, Γ« «¡ αáºñѽ∩ÑΓß∩, ¡πª¡«Ñ ¬«½¿τÑßΓ-
  761.  ó« »ÑαÑñáÑΓß∩ »«½∞º«óáΓѽε, á «ßΓáΓ«¬ ó«ºóαáΘáÑΓß∩ ó ßó«í«ñ-
  762.  ¡δ⌐ ß»¿ß«¬. àß½¿ ñ«ßΓáΓ«τ¡« í«½∞Φ«ú« í½«¬á ¡á⌐Γ¿ ¡Ñ πñáÑΓß∩,
  763.  Γ« «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼ«⌐ óδñѽ∩ÑΓß∩ ¡«óδ⌐ í½«¬, ¬«Γ«αδ⌐
  764.  ó¬½ετáÑΓß∩ ó ß»¿ß«¬ ßó«í«ñ¡δσ í½«¬«ó; ºáΓѼ »«¿ß¬ ó«º«í¡«ó-
  765.  ½∩ÑΓß∩.
  766.      Äßó«í«ªñÑ¡¿Ñ »á¼∩Γ¿ ΓᬪѠó½ÑτÑΓ ºá ß«í«⌐ »α«ß¼«Γα ßó«-
  767.  í«ñ¡«ú« ß»¿ß¬á ó »«¿ß¬Ñ »«ñσ«ñ∩ΘÑú« ¼ÑßΓá ñ½∩ óóÑñÑ¡¿∩ «ßó«-
  768.  í«ªñÑ¡¡«ú« í½«¬á. àß½¿ φëà«ßó«í«ñ¿óΦ¿⌐ß∩ í½«¬ ß ¬á¬«⌐-½¿í«
  769.  ßΓ«α«¡δ »α¿¼δ¬áÑΓ ¬ í½«¬π ¿º ß»¿ß¬á ßó«í«ñ¡δσ í½«¬«ó, Γ« «¡¿
  770.  «íΩÑñ¿¡∩εΓß∩ ó «ñ¿¡ í½«¬ í«½∞ΦÑú« αẼÑαá, ΓᬠτΓ« »á¼∩Γ∞ ¡Ñ
  771.  ßΓá¡«ó¿Γß∩ ß½¿Φ¬«¼ αáºñα«í½Ñ¡¡«⌐. Äí¡áαπª¿Γ∞ ß¼Ñª¡δÑ í½«¬¿
  772.  »α«ßΓ«, »«Γ«¼π τΓ« ßó«í«ñ¡δ⌐ ß»¿ß«¬ ß«ñÑনΓß∩ ó »«α∩ñ¬Ñ
  773.  ó«ºαáßΓá¡¿∩ áñαÑß«ó.
  774.      
  775.                            - 181 -
  776.      
  777.      Äñ¡á ¿º »α«í½Ñ¼, « ¬«Γ«α«⌐ ¼δ π»«¼¿¡á½¿ ó ú½áóÑ 5, ºá¬-
  778.  ½ετáÑΓß∩ ó «íÑß»ÑτÑ¡¿¿ Γ«ú«, τΓ«íδ ó«ºóαáΘáѼá∩ Σπ¡¬µ¿Ñ⌐
  779.  ALLOC »á¼∩Γ∞ íδ½á óδα«ó¡Ñ¡á »«ñσ«ñ∩Θ¿¼ «íαẫ¼ ñ½∩ ΓÑσ
  780.  «íΩÑ¬Γ«ó, ¬«Γ«αδÑ íπñπΓ ó ¡Ñ⌐ σαá¡¿Γ∞ß∩. ò«Γ∩ ¼áΦ¿¡δ ¿ αáº-
  781.  ½¿τáεΓß∩, ñ½∩ ¬áªñ«⌐ ¼áΦ¿¡δ ßπΘÑßΓóπÑΓ Γ¿», ΓαÑíπεΘ¿⌐ ¡á¿-
  782.  í«½∞Φ¿σ «úαá¡¿τÑ¡¿⌐ »« αẼÑΘÑ¡¿ε »á¼∩Γ¿, Ñß½¿ ñá¡¡δÑ ßἫú«
  783.  «úαá¡¿τ¿Γѽ∞¡«ú« Γ¿»á ¼«ª¡« »«¼ÑßΓ¿Γ∞ ó ¡Ñ¬«Γ«αδ⌐ «»αÑñѽѡ-
  784.  ¡δ⌐ áñαÑß, Γ« φΓ« ªÑ ó«º¼«ª¡« ¿ ñ½∩ óßÑσ «ßΓá½∞¡δσ Γ¿»«ó.
  785.  ìá»α¿¼Ñα, ¡á IBM 360/370,HONEYWELL 6000 ¿ ¼¡«ú¿σ ñαπú¿σ ¼á-
  786.  Φ¿¡áσ ½εí«⌐ «íΩÑ¬Γ ¼«ªÑΓ σαá¡¿Γ∞ß∩ ó úαá¡¿µáσ, ß««ΓóÑΓßΓóπε-
  787.  Θ¿¼ »ÑαѼѡ¡δ¼ Γ¿»á DOUBLE; ¡á PDP-11 íπñπΓ ñ«ßΓáΓ«τ¡δ »ÑαÑ-
  788.  ¼Ñ¡¡δÑ Γ¿»á INT.
  789.      æó«í«ñ¡δ⌐ í½«¬ ß«ñÑαª¿Γ π¬áºáΓѽ∞ ß½ÑñπεΘÑú« í½«¬á ó µÑ-
  790.  »«τ¬Ñ, ºá»¿ß∞ « αẼÑαÑ í½«¬á ¿ ßἫ ßó«í«ñ¡«Ñ »α«ßΓαá¡ßΓó«;
  791.  π»αáó½∩εΘá∩ ¿¡Σ«α¼áµ¿∩ ó ¡áτá½Ñ ¡áºδóáÑΓß∩ ºáú«½«ó¬«¼. ä½∩
  792.  π»α«ΘÑ¡¿∩ óδαáó¡¿óá¡¿∩ óßÑ í½«¬¿ ¬αáΓ¡δ αẼÑαπ ºáú«½«ó¬á, á
  793.  ßá¼ ºáú«½«ó«¬ óδα«ó¡Ñ¡ ¡áñ½ÑªáΘ¿¼ «íαẫ¼. ¥Γ« ñ«ßΓ¿úáÑΓß∩ ß
  794.  »«¼«Θ∞ε «íΩÑñ¿¡Ñ¡¿∩, ¬«Γ«α«Ñ ß«ñÑαª¿Γ ªÑ½áѼπε ßΓαπ¬Γπαπ ºá-
  795.  ú«½«ó¬á ¿ «íαáºÑµ ¡á¿í«½ÑÑ «úαá¡¿τ¿Γѽ∞¡«ú« »« óδαáó¡¿óá¡¿ε
  796.  Γ¿»á:
  797.  
  798.  TYPEDEF INT ALIGN; /*FORCES ALIGNMENT ON PDP-11*/
  799.  UNION HEADER \( /*FREE BLOCK HEADER*/
  800.     STRUCT \(
  801.     UNION HEADER *PTR; /*NEXT FREE BLOCK*/
  802.     UNSIGNED SIZE; /*SIZE OF THIS FREE BLOCK*/
  803.     \) S;
  804.     ALIGN  X; /*FORCE ALIGNMENT OF BLOCKS*/
  805.  \);
  806.  TYPEDEF UNION HEADER HEADER;
  807.  
  808.      öπ¡¬µ¿∩ ALLOC «¬απú½∩ÑΓ ΓαÑíπѼδ⌐ αẼÑα ó ß¿¼ó«½áσ ñ«
  809.  ¡πª¡«ú« τ¿ß½á Ññ¿¡¿µ αẼÑαá ºáú«½«ó¬á; Σá¬Γ¿τÑ߬¿⌐ í½«¬,
  810.  ¬«Γ«αδ⌐ íπñÑΓ óδñѽѡ, ß«ñÑαª¿Γ ¡á «ñ¡π Ññ¿¡¿µπ í«½∞ΦÑ,
  811.  »αÑñ¡áº¡áτáѼπε ñ½∩ ßἫú« ºáú«½«ó¬á, ¿ φΓ« ¿ ÑßΓ∞ º¡áτÑ¡¿Ñ,
  812.  ¬«Γ«α«Ñ ºá»¿ßδóáÑΓß∩ ó »«½Ñ SIZE ºáú«½«ó¬á. ô¬áºáΓѽ∞, ó«ºó-
  813.  αáΘáѼδ⌐ Σπ¡¬µ¿Ñ⌐ ALLOC, π¬áºδóáÑΓ ¡á ßó«í«ñ¡«Ñ »α«ßΓαá¡ßΓ-
  814.  ó«, á ¡Ñ ¡á ßá¼ ºáú«½«ó«¬.
  815.  
  816.  STATIC HEADER BASE; /*EMPTY LIST TO GET STARTED*/
  817.  STATIC HEADER *ALLOCP=NULL; /*LAST ALLOCATED BLOCK*/
  818.  CHAR *ALLOC(NBYTES)/*GENERAL-PURPOSE STORAGE ALLOCATOR*/
  819.  UNSIGNED NBYTES;
  820.  \(
  821.     HEADER *MORECORE();
  822.     REGISTER HEADER *P, *G;
  823.     REGISTER INT NUNITS;
  824.     NUNITS=1+(NBYTES+SIZEOF(HEADER)-1)/SIZEOF(HEADER);
  825.     IF ((G=ALLOCP)==NULL) \( /*NO FREE LIST YET*/
  826.  BASE.S PTR=ALLOCP=G=&BASE;
  827.  BASE.S.SIZE=0;
  828.     \)
  829.      
  830.                            - 182 -
  831.      
  832.     FOR (P=G>S.PTR; ; G=P, P=P->S.PTR) \(
  833.  IF (P->S.SIZE>=NUNITS) \( /*BIG ENOUGH*/
  834.      IF (P->S.SIZE==NUNITS) /*EXACTLY*/
  835.     G->S.PTR=P->S.PTR;
  836.      ELSE \( /*ALLOCATE TAIL END*/
  837.     P->S.SIZE-=NUNITS;
  838.     P+=P->S.SIZE;
  839.     P->S.SIZE=NUNITS;
  840.      \)
  841.      ALLOCP=G;
  842.      RETURN((CHAR *)(P+1));
  843.   \)
  844.   IF(P==ALLOCP) /*WRAPPED AROUND FREE LIST*/
  845.       IF((P=MORECORE(NUNITS))==NULL)
  846.      RETURN(NULL); /*NONE LEFT*/
  847.   \)
  848.      \)
  849.  
  850.      ÅÑαѼѡ¡á∩ BASE ¿ß»«½∞ºπÑΓß∩ ñ½∩ ¡áτá½á αáí«Γδ. àß½¿
  851.  ALLOCP ¿¼ÑÑΓ º¡áτÑ¡¿Ñ NULL, ¬á¬ ó ß½πτáÑ »Ñαó«ú« «íαáΘÑ¡¿∩ ¬
  852.  ALLOC, Γ« ß«ºñáÑΓß∩ óδ᫪ñÑ¡¡δ⌐ ßó«í«ñ¡δ⌐ ß»¿ß«¬: «¡ ß«ßΓ«¿Γ
  853.  ¿º ßó«í«ñ¡«ú« í½«¬á αẼÑαá ¡π½∞ ¿ π¬áºáΓѽ∩ ¡á ßἫú« ßÑí∩.
  854.  é ½εí«¼ ß½πτáÑ ºáΓѼ ¿ßß½ÑñπÑΓß∩ ßó«í«ñ¡δ⌐ ß»¿ß«¬. Å«¿ß¬
  855.  ßó«í«ñ¡«ú« í½«¬á »«ñσ«ñ∩ΘÑú« αẼÑαá ¡áτ¿¡áÑΓß∩ ß Γ«ú« ¼ÑßΓá
  856.  (ALLOCP), úñÑ íδ½ ¡á⌐ñÑ¡ »«ß½Ññ¡¿⌐ í½«¬; Γá¬á∩ ßΓαáΓÑú¿∩ »«-
  857.  ¼«úáÑΓ ß«σαá¡¿Γ∞ «ñ¡«α«ñ¡«ßΓ∞ ñ¿ß¬á. àß½¿ ¡á⌐ñÑ¡ ß½¿Φ¬«¼
  858.  í«½∞Φ«⌐ í½«¬, Γ« »«½∞º«óáΓÑ½ε »αÑñ½áúáÑΓß∩ Ñú« σó«ßΓ«óá∩
  859.  τáßΓ∞; φΓ« »α¿ó«ñ¿Γ ¬ Γ«¼π, τΓ« ó ºáú«½«ó¬Ñ ¿ßσ«ñ¡«ú« í½«¬á
  860.  ¡πª¡« ¿º¼Ñ¡¿Γ∞ Γ«½∞¬« Ñú« αẼÑα. é« óßÑσ ß½πτá∩σ ó«ºóαáΘáÑ-
  861.  ¼δ⌐ »«½∞º«óáΓѽε π¬áºáΓѽ∞ π¬áºδóáÑΓ ¡á ñÑ⌐ßΓó¿Γѽ∞¡« ßó«-
  862.  í«ñ¡πε «í½áßΓ∞, ½ÑªáΘπε ¡á Ññ¿¡¿µπ ñá½∞ΦÑ ºáú«½«ó¬á. ÄíαáΓ¿-
  863.  ΓѠ󡿼᡿Ѡ¡á Γ«, τΓ« Σπ¡¬µ¿∩ ALLOC »ÑαÑñ ó«ºóαáΘÑ¡¿Ñ¼ "P"
  864.  »αÑ«íαáºπÑΓ Ñú« ó π¬áºáΓѽ∞ ¡á ß¿¼ó«½δ.
  865.      öπ¡¬µ¿∩ MORECORE »«½πτáÑΓ »á¼∩Γ∞ «Γ «»Ñαᵿ«¡¡«⌐ ß¿ßΓÑ-
  866.  ¼δ. äÑΓ὿ Γ«ú«, ¬á¬ φΓ« «ßπΘÑßΓó½∩ÑΓß∩, ¼Ñ¡∩εΓß∩, ¬«¡Ñτ¡«,
  867.  «Γ ß¿ßΓÑ¼δ ¬ ß¿ßΓѼÑ. ìá ß¿ßΓѼѠUNIX Γ«τ¬á óσ«ñá SBRK(N)
  868.  ó«ºóαáΘáÑΓ π¬áºáΓѽ∞ ¡á "N" ñ«»«½¡¿Γѽ∞¡δσ íá⌐Γ«ó »á¼∩-
  869.  Γ¿.(π¬áºáΓѽ∞ πñó«½ÑΓó«α∩ÑΓ óßѼ «úαá¡¿τÑ¡¿∩¼ ¡á óδαáó¡¿óá-
  870.  ¡¿Ñ). Æá¬ ¬á¬ ºá»α«ß ¬ ß¿ßΓѼѠ¡á óδñѽѡ¿Ñ »á¼∩Γ¿ ∩ó½∩ÑΓß∩
  871.  ßαáó¡¿Γѽ∞¡« ñ«α«ú«⌐ «»ÑαᵿÑ⌐, ¼δ ¡Ñ σ«Γ¿¼ ñѽáΓ∞ φΓ« »α¿
  872.  ¬áªñ«¼ «íαáΘÑ¡¿¿ ¬ Σπ¡¬µ¿¿ ALLOC. Å«φΓ«¼π Σπ¡¬µ¿∩ MORECORE
  873.  «¬απú½∩ÑΓ ºáΓαÑí«óá¡¡«Ñ τ¿ß½« Ññ¿¡¿µ ñ« í«½∞ΦÑú« º¡áτÑ¡¿∩;
  874.  φΓ«Γ í«½∞Φ¿⌐ í½«¬ íπñÑΓ ºáΓѼ αáºñѽѡ Γá¬, ¬á¬ ¡Ñ«íσ«ñ¿¼«.
  875.  îáßΦΓáí¿απεΘá∩ óѽ¿τ¿¡á ∩ó½∩ÑΓß∩ »áαá¼ÑΓα«¼, ¬«Γ«αδ⌐ ¼«ªÑΓ
  876.  íδΓ∞ »«ñ«íαá¡ ó ß««ΓóÑΓßΓó¿¿ ß ¡Ñ«íσ«ñ¿¼«ßΓ∞ε.
  877.             
  878.                            - 183 -
  879.      
  880.   #DEFINE NALLOC 128 /*#UNITS TO ALLOCATE AT ONCE*/
  881.   STATIC HEADER *MORECORE(NU) /*ASK SYSTEM FOR MEMORY*/
  882.   UNSIGNED NU;
  883.   \(
  884.      CHAR *SBRK();
  885.      REGISTER CHAR *CP;
  886.      REGISTER HEADER *UP;
  887.      REGISTER INT RNU;
  888.      RNU=NALLOC*((NU+NALLOC-1)/NALLOC);
  889.      CP=SBRK(RNU*SIZEOF(HEADER));
  890.      IF ((INT)CP==-1) /*NO SPACE AT ALL*/
  891.   RETURN(NULL);
  892.      UP=(HEADER *)CP;
  893.      UP->S.SIZE=RNU;
  894.      FREE((CHAR *)(UP+1));
  895.      RETURN(ALLOCP);
  896.   \)
  897.  
  898.      àß½¿ í«½∞ΦÑ ¡Ñ «ßΓὫß∞ ßó«í«ñ¡«ú« »α«ßΓαá¡ßΓóá, Γ« Σπ¡-
  899.  ¬µ¿∩ SBRK ó«ºóαáΘáÑΓ "-1", σ«Γ∩ NULL íδ½ íδ ½πτΦ¿¼ óδí«α«¼.
  900.  ä½∩ ¡áñѪ¡«ßΓ¿ ßαáó¡Ñ¡¿∩ "-1" ñ«½ª¡á íδΓ∞ »αÑ«íαẫóá¡á ¬
  901.  Γ¿»π INT. æ¡«óá »α¿σ«ñ¿Γß∩ ¼¡«ú«¬αáΓ¡« ¿ß»«½∞º«óáΓ∞ ∩ó¡δÑ
  902.  »αÑ«íαẫóá¡¿∩ (»ÑαÑó«ñ) Γ¿»«ó, τΓ«íδ «íÑß»Ñτ¿Γ∞ «»αÑñѽѡ-
  903.  ¡πε ¡Ñºáó¿ß¿¼«ßΓ∞ Σπ¡¬µ¿⌐ «Γ ñÑΓá½Ñ⌐ »αÑñßΓáó½Ñ¡¿∩ π¬áºáΓÑ-
  904.  ½Ñ⌐ ¡á αẽ¿τ¡δσ ¼áΦ¿¡áσ.
  905.      ê »«ß½Ññ¡ÑÑ - ßá¼á Σπ¡¬µ¿∩ FREE. ìáτ¿¡á∩ ß ALLOCP, «¡á
  906.  »α«ßΓ« »α«ß¼áΓα¿óáÑΓ ßó«í«ñ¡δ⌐ ß»¿ß«¬ ó »«¿ß¬Ñ ¼ÑßΓá ñ½∩
  907.  óóÑñÑ¡¿∩ ßó«í«ñ¡«ú« í½«¬á. ¥Γ« ¼ÑßΓ« ¡áσ«ñ¿Γß∩ ½¿í« ¼Ñªñπ
  908.  ñóπ¼∩ ßπΘÑßΓóπεΘ¿¼¿ í½«¬á¼¿, ½¿í« ó «ñ¡«¼ ¿º ¬«¡µ«ó ß»¿ß¬á.
  909.  é ½εí«¼ ß½πτáÑ, Ñß½¿ «ßó«í«ñ¿óΦ¿⌐ß∩ í½«¬ »α¿¼δ¬áÑΓ ¬ «ñ¡«¼π
  910.  ¿º ß«ßÑñ¡¿σ, ß¼Ñª¡δÑ í½«¬¿ «íΩÑñ¿¡∩εΓß∩. æ½Ññ¿Γ∞ ¡πª¡« Γ«½∞-
  911.  ¬« ºáΓѼ, τΓ«íδ π¬áºáΓѽ¿ π¬áºδó὿ ¡á Γ«, τΓ« ¡πª¡«, ¿ τΓ«-
  912.  íδ αẼÑαδ í뫨 πßΓá¡«ó½Ñ¡δ »αáó¿½∞¡«.
  913.  
  914.  FREE(AP) /*PUT BLOCKE AP IN FREE LIST*/
  915.  CHAR *AP;
  916.  \(
  917.     REGISTER HEADER *P, *G;
  918.     P=(HEADER*)AP-1; /*POINT TO HEADER*/
  919.     FOR (G=ALLOCP; !(P>G && P>G->S.PTR);G=G->S.PTR)
  920.  IF (G>=G->S.PTR && (P>G \!\! P<G->S.PTR))
  921.      BREAK; /*AT ONE END OR OTHER*/
  922.  IF (P+P->S.SIZE==G->S.PTR)\(/*JOIN TO UPPER NBR*/
  923.      P->S.SIZE += G->S.PTR->S.SIZE;
  924.      P->S.PTR = G->S.PTR->S.PTR;
  925.  \) ELSE
  926.      P->S.PTR = G->S.PTR;
  927.  IF (G+G->S.SIZE==P) \( /*JOIN TO LOWER NBR*/
  928.      G->S.SIZE+=P->S.SIZE;
  929.      G->S.PTR=P->S.PTR;
  930.  \) ELSE
  931.      G->S.PTR=P;
  932.  ALLOCP = G;
  933.     \)      
  934.                            - 184 -
  935.  
  936.      ò«Γ∩ αáß»αÑñѽѡ¿Ñ »á¼∩Γ¿ »« ßó«Ñ⌐ ßπΓ¿ ºáó¿ß¿Γ «Γ ¿ß-
  937.  »«½∞ºπѼ«⌐ ¼áΦ¿¡δ, »α¿óÑñÑ¡¡á∩ óδΦÑ »α«úαἼᠻ«¬áºδóáÑΓ,
  938.  ¬á¬ φΓπ ºáó¿ß¿¼«ßΓ∞ ¼«ª¡« αÑúπ½¿α«óáΓ∞ ¿ «úαá¡¿τ¿Γ∞ óÑß∞¼á
  939.  ¡Ñí«½∞Φ«⌐ τáßΓ∞ε »α«úαá¼¼δ. êß»«½∞º«óá¡¿Ñ TYPEDEF ¿ UNION
  940.  »«ºó«½∩ÑΓ ß»αáó¿Γ∞ß∩ ß óδαáó¡¿ó᡿Ѽ (»α¿ πß½«ó¿¿, τΓ« Σπ¡¬-
  941.  µ¿∩ SBRK «íÑß»Ñτ¿óáÑΓ »«ñσ«ñ∩Θ¿⌐ π¬áºáΓѽ∞). ÅÑαÑó«ñδ Γ¿»«ó
  942.  «αúá¡¿ºπεΓ óδ»«½¡Ñ¡¿Ñ ∩ó¡«ú« »αÑ«íαẫóá¡¿∩ Γ¿»«ó ¿ ñáªÑ
  943.  ß»αáó½∩εΓß∩ ß ¡Ñπñáτ¡« αáºαáí«Γá¡¡δ¼ ß¿ßΓѼ¡δ¼ ¿¡ΓÑαΣÑ⌐ß«¼.
  944.  ê σ«Γ∩ αáßß¼«ΓαÑ¡¡δÑ ºñÑß∞ »«ñα«í¡«ßΓ¿ ßó∩ºá¡δ ß αáß»αÑñѽÑ-
  945.  ¡¿Ñ¼ »á¼∩Γ¿, «íΘ¿⌐ »«ñσ«ñ αáó¡δ¼ «íαẫ¼ »α¿¼Ñ¡¿¼ ¿ ¬ ñαπú¿¼
  946.  ß¿Γπᵿ∩¼.
  947.      ô»α᪡ѡ¿Ñ 8-6.
  948.      --------------
  949.      öπ¡¬µ¿∩ ¿º ßΓá¡ñáαΓ¡«⌐ í¿í½¿«ΓѬ¿ CALLOC(N,SIZE) ó«ºóαá-
  950.  ΘáÑΓ π¬áºáΓѽ∞ ¡á "N" «íΩÑ¬Γ«ó αẼÑαá SIZE, »α¿τѼ ß««ΓóÑΓ-
  951.  ßΓóπεΘá∩ »á¼∩Γ∞ ¿¡¿µ¿á½¿º¿απÑΓß∩ ¡á ¡π½∞. ¡á»¿Φ¿ΓÑ »α«úαá¼¼π
  952.  ñ½∩ CALLOC, ¿ß»«½∞ºπ∩ Σπ¡¬µ¿ε ALLOC ½¿í« ó ¬áτÑßΓóÑ «íαẵá,
  953.  ½¿í« ¬á¬ Σπ¡¬µ¿ε, ¬ ¬«Γ«α«⌐ »α«¿ßσ«ñ¿Γ «íαáΘÑ¡¿Ñ.
  954.      ô»α᪡ѡ¿Ñ 8-7.
  955.      ---------------
  956.      öπ¡¬µ¿∩ ALLOC »α¿¡¿¼áÑΓ ºáΓαÑí«óá¡¡δ⌐ αẼÑα, ¡Ñ »α«óÑ-
  957.  α∩∩ Ñú« »αáóñ«»«ñ«í¡«ßΓ¿; Σπ¡¬µ¿∩ FREE »«½áúáÑΓ, τΓ« Γ«Γ
  958.  í½«¬, ¬«Γ«αδ⌐ «¡á ñ«½ª¡á «ßó«í«ñ¿Γ∞, ß«ñÑαª¿Γ »αáó¿½∞¡«Ñ
  959.  º¡áτÑ¡¿Ñ ó »«½Ñ αẼÑαá. ôß«óÑαΦÑ¡ßΓóπ⌐ΓÑ φΓ¿ »α«µÑñπαδ,
  960.  ºáΓαáΓ¿ó í«½∞ΦÑ πß¿½¿⌐ ¡á »α«óÑα¬π «Φ¿í«¬.
  961.      ô»α᪡ѡ¿Ñ 8-8.
  962.      ---------------
  963.      ìá»¿Φ¿ΓÑ Σπ¡¬µ¿ε BFREE(P,N), ¬«Γ«αá∩ ó¬½ετáÑΓ »α«¿ºó«½∞-
  964.  ¡δ⌐ í½«¬ "P" ¿º "N" ß¿¼ó«½«ó ó ß»¿ß«¬ ßó«í«ñ¡δσ í½«¬«ó, π»-
  965.  αáó½∩Ѽδ⌐ Σπ¡¬µ¿∩¼¿ ALLOC ¿ FREE. æ »«¼«Θ∞ε Σπ¡¬µ¿¿ BFREE
  966.  »«½∞º«óáΓѽ∞ ¼«ªÑΓ ó ½εí«Ñ óαѼ∩ ñ«íáó½∩Γ∞ ó ßó«í«ñ¡δ⌐ ß»¿-
  967.  ß«¬ ßΓáΓ¿τÑ߬¿⌐ ¿½¿ ó¡ÑΦ¡¿⌐ ¼áßß¿ó.
  968.