G1.
æ å ±: 第 1 éš
第 1 æ¥ ç°å¢èšå®, C ããã°ã©ãã³ã°ã®åŸ©ç¿ 1. 㯠ã ã ã« G1ãG3 ã®èª²é¡ã¯å 4 å, åèš 12 ååã§äžç¶ãã®å 容ãšãªã£ãŠãã. ⢠UNIX äžè¬, Linux (æŒç¿ã§çšããç°å¢) ã®åºç€ ⢠ããã°ã©ãã³ã°äžè¬ (ãããã°æ¹æ³ç), C ããã°ã©ãã³ã°ã®åºç€ ããå§ãŸã. äžæ žéšåã§ã¯,
⢠ãã¡ã€ã«å ¥åºå, é³ã®å ¥åºå, ⢠é³ã®ã察象ãšããããŒã¿åŠç, ããžã¿ã«ä¿¡å·åŠç ⢠ã€ã³ã¿ãŒããã, ãããã¯ãŒã¯ããã°ã©ãã³ã° ãåŠã¶. æåŸã«ã¯é¢çœãå¿çšããã°ã©ã ãšããŠã€ã³ã¿ãŒãããé»è©± (1 察 1 ã®é話), ãããã¯é»è©±äŒè°ã·ã¹ãã (å€å¯Ÿå€ ã®é話) ãå®æãããäºãç®æã. ãããªãã€ã³ã¿ãŒãããé»è©±ãäœããšãããããš, äžèŠé£ãããã«æãããããããªã. ããã, èŠã¯é³ãé²é³ãã, å çãã, é³ããŒã¿ããããã¯ãŒã¯ã§è»¢éãã, ã® 3 ã€ãã§ããã°è¯ãã®ã§ãã. åè ã«ã€ããŠã¯, æŒç¿çšã® Linux ç°å¢ã§ ã¯ç¹å®ã®ãã¡ã€ã« (/dev/dsp) ãæ®éã®ãã¡ã€ã«ã®ããã«èªã¿æžãããã ãã§, æãã®ã»ãç°¡åã«ã§ããäºãç¥ãã ãã. ã ãã, ãã¡ã€ã«å ¥åºåã®ããã°ã©ãã³ã°ãã§ããŠããã°å³, é³ã®é²é³ãåçãã§ãã. åŸè ã¯, ããŒã¿ãé³å£°ã§ããã ãšãªãã§ããããš, ãããã¯ãŒã¯ãä»ããŠããŒã¿ãéããšãã, ãããã¯ãŒã¯ããã°ã©ãã³ã°ã®åºæ¬ãåŠã¹ã°ã§ãã. ã ããã£ãŠãã¡ã€ã«å ¥åºå, ãããã¯ãŒã¯ãšãã, å®çšããã°ã©ãã³ã°ã®åºæ¬ã身ã«ã€ããŠããŸãã°, ããäžé 匵ãã§ã㣠ãšã§ããäºã§, å®éšæéã®æåŸã®æ¹ã«ããããåãã!ããšããåã³ããã²å€ãã®äººã ã«äœéšããŠæ¬²ããã®ã§ãã. æ¬ããã¹ãã¯ãããªãã«èªå·±å®çµçã«æžãããŠããã®ã§, 説æãé ã«èªãã§å 容ãç解ããŠã»ãã. ãã®éäž, å®éã« äœæ¥ãèå¯ããäºãèŠæ±ããé ç®ã«ã¯, 以äžã®å°ã®ãããããã€ããããŠãã, ãã®äœçœ®ã¥ãã¯ä»¥äžã®ãšããã§ãã. æºåèª²é¡ : ç°¡åãªèšå®äœæ¥ã®é¡ (äŸãã°ãããã¯ãŒã¯ãžæ¥ç¶ããããã®èšå®) ã, åŸã§èª²é¡ãå®è¡ããããã®æºåãšãªã ç°¡åãªããã°ã©ãã³ã°. å¿ é é ç®ãšèããã¹ãã ã, ãã, ããŒã ã¡ã³ãå šå¡ããã§ã«ãããã®é ç®ã«æ £ããã£ãŠ ãã, ãç®ãã€ã¶ã£ãŠã§ãã§ããããšãããããªå Žåã¯ãšã°ããŠãæ§ããªã. æ¬èª²é¡ : ååã«æ°åèšå®ãããŠãã, ããã°ããã®æ¥ã®ç®æšããšã§ãããã¹ã課é¡. ãããã«ã€ããŠã¯å šçãããã°ã© ã ãå®æãããããš. é²åºŠææ¡ã®ãã, ããã°ã©ã ã¯é»åçã«æåºãã. ãã ã, ãããã²ãšã€ã²ãšã€ã«ã¬ããŒã ãæžããŠæåºããå¿ èŠã¯ãªã. éžæèª²é¡ : äœåã®ãã人ã«ã¯æ¯éãã£ãŠããããã課é¡. å 容çã«ã¯éèŠã ã, ä»®ã«ã§ããªããŠããã®å ã§ã€ãŸã¥ãäº ã¯ãªãã ãããšããæå³ã§, éžæ課é¡ãšããŠãã. åºæ¬çã«ã¯, æºå課é¡ãŸãã¯æ¬èª²é¡ãšå°ãã€ããããé ç®ãé ã«ããªããŠè¡ãã®ããã. å®éšæéã®æåŸã® 2 åãçšããŠã§ããããã°ã©ã ã®çºè¡šäŒãè¡ã. åŸæ¥ã¬ããŒããæåºãã. ç®æšã®çœ®ãæ¹:
å®éšæéãéããŠã®æçµèª²é¡ã¯, åè¿°ã®ãšããã€ã³ã¿ãŒãããé»è©± (1 察 1 ã®é話), ãããã¯é»è©±äŒè°
ã·ã¹ãã (å€å¯Ÿå€ã®é話) ã C ã®ããã°ã©ã ãšããŠå®æãããäºã§ãã. ãããåãã, ã§ããã°ããã§äœããã®ãªãªãž ããªãã£ãçºæ®ããŠ, çºå±ç課é¡ã«ææŠããäºã, åŠæãéããŠã®å šäœç®æšã§ãã. ååã§ã¯, ãã®ããã«å¿ èŠãªäºãåŠ ã¶ãšããç®çæèãæã£ãŠèšããšãã. ååã®å®éšæéã®äœ¿ãæ¹:
æçµèª²é¡éæã«åã, å®éšã®ååã§ã¯ãã®åçšã«èšå®ããããæ¬èª²é¡ãã, æéå ã«å®æã
ããäºãç®æã. ãã®ããã«æ¬ããã¹ããèªãã§äºç¿, å¿ã®æºå, å¿ èŠãªãã°éå»ã«ç¿ã£ãé ç®ã®åŸ©ç¿ãããŠããå¿ èŠã ããã®ã¯èšããŸã§ããªã. å®éšã®æéå ã«, æå¡ãå¿ èŠãªé ç®ãè¬çŸ©åœ¢åŒã§èª¬æããæé垯ããã. ãã®æé垯ã¯è¬çŸ©æ éãšåæ§, 話ãèãããšã«éäžãã. ãã以å€ã®æé垯ã¯å®éšã«åãçµã. æ®éã¯ãŸãæåã«, ãã®æ¥ã®ç®æšã§ããæ¬èª²
é¡ãé ã«ãã, ãã®åŸ, ãã®æ¥ã®æºå課é¡ãé ã«ã¯ãªã¢ããŠãã, æçµçã«ãã®åã®æ¬èª²é¡ãã¯ãªã¢ãã. æºå課é¡ã¯, æ¬ èª²é¡ãã¯ãªã¢ããã®ã«ç解ãã¹ãå¿ é é ç®ãå°ããã€å°å ¥ããŠãããã®ã§, ãããé ã«ã¯ãªã¢ããŠããã°æ¬èª²é¡ã«åã çµã¿æããªãã¯ãã§ãã. ããã, çå¡å šå¡ããããèªãã§, ãç°¡åãããŠãããããªãããšæãããããªå Žåã¯é£ã°ã ãŠ, ãããªãæ¬èª²é¡ã«åãçµãã§ãæ§ããªã. 泚æ:
決ããŠãé¢åèãããã ãæ©ãæžãŸãããããããšããçç±ã§æºå課é¡ãé£ã°ããªãããš. ãããŸã§, ãã§ã«ãã®
ãããªèª²é¡ã¯æ¥åžžçã«ãã£ãŠãã, ãããã®é ç®ã¯ç®ãã€ã¶ã£ãŠã§ãã§ãã, ãšèšã人ãŸã§åœ¢åŒçã«ããããããªãå¿ èŠ ã¯ãªã, ãšããæå³ã§é£ã°ããŠããããšèšã£ãŠãã. å®éã«ã¯æ¬èª²é¡ãããã«ã¯, æºå課é¡çžåœã®äºããããªããŠã¯ãã ãªãããã«ãªã£ãŠããå Žåãã»ãšãã©ã§ãã, é£ã°ãããšããã§äœæ¥éãåæžãããããã§ã¯ãªã. ãããã£ãŠãããªã æ¬èª²é¡ã«åãçµãã®ã¯, ããããããªãèŠããããã ãã§, äœããã£ããããããããã«åãã£ãŠããŸã人åãã®éžæè¢ ã§ãã. ããã§ãªã人ã¯æºå課é¡ãé ã ã«ããªããŠããã®ã, ãæ¥ãã°åããã§çµæçã«æ©ãæ¬èª²é¡ãããªããã®ã§ã¯ãª ãããšæã. ããŒã ã¯ãŒã¯ã«ã€ããŠ:
課é¡ã¯, æ®æ®µ 4 人äžçµã®çã 2 ã€ã«å²ã£ãŠè¡ã. ã€ãŸã, 1 ããŒã 2 人ã®ããŒã ãäœã£ãŠè¡ã
(å¥æ°äººã®ç㯠2 人ãŸã㯠3 人ã®ããŒã ). ãã㊠1 ããŒã ã§ã²ãšã€ã®ããã°ã©ã ãå®æãããã°ãã. ãã®ããã«, ã㌠ã å ã§ã³ãã¥ãã±ãŒã·ã§ã³ãåããªããååããŠåãçµãããš. 決ããŠ, åèªããŠãã§ã«ããã¹ããèªã¿, æ°ãåãããš ããã§é£æºãåããã«ã³ã³ãã¥ãŒã¿ã«åãã, 話ãããã«é»ã ãšåãçµã, ãªã©ãšããç¶æ ã«é¥ãäºã®ãªãããã«ãã ããš. åºæ¬ã¹ã¿ã€ã«ãšããŠ, ã©ãããã°ããããäºäººãç解ããã, ã©ã¡ããäžäººãããã°ã©ãã³ã°ããã, ããäžæ¹ã®äººã¯ã ããèåŸããèŠãŠããã³ããå ¥ãã, ãããã¯è³ªåããã, ãšããã¹ã¿ã€ã« (ãã¢ããã°ã©ãã³ã°) ãè¯ã. ããã, æã ããã°ã©ãã³ã°ãããä¿ã亀代ããªããè¡ã. ããããŠ, ãäºããã³ãã¥ãã±ãŒã·ã§ã³ãåããªãã, æ£ããããã°ã©ã , è¯ãããã°ã©ã ã«é¢ããè°è«ãããªããäœæ¥ãé²ããŠããããš. ãäºããããäºãããç解ãåã£ãåŸã§ãªã, ããçšåºŠ ã®ãåæ ããããŠãããã, ãè² æ ãååã«ãããç®è«èŠã§æåãã課é¡ãåã ã«åãããšã, ãŸããŠããä»æ¥ã¯ A å, ãã, åŸã¯ããããããªã©ãšããåæ ã®ä»æ¹ãããªãããã«ãã. ç¹ã«, ããŒã å ã§ããã°ã©ãã³ã°ã«å¯Ÿããæ £ãã®å·®ã倧ãããšãã¯, å€å°æéããããã®ã¯æ¿ç¥ã§, ç¹ã«åºç€ã¯äžæ £ã ãªäººãç©æ¥µçã«äœæ¥ãè¡ã, ããäžæ¹ãããã«ããã³ããå ¥ãããšããã¹ã¿ã€ã«ãåã£ãŠã»ãã. ãŸã, åçŽè ã¯èªåã® æ £ããå°ãªããšããäºã§é æ ®ããããã, æªããéšåãèŠã€ããã, ãã®ããã°ã©ã ã¯ãããããããã®ã§ã¯ãªãã, ã ã®ããã°ã©ã ã¯ãªãæ£ããã®ã, ãªã©ã®è°è«ãä»æããäºãå¿ãããŠæ¬²ãã (æ¡å€çžæãããåãã£ãŠããªãã£ãããã ãã®ã§ãã). æéãäœã£ãã:
ååã®é²åºŠã®ç®å®ãäžããããã«æ¬èª²é¡ãèšå®ãããŠããã, G1-G3 ã®å 容ã¯äžã€ãªããã«ãªã£ãŠ
ãã, ãããŸã§å šäœãšããŠäžã€ã®ããã°ã©ã ãå®æãããäºãç®æšã«ãªã£ãŠãã. ãããã£ãŠããåã«æéãäœã£ããå ãžé²ãã°ãã. 第 8 åã«å¿ é 課é¡ãŸã§ã®å 容ã説æãçµããäºå®ã§ãã, ãã®å¿ é 課é¡ãããªããåŸã©ã®ãããªçºå±ç 課é¡ã«åãçµããã¯, åããŒã ã®è£éãéèŠãã. ããåã«æéãäœã£ãã, æ¯éãã®äœã£ãæéãå©çšããŠ, å ã®åã® äºç¿ããã, ã§ããã®ã§ããã°äœæ¥ããã, çºå±ç課é¡ã«ã€ããŠæ§æ³ãç·Žã, è°è«ããã, ãªã©ãããŠã»ãã. å¿ é 課é¡ã æ©ãã§ããŠããŸãã°ãã®åçºå±ç課é¡ã«å€ãã®æéãå²ãäºãåºæ¥ã.
2. ããã°ã©ãã³ã°ä»¥åã®æºå 2.1 ã 㰠〠㳠æŒç¿ç°å¢ã¯, åŠç§ã貞ãåºããŠãã PC ã® Linux (Ubuntu) ãçšãã. 貞ãåºããŠãã PC 㯠Windows ãç«ã¡äžãã ããã«ãªã£ãŠããã, æ¬æŒç¿ã®å 容ã¯, é³ããŒã¿ã®å ¥åºå, ãããã¯ãŒã¯é¢ä¿ã®ã³ãã³ããªã©, å€ãã®å Žæ㧠Linux ã åæãšããŠãã. æ £ããŠããªã人ããã®æ©äŒã«åŠã¶ããš.
æºåèª²é¡ 1.1 Linux ãç«ã¡äžã, èªåã®ãŠãŒã¶ (ç¹ã«äœã£ãŠããªããã°, denjo ãŠãŒã¶) ãšããŠãã°ã€ã³ãã.
2.2 ãããã¯ãŒã¯ãžã®æ¥ç¶
æºåèª²é¡ 1.2 æŒç¿çšã®ã¯ã€ã€ã¬ã¹ãããã¯ãŒã¯ ZENKIJIKKEN ãžæ¥ç¶ãã. 確èªããŠã, æ¬èª²é¡ã® HP ããã, 以
äžã® URL ãžã¢ã¯ã»ã¹ãã. 以éãããããç¥ãããæµããã, è³æãããã°ã©ã ãæäŸããäºããã.
http://g1g2g3.logos.ic.i.u-tokyo.ac.jp/ 2.3 ã·ã§ã« ãããããªã³ãã³ããå®è¡ããã®ã«ãã£ãšãåºæ¬çãªéå ·ã¯, ããããã³ãã³ãã©ã€ã³ã§, éåžž, ã·ã§ã«ãšåŒã¶. ã·ã§ ã«ãèµ·åããã«ã¯, ã¡ãã¥ãŒããã端æ«ãã¢ããªã±ãŒã·ã§ã³ãéžã¶.
æºåèª²é¡ 1.3 ã¡ãã¥ãŒãã, ã¢ããªã±ãŒã·ã§ã³ â ã¢ã¯ã»ãµãª â 端æ«ãéžæããŠ, 端æ«ãéã.
2.4 Emacs ãšãã£ã¿ ãã¡ã€ã« (ããã°ã©ã ãããŒã¿) ãç·šéããã®ã«ã¯ãšãã£ã¿ãçšãã. ãšãã£ã¿ã«ã¯ãããããªçš®é¡ãããã Emacs ã 䜿ãããªããããã«ãªããšãã.
æºåèª²é¡ 1.4 ã¡ãã¥ãŒãã, ã¢ããªã±ãŒã·ã§ã³ â ã¢ã¯ã»ãµãª â Emacs 22 (GTK) ãéžæããŠ, Emacs ãšãã£ã¿ éã.
3. C ããã°ã©ãã³ã°ã®ç°å¢èšå® Linux 㧠C ããã°ã©ãã³ã°ãè¡ãããã®åºæ¬ãã©ãŒã ã説æãã. 4 åŠæã«é§å Žã§äœ¿ã£ã Mac ãšå ±ééšåãå€ãã®ã§, ãã埩ç¿ãããšãã.
3.1 C ã³ã³ãã€ã© Linux ã§ã¯, æšæºç㪠C ã³ã³ãã€ã©ãšã㊠cc ãŸã㯠gcc ãšããã³ãã³ã (å®ã¯ã©ã¡ããåãç©) ãçšãã. ãã£ãšã åçŽã«ã¯, C ããã°ã©ã ããããããã¡ã€ã« (äŸ: ini.c) ãçšæã,
$ gcc ini.c ãšãã (å®éã«å ¥åããéšå㯠gcc ini.c ã®ããã«å€ªåäœã§ç€ºãããŠãã. $ã¯ã·ã§ã«ã®ããã³ããã«åãã£ãŠå ¥åãã äºãæ瀺ããå°ã§, ããèªèº«ãå ¥åããããã§ã¯ãªã). ãã㧠a.out ãšããå®è¡å¯èœãã¡ã€ã«ãã§ããã, ãã®ååãæ å®ããããã°, -o ãªãã·ã§ã³ãçšããŠ,
$ gcc -o ini ini.c ãšãã. ã§ããå®è¡å¯èœãã¡ã€ã«ã¯,
$ ./ini ã®ããã«å®è¡ãã. â./â ãå¿ããŠ,
$ ini ã ãã ãš,
$ ini bash: ini: command not found ãšãããšã©ãŒã«ãªãã®ã§æ³šæ.
æºåèª²é¡ 1.5 以äžã®ããã°ã©ã ã Emacs 㧠ini.c ãšããååã§äœãä¿åãã. ãããã³ã³ãã€ã«ã, ini ãšããå®è¡å¯ èœãã¡ã€ã«ãäœã.
main(int argc, char ** argv) { char * gn = argv[1]; char * fn = argv[2]; char g = gn[0]; char f = fn[0]; printf(âinitial of â%s %sâ is %c%c.\nâ, gn, fn, g, f); } ããã§ããããã®èŠåãåºããäžæŠæ°ã«ããã«å ãžé²ã. ã³ã³ãã€ã«ã§ããã, 以äžã®ããã«ã³ãã³ããå®è¡ããŠç¢ºèªãã.
$ ./ini Daisuke Matsuzaka initial of âDaisuke Matsuzakaâ is DM. åŒæ°ã足ããªããšä»¥äžã®ãããªåºå (Segmentation Fault) ã«ãªã.
$ ./ini Daisuke Segmentation fault ãããäžæŠæ°ã«ããã«å ãžé²ã.
3.2 ãã¡ã€ã«äœæãšåšèŸºã®åºç€ 念ã®ãã, äžèšãå®è¡ããããã® Emacs ã®æäœãšåºç€æŠå¿µã®åŸ©ç¿ (4 åŠæã« Mac ã§ãã£ããã®ãšã»ãšãã©åã).
(1) Emacs ã§ãã¡ã€ã«ãäœã: C-x C-f
(Ctrl ããŒãš x ãåæã«æã¡, ãã®ãŸãŸ Ctrl ããŒãæŒããªãã f ãæã€)
ãšãããš
Find ï¬le: ~/ ãšããã®ãäžã«çŸããã®ã§, ~/ 以éã«ãã¡ã€ã«å (ããã§ã¯ ini.c) ãå ¥åã㊠Enter.
Find ï¬le: ~/ini.c ~ã¯èªåã®, ãããŒã ãã£ã¬ã¯ããªããè¡šããŠãã, äžèšã®æäœã§ããŒã ãã£ã¬ã¯ããªçŽäžã«ãã¡ã€ã«ãåºæ¥ã. (2) Emacs ã§ãã¡ã€ã«ãä¿å: C-x C-s (3) ãã¡ã€ã«æäœã® GUI: Mac ã®ãã¡ã€ã³ãã Windows ã®ãšã¯ã¹ãããŒã©ã«çžåœãããã®ã¯, ã¡ãã¥ãŒ â å Žæ â ããŒã ãã©ã«ã ã§éã. ini.c ãäœã£ãããããèŠããã¯ã.
(4) ã·ã§ã«ã®åºæ¬ã³ãã³ã: ã·ã§ã«ãèµ·åããçŽåŸ, $ ls
ãšãããšããŒã ãã£ã¬ã¯ããªã®ãã¡ã€ã«äžèŠ§ã衚瀺ããã. ini.c ãå«ã, äžèšã® GUI ãšåããã¡ã€ã«ãèŠãã㯠ãã§ãã. ãã£ã¬ã¯ããªãç解ãã
ä»åŸ, ãã¹ãŠã®ãã¡ã€ã«ãããŒã ãã£ã¬ã¯ããªã®äžã«äœã£ãŠãããšããããã«ã¯ãããªãã®
ã§, é©å®ãã£ã¬ã¯ããªãäœã, äœã£ããã£ã¬ã¯ããªå ã« Emacs ã§ãã¡ã€ã«ãäœã, äœã£ããã£ã¬ã¯ããªå ã®ãã¡ã€ã«ãã³ ã³ãã€ã«, å®è¡ãã, ãšããäºãåºæ¥ãããã«ãªã£ãŠãããŠã»ãã. ãã®ããã«å¿ èŠãª, 埩ç¿ããŠããã¹ãã³ãã³ããšæŠ 念ãåæããŠãã.
(1) ãã¹å: ãã¡ã€ã«ããã£ã¬ã¯ããªã®ååã®äº. ⢠/ããå§ãŸããã¹åã¯, 絶察ãã¹åãšåŒã°ãã. äŸãã°/home/tau/ini.c ã¯, â ã«ãŒããã£ã¬ã¯ã㪠(ã·ã¹ãã ã«å¯äžååšãã, é ç¹ãšãªããã£ã¬ã¯ããª) ã®äžã®, â home ãšãããã£ã¬ã¯ããªã®äžã®, â tau ãšãããã£ã¬ã¯ããªã®äžã®, â ini.c ãšãããã¡ã€ã« (ã²ãã£ãšããããã£ã¬ã¯ããªãããããªã. ååã ãããã¯å€æã§ããªã) ãæå³ããŠãã. ããšã話ãšããŠã¯, 2 å·é€šå®éšå®€ã, ã倧å®å®é河系倪éœç³»å°çæ¥æ¬åœæ±äº¬éœæ京åºæ¬é·
7-3-1 å·¥åŠéš 2 å·é€š 4F æ°é€šå®éšå®€ããšãããããªãã®. ⢠/ããå§ãŸããªããã¹åã¯, çžå¯Ÿãã¹åãšåŒã°ãã. ini.c ã®ããã«åç¬ã§ãã¡ã€ã«åãæå®ããŠããã®ã, çžå¯Ÿãã¹åã®äžçš®ã§ãã. çžå¯Ÿãã¹åã¯ä»¥äžã§èª¬æãããã«ã¬ã³ããã£ã¬ã¯ããªããèµ·ç¹ãšããäœçœ®ãæ å®ããŠãã. äŸãã°ã«ã¬ã³ããã£ã¬ã¯ããªã/home/tau ã§ããã°, ini.c ã¯, /home/tau/ini.c ãæå³ã,
enshu/mk data.c ã¯, /home/tau/enshu/mk data.c ãæå³ããŠãã. ãã¡ãã¡ã倧å®å®é河系倪éœç³»å° çæ¥æ¬åœæ±äº¬éœæ京åºæ¬é· 7-3-1 å·¥åŠéš 2 å·é€š 4F æ°é€šå®éšå®€ããšãã代ããã«, æ¥æ¬åœå ã§ã¯ãæ±äº¬éœæ 京åºæ¬é· 7-3-1 å·¥åŠéš 2 å·é€š 4F æ°é€šå®éšå®€ããšèšãã°ããã, æ®æ®µå·¥åŠéš 2 å·é€šã«ãã人ã¯ãæ°é€šå®éš 宀ãã§ããã®ãšåã.
(2) ã«ã¬ã³ããã£ã¬ã¯ããª: èµ·åãããŠããããã»ã¹ããšä¿æãããŠãã. ã·ã§ã«ã®å Žå, pwd ã§è¡šç€ºã§ãã. $ pwd /home/tau ã·ã§ã«ãã¡ãã¥ãŒããç«ã¡äžãããš, åæç¶æ ã§ã¯ã«ã¬ã³ããã£ã¬ã¯ããªã¯èªåã®ããŒã ãã£ã¬ã¯ããªãšãªã£ãŠã ã, ããã¯å®éšç°å¢ã§ã¯, /home/h ãŠãŒã¶å i ãšãªã£ãŠãã.
(3) ãã£ã¬ã¯ããªãäœã: ãã£ã¬ã¯ããªãäœãã«ã¯, $ mkdir h ãã£ã¬ã¯ããªå i äŸ:
$ mkdir g1g2g3 㯠(g1g2g3 ãçžå¯Ÿãã¹ãªã®ã§), h ã«ã¬ã³ããã£ã¬ã¯ã㪠i/g1g2g3 ãšãããã£ã¬ã¯ããªãäœã.
(4) Emacs ã§ãã¡ã€ã«äœæ: Emacs ãã¯ãããšããŠè²ã ãªãœããã§ããŒã ãã£ã¬ã¯ããªã~/ ãšè¡šèšããç¿æ £ããã, ãã¡ã€ã«ãäœæããéã®,
Find ï¬le: ~/ini.c ã¯, ããŒã ãã£ã¬ã¯ããªäžã« ini.c, ã€ãŸã (ããŒã ãã£ã¬ã¯ããªã/home/tau ã§ããã°), /home/tau/ini.c ãäœ ããšããäºã«ãªã. ãã¡ããããã§,
Find ï¬le: ~/enshu/mk data.c ãšããã°, /home/tau/enshu/mk data.c ãã§ãã.
(5) ã«ã¬ã³ããã£ã¬ã¯ããªã®å€æŽ: ã·ã§ã«ã§ã«ã¬ã³ããã£ã¬ã¯ããªãå€æŽããã«ã¯,
$ cd h ãã£ã¬ã¯ããªå i ãšãã. ãŸã,
$ cd ã¯,
$ cd h ããŒã ãã£ã¬ã¯ã㪠i ã®ç¥èš. äŸ:
$ cd g1g2g3 ãªã, ã«ã¬ã³ããã£ã¬ã¯ããªã D ã«ããäºããã°ãã°, ãD ã«ç§»åããããšã, ãD ã«è¡ãããªã©ãšèšã.
(6) ãã£ã¬ã¯ããªã®å 容ã衚瀺: $ ls h ãã£ã¬ã¯ããªå i 㧠h ãã£ã¬ã¯ããªå i ã«ãããã¡ã€ã«ããã£ã¬ã¯ããªäžèŠ§ã衚瀺ããã.
$ ls ã¯,
$ ls h ã«ã¬ã³ããã£ã¬ã¯ã㪠i ã®ç¥èš.
(7) ã³ããŒã移å: cp ã mv ãªã©ã§ãã¡ã€ã«ããã£ã¬ã¯ããªéã§ã³ããŒããã移åãããããŠ, äœã£ããã¡ã€ã«ã®ãæŽ çããã§ããããã«. æ £ããªããã¡ã¯ GUI ã§ãã£ãŠããã. ãã£ã¬ã¯ããªæ§é ãš, ãã«ã¬ã³ããã£ã¬ã¯ããªãã®æŠå¿µãé ã«å ¥ããŠ, ãã¡ã€ã«ãã©ããžè¡ã£ãã®ããã¡ããšææ¡åºæ¥ã ããã«ããŠããããš. 以äžã®ãããªæé ãããçŸãã.
$ cd
# ããŒã ãã£ã¬ã¯ããªãžç§»å
$ mkdir enshu # enshu ãã£ã¬ã¯ããªãäœã ãã㧠Emacs 㧠~/enshu/xyz.c ãäœæ
$ cd enshu
# enshu ãã£ã¬ã¯ããªãžç§»å
$ ls xyz.c
# xyz.c ãã§ããŠããäºã確èª
$ gcc xyz.c
# ã³ã³ãã€ã«
$ ./a.out
# å®è¡
3.3 Emacs å ã§ã®ã³ã³ãã€ã« ããã°ã©ã ã®ç·šé â ã³ã³ãã€ã« â ãšã©ãŒãä¿®æ£ããããã«ãŸãç·šé â ãŸãã³ã³ãã€ã« â · · · ãšãããµã€ã¯ã«ã å¹ççã«è¡ãããã«, Emacs ã®äžã§ gcc ãå®è¡ããæ¹æ³ããã²èº«ã«ã€ããŠã»ãã. ããã«ã¯ç«¯æ«ã§ gcc ãå®è¡ãã代ããã«, Emacs ã§
M-x compile (çºé³: ãã¡ã¿ãšãã¯ã¹ ã³ã³ãã€ã«ã) ãšããã³ãã³ããå®è¡ãã (ãã®ã³ãã³ãã®å®éã®å ¥åæ¹æ³ãåãããªããã°äž èšåç §). ãããš, Emacs äžéšã®çŽ°ããšãã (ãããããã¡ãšãã) ã«, ã³ãã³ããå ¥åããããã®ä»¥äžã®ãããªããã³ã ããçŸãã (å³ G1.1.1).
ãªã, ããã³ãããçŸããŠããç¶æ ã§ãã£ã±ããããããªã£ãã, C-g ã§è±åºãã (ã³ãã³ãå®è¡åã®ç¶æ ã«æ»ã).
Emacs ã§ã¯äžé£ã®ã³ãã³ãæäœããã£ãŠããæäžã«èš³ããããªããªã£ãã, 倧æŠã®å Žå C-g ã§è±åºã§ãã.
å³ G1.1.1
M-x compile å ¥ååŸã® Emacs ç»é¢
Compile Command: make -k
âmake -kâ ã®éšåãæ¶ããŠå®è¡ãããã³ãã³ã (端æ«ã«å ¥åããç©ãšåã) ãå ¥åãã. Compile Command: gcc ini.c Emacs ã®äžã§å¥ã®ãããã¡ãéã, 端æ«ã§å®è¡ããæãšåããããªåºåãçŸãã (å³ G1.1.2). åãåºåãåŸãã®ã«ãã¡ãã¡ M-x compile ãšããã®ã¯, äžèŠãããšç«¯æ«ã§å ¥åãããããããã£ãŠé¢åãªããã ã, ã ãçšåºŠããã°ã©ã ã®è¡æ°ãå¢ããŠæ¥ãŠ, ã³ã³ãã€ã«ãšã©ãŒãèŠåãåºãéã«ç䟡ãçºæ®ããã. ã³ã³ãã€ã«ãšã©ãŒãèŠå ãèµ·ããã,
C-x â (ãŸã Ctrl ããŒãš x ãåæã«æã¡, ãã®åŸâ (= Shift + @) ãåç¬ã§æã€) ãæã€äºã§ãšã©ãŒãèŠåãèµ·ããå Žæã«èªåçã«ã«ãŒãœã«ãé£ãã§ããã. C-x âãç¹°ãè¿ãå ¥åãããšæ¬¡ã ãžå¥ã®ãš ã©ãŒãèŠåã®å Žæãžé£ãã§ããã. âã¯ããã¯ã¯ãªãŒã (éåŒçšèšå·). æ®éã®åŒçšèšå· (â) ã§ã¯ãªãã®ã§æ³šæ. æ®æ®µã㟠ã䜿ããªãäžã«, ããŒããŒãäžèŠã€ãã«ããäœçœ®ã«ãã.
M-x ã³ãã³ãã«ã€ããŠ
Emacs ã®æäœæ¹æ³ã®èª¬æã®äžã§, âM-x h ã³ãã³ãå iâ ãšããè¡šèšã䜿ããã. M-x ãšã¯å ·
äœçã«ã¯, M-(ã¡ã¿ããŒãšåŒã°ãã) ãš, x ãåæã«æŒãäºãæå³ãã. ã§ã¯ãã®ã¡ã¿ããŒãšã¯ã©ã®ããŒã®äºã (âMâ ã®äº ã§ã¯ãªãã®ã§æ³šæ)? ãããããäºã«, ããŒããŒãã®ã¿ã€ãã«ãã£ãŠéãäºãããäž, äœéããå ¥åã®ä»æ¹ããã. 奜㿠ã«å¿ããŠäœ¿ãåããŠæ¬²ãã.
å³ G1.1.2
M-x compile 㧠gcc ãå®è¡åŸã® Emacs ç»é¢
⢠Alt ã㌠(éåžžã¹ããŒã¹ããŒã®å·ŠåŽ). x ãšã®è·é¢ãè¿ãã®ã§éãã, 䜿ããªãäºããã. ⢠ESC ã㌠(éåžžå·Šäž). ã»ãŒç¢ºå®ã«äœ¿ããã x ãšã®è·é¢ãé ã. ãã®å Žåå®ã¯ ESC ããŒãš x ãåæã«æã€å¿ èŠã¯ ãªã (ESC ããŒãæŒããåŸ, x ãæŒãã°è¯ã).
⢠C-[ã㌠(Ctrl ããŒãš [ããŒãåæã«æŒã). ã©ãã§ã䜿ããŠ, ããã Ctrl ã¯å·Šæ, [ã¯å³æãªã®ã§, æ £ãããšéã. ãã®å Žåã C-[ããŒãš x ãåæã«æã€å¿ èŠã¯ãªã.
æºåèª²é¡ 1.6 äžã® ini.c ã, M-x compile ãçšããŠã³ã³ãã€ã«ãã. C-x âã§èŠåããšã©ãŒã®å Žæã«èªåçã«ã«ãŒãœã« ãé£ã°ããŠã¿ã. M-x compile ã§ã³ã³ãã€ã«ããé, -Wall ãšãããªãã·ã§ã³ãã€ããŠã¿ã (ã€ãŸã, gcc -Wall -o ini
ini.c). å€æ°ã®èŠå (ã¿ã€ããã¹ãããŠããã°ãšã©ãŒãåºããããããªã) ãåºåããã. ããããã®èŠåããšã©ãŒã®å Ž æã«ã«ãŒãœã«ãé£ã°ã, ãã®æå³ãèã, èŠåãåºãªãããã«ä¿®æ£ããŠã¿ã.
ãªã, M-x compile ãå®è¡ãããš, ç»é¢ãã²ãšãã§ã«äºã€ã«åå²ããã. å ã®ç¶æ ã«æ»ããããã°, C-x 1 ãå ¥åãã ãšå ã«æ»ã. Emacs ã§, ç»é¢ã®åå²ãç»é¢ã«è¡šç€ºããå 容ã»ãã¡ã€ã«ãåãæ¿ããæ¹æ³ã«ã€ããŠã¯, 4. ç¯ã«ãŸãšãã. æ©äŒã®ããæã«äžåºŠ, Emacs ã®ããã¥ã¢ã«ãèªãã§, ç»é¢åå², ãããå ã«æ»ã, ç»é¢éãè¡ãæ¥ãã, ç»é¢ã«è¡šç€ºã ããã¡ã€ã«ãå€ãã, ãªã©ã®æäœãåºããããã«ãªã£ãŠãããšè¯ã (å€ãã¯ã¡ãã¥ãŒããã§ãè¡ããã®ã§, ãªããªããã¡ ã¯ããã䜿ãã®ãè¯ã).
4. Emacs ã«ããããŠã£ã³ããŠ, ãããã¡ã®æ±ã Emacs ã§ã¯, åæã«è€æ°ã®ãã¡ã€ã«ãéããŠããããè¡ã£ããæ¥ããããªããç·šéããäºãåºæ¥ã. ç»é¢ãåå²ã㊠ååã«ãã¡ã€ã« A, ããååã«ãã¡ã€ã« B, ãšãããããªäºãæ®éã«ã§ãã. çŽç²ã«è€æ°ã®ãã¡ã€ã«ãç·šéããã ããªã,
Emacs ãè€æ°èµ·åããŠãããã®ãããããªãã, ãã®æ©èœã¯å ã® M-x compile ã, 以äžã§çŽ¹ä»ãã M-x gdb (Emacs å ã§ãããã¬ãå®è¡ããæ©èœ) ã䜿ã£ããšãã«, ã²ãšãã§ã«çºåããã (åæã«ç»é¢ãåå²ããã). ãããã£ãŠç»é¢ãåå² ããç¶æ ããå ã«ãã©ããã, åå²ããŠåºæ¥ãå°ç»é¢ã®éãè¡ãæ¥ããã, ããããã®å°ç»é¢ã«è¡šç€ºãããã®ãåãæ¿ã ãã, ãªã©ãèªåšã«ã§ããªããšæžæãäºã«ãªã.
å³ G1.1.3
Emacs ã®ãã¬ãŒã , ãŠã£ã³ããŠ, ãããã¡
ããã§ã¯ãããæ··ä¹±ãªãè¡ããããã®æäœéã®æŠå¿µãæžããŠãã. 説æã誀解ãªãè¡ãããã«ãŸãã¯èšèã«ã€ããŠ
(å³ G1.1.3 åç §) ãã¬ãŒã : Emacs ãç«ã¡äžãããšåºãŠããåè§å šäœã, Emacs ã§ã¯ãã¬ãŒã ãšåŒã¶. å€ãã®ã¯ãŒãããœããã§ãŠã£ã³ã ãŠãšåŒãã§ãããã®ã«ããã. ãŠã£ã³ã㊠: Emacs ã§ã¯, ãã¡ã€ã«ã®å 容ã M-x compile ã«ãããã³ã³ãã€ã©ã®åºåãªã©, äžãããŸãã®å 容ãç»é¢ã« 衚瀺ããŠããé åããŠã£ã³ããŠãšãã. äžè¬ã«ã¯ãã¬ãŒã ã®äžã« 1 ã€ãŸãã¯è€æ°ã®ãŠã£ã³ããŠãååšããŠããäºã« ãªã. ãããã¡ : ãã¡ã€ã«ã®å 容ã, M-x compile ã®çµæãªã©ãä¿æããŠããããã®ãã, Emacs ã§ã¯ãããã¡ãšåŒã¶. å ã® ãŠã£ã³ããŠãšäŒŒãŠããã, ãããã¡ã¯å¿ ãããç»é¢ã«è¡šç€ºãããŠãã (ãŠã£ã³ããŠãå²ãåœãŠãããŠãã) ãšã¯é ããªãäºã«æ³šæãå¿ èŠã§ãã. ã€ãŸã, Emacs ã§ãããã¡ã€ã«ãéãã°, ãã®ãã¡ã€ã«ã®å 容ãä¿æãããããã¡ã¯åžžã« (ãã¡ã€ã«ãéãããŸã§) ååš ããŠããã, åžžã«ãŠã£ã³ã㊠(ç»é¢) ã«è¡šç€ºãããŠãããšã¯éããªã. æ £ããªããã¡ã¯, èªåã®ç·šéããŠãããã¡ã€ã«ã®ãããã¡ããŠã£ã³ããŠããæ¶ããŠããŸããš, ãããåã³ãŠã£ã³ããŠã« 衚瀺ããæ¹æ³ãåããã, çµæãšããŠãã®ãã¡ã€ã«ãç·šéã§ããªããªã£ãã, ç·šéãã床㫠Emacs ãèµ·åãçŽãããã ã矜ç®ã«ãªãå¹çãæªã. æ £ããã°ç°¡åã§ããã, æ £ããªããã¡ã¯ã¡ãã¥ãŒããã»ãšãã©ã®æäœãè¡ãäºãåºæ¥ãã®ã§, 以äžããã¹ã¿ãŒããŠã»ãã (è¡š G1.1.1 åç §).
(1) äœã¯ãªããšã C-g: å ã«ã説æããã, Emacs ã§ã¯äžé£ã®ã³ãã³ãæäœããã£ãŠããæäžã«èš³ããããªããªã£ã
ã, C-g ã§è±åºã§ãã (ã³ãã³ãå®è¡åã®ç¶æ ã«æ»ã). 以äžããã£ãŠããæäžãåæ§.
(2) ãŠã£ã³ããŠãåå²ãã: åå²ããããŠã£ã³ããŠã®äžã«ã«ãŒãœã«ãããç¶æ ã§, C-x 2 (瞊åå²ã¯ C-x 3). ãŸãã¯
Emacs ã¡ãã¥ãŒ â File â Split Window ãããç¹°ãè¿ããšãããã§ãç»é¢ãåå²ããäºãåºæ¥ã. è€æ°ã®ãã¡ã€ã«ãèŠæ¯ã¹ãªããç·šéãããå Žåã«äœ¿ã. ãŸã, M-x compile ãã®ã¡ã«èª¬æãã M-x gdb ãå®è¡ ãããšã²ãšãã§ã«ãããå®è¡ããã.
(3) åå²ããããŠã£ã³ããŠéãè¡ãæ¥ãã: ããŠã¹ã§ç®çã®ãŠã£ã³ããŠã®äžãã¯ãªãã¯ããã, ãŸã㯠C-x o ãšãã.
(4) åå²ããããŠã£ã³ããŠã®ãã¡ã®äžã€ãç»é¢ããæ¶ã: ç®çã®ãŠã£ã³ããŠã®äžã«ã«ãŒãœã«ãããç¶æ ã§, C-x 0 ãšãã. ãŠã£ã³ããŠãæ¶ãã®ã§ãã£ãŠ, ãã¡ã€ã«ãéãã (ãããã¡ãæ¶ã) ã®ã§ã¯ãªãäºã«æ³šæ. ãããŸã§ãç» é¢ã«äœã衚瀺ãããããéžãã§ããã ãã§ãã. ç»é¢ããæ¶ãããããã¡ã¯, ããŠã£ã³ããŠã«è¡šç€ºããå 容 (ãã ãã¡) ãåãæ¿ãããã«ããæ¹æ³ã§åã³è¡šç€ºã§ãã.
(5) åå²ããããŠã£ã³ããŠã®ãã¡, äžã€ãé€ããŠå šéšç»é¢ããæ¶ã: ç®çã®ãŠã£ã³ããŠã®äžã«ã«ãŒãœã«ãããç¶æ ã§, C-x 1 ãšãã. ç»é¢ããã£ãããããããšãã«äœ¿ã.
(6) ãã¡ã€ã«ãéã: å¥ã®ãã¡ã€ã«ãéã (ç·šéãã) 床ã«æ°ãã Emacs ãç«ã¡äžããå¿ èŠã¯ãªã. C-x C-f ãŸãã¯,
Emacs ã¡ãã¥ãŒ â File â Visit New File ã§çŸåšã®ãŠã£ã³ããŠã«æ°ãããã¡ã€ã«ã衚瀺ããã. ããšããšè¡šç€ºãããŠãããã¡ã€ã« (ãããã¡) ã¯, éããã ãã®ã§ã¯ãªã, ãããŸã§ãŠã£ã³ããŠã«è¡šç€ºãããªããªã£ãã ãã®è©±ãªã®ã§æ³šæ. åã³è¡šç€ºããããã°, 以äžããŠã£ ã³ããŠã«è¡šç€ºããå 容 (ãããã¡) ãåãæ¿ããããåç §. ãŸã, äºã€ãšã衚瀺ããããã°, é©å®ãŠã£ã³ããŠãåå² ããŠè€æ°ã®ãŠã£ã³ããŠã衚瀺ããŠãã, ç®çã®ãŠã£ã³ããŠäžã§, ããŠã£ã³ããŠã«è¡šç€ºããå 容 (ãããã¡) ãåã æ¿ãããããã.
(7) ãŠã£ã³ããŠã«è¡šç€ºããå 容 (ãããã¡) ãåãæ¿ãã: Emacs ã¡ãã¥ãŒ â Buï¬ers ã§è¡šç€ºããç®çã®ãã¡ã€ã«ãéžæ æ £ããŠæ¥ãŠãã¡ãã¡ããŠã¹ã䜿ãã®ãé¢åã«ãªã£ãŠããã,
C-x b ãšãããš,
Switch to buï¬er (default . . . ):
è¡š G1.1.1 æäœå 容 æäœã®äžæ ãŠã£ã³ããŠåå² ãŠã£ã³ããŠé移å ãŠã£ã³ããŠãç»é¢ããæ¶ã äžã€ã®ãŠã£ã³ããŠã ããç»é¢ã«æ®ã ãã¡ã€ã«ãéã ãã¡ã€ã«ãéãã (ãããã¡ãæ¶ã) ãŠã£ã³ããŠã®è¡šç€ºå 容 (ãããã¡) åãæ¿ã ãããã¡ã®äžèŠ§
Emacs ãŠã£ã³ããŠã»ãããã¡æäœ
ããŒããŒã
C-g C-x 2 (瞊åå²: C-x 3) C-x o C-x 0 C-x 1 C-x C-f C-x k C-x C-b C-x C-b
ããŠã¹
Emacs ã¡ãã¥ãŒ â File â Split Window 移åå ãŠã£ã³ããŠã§å·Šã¯ãªãã¯
Emacs ã¡ãã¥ãŒ â File â Visit New File Emacs ã¡ãã¥ãŒ â Buï¬ers Emacs ã¡ãã¥ãŒ â Buï¬ers
ãšããã®ãç»é¢äžéšã«åºãã®ã§, ããã§ãã¡ã€ã«åãå ¥åãã. äžèŠ§ã衚瀺ããããã°ãã㧠htabi. ãŸã, éäž ãŸã§å ¥åã㊠htabi ãæŒãã°è£å®ã㊠(æ®ããè£ã£ãŠ) ããã. äžèŠ§ã衚瀺ãããšããã§èªåã®èŠèŠãã®ãããã¡ ã€ã«åã«å ããŠ, M-x compile ã®çµæã§ãããããã¡ã, Emacs ãåæã«äœã£ããããã¡ã衚瀺ãããã®ã§äžåºŠ 泚æããŠã¿ã.
(8) ååšããŠãããããã¡ã®äžèŠ§: Emacs ã¡ãã¥ãŒ â Buï¬ers ã§ã¡ãã¥ãŒã«ãããã¡äžèŠ§ã衚瀺ããã. ãŸãã¯
C-x C-b ã§ããã.
(9) ãããã¡ãæ¶ã (ãã¡ã€ã«ãéãã): ç®çã®ãããã¡ããŠã£ã³ããŠã«è¡šç€ºããŠ, ãã®ãŠã£ã³ããŠäžã«ã«ãŒãœã«ã ããç¶æ ã§,
C-x k ãšãããš
Kill buï¬er (default h ãã®ãã¡ã€ã«å i): ãšè¡šç€ºãããã®ã§ãã㧠Enter. æ¶ããããã¡ã€ã«ã®ååãåãã£ãŠããã®ã§ããã°, ãããªã C-x k ã§, äžèš ããã³ããã«å¯ŸããŠãã¡ã€ã«åãå ¥åããŠããã (ããã§ã htabi ãæŒããšäžèŠ§ãåºãŠããã, éäžãŸã§å ¥åããŠ
htabi ãæŒããšè£å®ãããŠãããããã). Emacs ã§ã¯ 10 ã 20 ã®ãããã¡ãä¿æããŠããã®ã¯ããããäºã§, ããŸãããŸãã«ãã¡ã€ã«ãéããå¿ èŠã¯ãª ã (ãããããŸãã«ä¿å C-x C-s ããŠããããš).
5. æ å ±æº: ããã¥ã¢ã«ã«ã€ã㊠æ¬è³æã§ãå¿ é ã®é ç®ã«ã€ããŠã¯, æäœæ¹æ³ãå«ããŠèª¬æããŠããã, ç¶²çŸ çã«èª¬æããäºã¯ã§ããªã. ã³ãã³ãã®äœ¿ ãæ¹, ãœããã®æäœæ¹æ³, C èšèªã®é¢æ°ãªã©, 詳现ãªæ å ±ãèªåã§èª¿ã¹ãããããã«ãªã£ãŠã»ãã. ããã§ãæ€çŽ¢ãšã³ãžã³ã¯å倧ãªããŒã«ã ã, Linux (UNIX) ã§ã¯ä»¥äžã®ãããªæ±ºãŸã£ãæäœã§, ä¿¡é Œã§ãã詳现ãªæ å ± ãåŸããã. ç©æ¥µçã«äœ¿ãããªãããš.
5.1 man ã³ãã³ã $ man h ã³ãã³ãå i $ man h é¢æ°å i ãªã©ã§, ã³ãã³ãã C èšèªã®é¢æ°ã®è©³çŽ°ãªããã¥ã¢ã«ã衚瀺ããäºãã§ãã. äŸ:
$ man gcc $ man open $ man -s 2 open man ã³ãã³ã㯠q ã§çµäºãã (less ã³ãã³ããèµ·åããŠããã®ã§æäœã¯ãããšåã). -s 2 ãšãããªãã·ã§ã³ã¯, ããã¥ã¢ã«ã®ç¬¬ 2 ç« ããæ€çŽ¢ãããšããæå³ã§, man ã ãã§ã¯ç®åœãŠã§ãªãããŒãžã衚瀺 ãããŠããŸã (äŸãã°, C èšèªã§äœ¿ã open ãšããé¢æ°ã«ã€ããŠç¥ãããã®ã ã, man open 㯠open ãšããã³ãã³ããè¡š 瀺ãããŠããŸã) æã«çšãã. 1 ç« ãã³ãã³ã, 2 ç« ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãçŽæ¥æäŸããŠããé¢æ° (ã·ã¹ãã ã³ãŒ ã«), 3 ç« ããã®ä»ã®é¢æ° (ã©ã€ãã©ãªé¢æ°) ã§ãã. å®éåé¡ãšããŠã¯, é¢æ°ã«ã€ããŠç¥ãããã®ã«ã³ãã³ããåºãŠã㊠ããŸã, ãšããå Žåã«, -s 2 ã-s 3 ãè©ŠããŠã¿ã, ãšãã䜿ãæ¹ãããäºãå€ã. åãå 容ã Emacs å ã«è¡šç€ºãããäºãã§ãã.
M-x man Manual entry: gcc ã®ããã«. ããã¯ç¹ã«, é¢æ°ã®äœ¿ãæ¹ã調ã¹ãŠ, å¿ èŠãª#include ã, åŒæ°ã®äžŠã³ãªã©ãã³ããŒããã®ã«äŸ¿å©ã§ãã (Emacs ã®ã³ããŒ&ããŒã¹ãããã¹ã¿ãŒããã). ãã®å Žåãç®åœãŠã§ãªãã³ãã³ããåºãŠããŸã£ãã,
M-x man Manual entry: -s 2 open ãªã©ãšãã.
5.2 info ã³ãã³ã 倧ããªã³ãã³ãã®æ¬æ Œçãªããã¥ã¢ã«ã¯, info ã³ãã³ãã§æäŸãããŠããäºãå€ã.
$ info gcc $ info emacs ãªã©. q ã§çµäº, ã¹ããŒã¹ã§ããŒãžãããã. ãã以å€ã®æäœã¯ Emacs ãšäŒŒãŠãã. ããé ç®ã衚瀺ãããæã¯, m ã æã£ãŠããé ç®åãå ¥åããã, è¡ãããé ç®ã®äžã«ã«ãŒãœã«ãæã£ãŠè¡ã£ãŠ m ãæã€.
$ info ã ãã§èµ·åãããšãã¹ãŠã® info ããŒãžã®äžèŠ§ãçŸãã. ããã Emacs å ã§èµ·åã§ã,
M-x info ãšãã. ãã²äžåºŠ, èªå® ãªã©ã§æéãåã£ãŠ, ãããã¥ã¢ã«é²èŠ§ã®ç·Žç¿ããããŠã¿ããšãã.
⢠man 㧠man ã³ãã³ãã®äœ¿ãæ¹ãçºããŠã¿ã ⢠man 㧠top ã³ãã³ãã®äœ¿ãæ¹ãçºããŠã¿ã ⢠info 㧠info ã®æäœæ¹æ³ãç¿åŸãã. ãŸãã¯ã¹ããŒã¹ããŒã§éããŠèªã. q ã§çµäº. ⢠info ã§, Emacs ã®äœ¿ãæ¹ãçºããŠã¿ã. äŸãã°ç»é¢ã®åå²ãåãæ¿ãã®æ¹æ³ã«ç¿çãã¹ã, ããã¥ã¢ã«ã®è©²åœã»ã¯ã·ã§ã³ãæ¢ããŠèªãã§ã¿ã.
6. ã ãã㬠ãããã¬ã¯ããã°ã©ã ãå®è¡ããªãããã®å éšã調ã¹ãäºãã§ããããŒã«ã§ãã. å ·äœçã«ã¯ä»¥äžã®ãããªäºãã§ãã.
(1) ããã°ã©ã ãå°ãã〠(äŸãã° 1 è¡ãã€) å®è¡ããã (2) ããã°ã©ã ãç¹å®ã®å ŽæãŸã§å®è¡ããã (3) ããã°ã©ã ã®å®è¡ãåæ¢ããå Žæã§, å€æ°ãåŒã®å€ã衚瀺ããã (4) ããã°ã©ã ã®å®è¡ãåæ¢ããå Žæã§, é¢æ°åŒã³åºãã®å±¥æŽ (ããã¯ãã¬ãŒã¹) ã衚瀺ããã ç¹ã«, ããã°ã©ã ã segmentation fault ãªã©ãèµ·ãããŠç°åžžçµäºããéã«, ãããã¬ãçšãããš, çºçããäœçœ®ã, ãã ã§ã®å€æ°ãåŒã®å€ã衚瀺ãããäºãã§ãã. segmentation fault ã§ã®çµäºã¯ãããªããã°æããããåŸãäºãé£ããã® ã§, ãããã¬ããã£ãšãéå®ãããå Žé¢ã§ãã.
6.1 ãããã¬ã®èµ·åãšçµäº ããã§ã¯æäœéã®ãããã¬ã®çšãæ¹ã説æãã. å€ãã®éšå㯠4 åŠæã®æŒç¿ã§ç¿ã£ãŠãããšæã. ã¹ããã 1: ã³ã³ãã€ã« : ããã°ã©ã ãã³ã³ãã€ã«ããéã«, -g ãªãã·ã§ã³ãã€ããŠã³ã³ãã€ã«ãã.
M-x compile Compile command: gcc -g -o ini ini.c ãã¡ãããã®ä»ã®ãªãã·ã§ã³ãã€ããŠããã. å®é, -Wall ãåžžã«ã€ããŠããã®ã¯ããç¿æ £ã§ãã. ã¹ããã 2: ãããã¬ãèµ·å : ãããã¬ãèµ·åããã³ãã³ãã¯, âM-x gdbâ ãšããã³ãã³ãã§ãã.
M-x gdb Run gdb (like this): gdb --annoteate=3 ini æåŸã®, âiniâ ã®éšåãå®éã«ãããã°ãããå®è¡å¯èœãã¡ã€ã«åã§, å¿ èŠã«å¿ããŠä¿®æ£ãã. äžèšãè¡ããš, Emacs ã®ç»é¢ãäºã€ã«å²ã, gdb ã®ããã³ãã (以äžã® (gdb)) ãçŸãã.
Current directory is /home/tau/ GNU gdb 6.8-debian Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type âshow copyingâ and âshow warrantyâ for details. This GDB was conï¬gured as âi486-linux-gnuâ... (gdb) ãã®ç¶æ ã§ã¯ãŸã ããã°ã©ã (ini) ã¯èµ·åããŠããªã. 以é gdb ã®ããã³ããã«æ§ã ãªã³ãã³ããå ¥åããäºã§, ããã°ã©ã ãçµäºãŸã§å®è¡ããã, å°ãã ãå®è¡ããã, åæ¢ããå Žæã§ã®ç¶æ ã調ã¹ããããäºãã§ãã. ã¹ããã 3: ããã°ã©ã ã®èµ·å : ãšãããããã°ã©ã ãèµ·åããŠã¿ã. run ã³ãã³ããããã°ã©ã ãæåããå®è¡ãã ããã®ã³ãã³ãã§ãã.
(gdb) run Daisuke Matsuzaka ã§, ini ã«, åŒæ° Daisuke Matsuzaka ãäžããŠå®è¡ãã (ã€ãŸãããã§, 端æ«ãã./ini Daisuke Matsuzaka ãš ããã®ãšåã. ã³ãã³ãå ini èªäœã¯ããã§æ¹ããŠäžããå¿ èŠã¯ãªã).
(gdb) run Daisuke Matsuzaka Starting program: /home/tau/ Daisuke Matsuzaka Initial of âDaisuke Matsuzakaâ is DM. Program exited with code 046. (gdb) ãªã, run ã®ä»£ããã« r ã ãã§ããã.
äžè¬ã« gdb ã¯ææ§ãããªããã°ãããã§ãã³ãã³ãã®ååãçç¥ã§ãã (äŸãã°æ¬¡ã«è¿°ã¹ã quit ã®ä»£ããã« q ã ãã§ããã, ãªã©). ã¹ããã 4: ãããã¬ãçµäºãã : çµäºããã«ã¯,
(gdb) quit ãšãã. æ£ããããã°ã©ã ããããã¬ã§å®è¡ããŠãããŸãé¢çœã¿ã¯ãªã. ä»åºŠã¯ ini ã足ããªãåŒæ°ã§å®è¡ã, å ã»ã©çºçã㊠ãã segmentation fault ã®çºçäœçœ®ãçªãæ¢ããã. ããäžåºŠ gdb 㧠ini ãå®è¡ããã, ä»åºŠã¯åŒæ°ã²ãšã€ã§å®è¡ãã. ã¹ããã 1,2 ã¯å ãšåãã§, ã¹ããã 3 ã§,
(gdb) run Daisuke ãšãã. ãããšä»¥äžã®ãããªã¡ãã»ãŒãžã衚瀺ããããšãšãã«, ãã®ãšã©ãŒãçºçããŠãããœãŒã¹ã³ãŒãäžã®äœçœ®ã衚瀺 ãããã§ããã.
(gdb) run Daisuke Starting program: /home/tau/ini Daisuke Program received signal SIGSEGV, Segmentation fault. 0x080483a7 in main (argc=2, argv=0xbf8815d4) at ini.c:5 ç»é¢ãèŠããš,
char f = fn[0]; ãšããè¡ã§ããã°ã©ã ãåæ¢ããŠãã â ãã®è¡ã®å®è¡äžã« segmentation fault ãçºçããŠãã, ãšããäºã瀺ãã㊠ãã (å³ G1.1.4).
Segmentation fault ã¯äžè¬ã«, äžæ£ãªã¡ã¢ãªã¢ãã¬ã¹ãåç §ããéâC èšèªã®èšèã§èšãã°, ééã£ãã¢ãã¬ã¹ãä¿ æããŠãããã€ã³ã¿ p ã, p[i], *p, p->f ãªã©ã®åŒã§åç §ããéâ ã«çºçãããšã©ãŒã§ãã, äžèšãèŠããš (ãããã)
fn ãšãããã€ã³ã¿ãäžæ£ãªã¢ãã¬ã¹ãä¿æããŠãã, ãããéã㊠fn[0] ãšããåç §ãè¡ã£ãŠããããã§ããããšæ³å ãã€ã. ããã確ãããã«ã¯, fn ãšããå€æ°ã«äœãšããã¢ãã¬ã¹ãå ¥ã£ãŠããããèŠããšãã. ããã«ã¯ print ã³ãã³ããçš ãã. print ã³ãã³ã㯠gdb å ã§åŒã®å€ã衚瀺ããã³ãã³ãã§ãã.
(gdb) print fn $4 = 0x0 (gdb) print fn[0] Cannot access memory at address 0x0 (gdb) å ¥ã£ãŠããã¢ãã¬ã¹ã¯ 0x0 (ã€ãŸã 0 çªå°. 16 é²æ°è¡šèš) ã§ãã, ããã¯äžæ£ãªãã€ã³ã¿ã®ä»£è¡šå€ã®ãããªç©ã§ãã. ã ã¡ããã¢ãã¬ã¹ãèŠãŠã©ã®ã¢ãã¬ã¹ãªãäžæ£ããäžè¬çã«å€æããã®ã¯é£ããã, 0 ã代衚ãšããŠ, éåžžã«å°ããæ°å㯠ã»ãŒééããªãäžæ£ã§ãã. 0x0 ãäžæ£ã§ããäºã¯, ãã®æ¬¡ã® print fn[0] ãå®è¡ããéã®ãšã©ãŒã¡ãã»ãŒãž (Cannot
access memory at address 0x0) ã§ç¢ºä¿¡ã§ãã. ä»åã®å Žå, ããã« 0x0 ãå ¥ã£ãŠããçç±ã¯, ã³ãã³ãã©ã€ã³åŒæ°ãäžã€ããäžããŠããã, argv[0], argv[1] ã«ã¯æå åãå ¥ã£ãŠããã, argv[2] ã«ã¯ 0x0 ãå ¥ã£ãŠããããã§ãã.
å³ G1.1.4
GDB å 㧠segmentation fault ãèµ·ããå Žæã衚瀺
6.2 é¢æ°åŒã³åºãå±¥æŽã®è¡šç€º (bt, up, down) åç¯ã§ã¯ããã°ã©ã ãåæ¢ããé, ç¹ã« segmentation fault ã§åæ¢ããéã«ãœãŒã¹ã³ãŒãã®äœçœ®ã瀺ããŠãããäºã èŠãã, æçµçã« segmentation fault ãèµ·ãããäœçœ®ã ãã§ã¯åœ¹ã«ç«ãã, ã©ã®ãããªé¢æ°åŒã³åºããçµãŠããã«ãã© ãçããŠããã®ããç¥ãããäºããã. ãã®ããã®æ©èœãããã¯ãã¬ãŒã¹ã衚瀺ãã (bt) ããã³, ãã¬ãŒã éã®è¡ãæ¥ ããã (up/down) ã³ãã³ãã§ãã. 説æã®ããã«, å ã»ã©ã®ããã°ã©ã ãå°ãä¿®æ£ããŠä»¥äžã®ããã«ãã. åã«, fn[0] ã®ããã«æååã®å é ãååŸããŠã ãéšåã, get ï¬rst char ãšããé¢æ°ãäœã£ãŠååŸããããã«ãã.
char get ï¬rst char(char * s) { return s[0]; } main(int argc, char ** argv) { char * gn = argv[1]; char * fn = argv[2]; char g = get ï¬rst char(gn); char f = get ï¬rst char(fn); printf(âinitial of â%s %sâ is %c%c.\nâ, gn, fn, g, f); } åãããã«-g ãã€ããŠã³ã³ãã€ã«ã, ãããã¬ã§, 足ããªãåŒæ°ã§å®è¡ãããš, åœç¶ã®äºãªãã, 3 è¡ç®ã® return s[0]; ã® è¡ã§ segmentation fault ãèµ·ãã.
(gdb) r Daisuke Starting program: /home/tau/ini2 Daisuke
Program received signal SIGSEGV, Segmentation fault. 0x0804837a in get ï¬rst char (s=0x0) at ini2.c:3 ãã€ã³ã¿ s ã®å€ã, s[0] ã衚瀺ãããäºã§, åãäºãèµ·ããŠãããšçŽåŸã§ãã.
(gdb) print s $1 = 0x0 (gdb) print s[0] Cannot access memory at address 0x0 ããã§, bt (backtrace) ã³ãã³ããå®è¡ãããš, ã©ã®ãããªé¢æ°åŒã³åºãã®çµæ, ãããžãã©ãçããŠããã®ãã衚瀺 ããã.
(gdb) bt #0 0x0804837a in get ï¬rst char (s=0x0) at ini2.c:3 #1 0x080483c2 in main (argc=2, argv=0xbfb59894) at ini2.c:10 ãã®å Žå, main ã get ï¬rst char ãåŒã³åºããŠãããšããè³æ¥µãã£ãšããªçµæã衚瀺ããã. ããŠå ã»ã©ãšéã, s=0x0 ã¯, é¢æ°ã®åŒæ°ãšããŠæž¡ãããç©ãªã®ã§, ééãã®ã倧å ã®åå ãã¯, ãã®é¢æ°ãåŒã³åºã ãå°ç¹ã«é¡ã£ãŠåããŠåãã. ãã®ããã«çšããã®ã up ã³ãã³ãã§ãã. up ã³ãã³ããå®è¡ãããš, Emacs äžã§ç¢å° ã, main é¢æ°å ã®, get ï¬rst char ãåŒã³åºãããå°ç¹ã«ç§»ã. ä»åºŠã¯ããã§, fn ã, ãã®ä», main é¢æ°å ã§å®çŸ©ãã㊠ããå€æ°ãçšããåŒãè©äŸ¡ã§ããããã«ãªã.
(gdb) up #1 0x080483c2 in main (argc=2, argv=0xbfb59894) at ini2.c:10 (gdb) p fn $2 = 0x0 容æã«æ³åã§ããéã, ãã®ç¶æ 㧠down ãå®è¡ãããšæ³šç®å°ç¹ãå ã«æ»ã.
6.3 ãã¬ãŒã¯ãã€ã³ããšã¹ãããå®è¡ (break, next, step, cont, ï¬ni) ãããã¬ãçšããŠããã°ã©ã ãæå®ã®äœçœ®ãŸã§å®è¡ãããã, äžè¡ãã€å®è¡ãããæ©èœã§ãã. ããããã¹ãŠã®åºæ¬ã¯, ãã¬ãŒã¯ãã€ã³ããšããæ©èœã§, ããã°ã©ã ã®éäžã«å° (ãã¬ãŒã¯ãã€ã³ã) ãã€ããäžã§ããã°ã©ã ãå®è¡ãã. ãã ã°ã©ã ã®å®è¡ãããã«éãããåæ¢ãã. åæ¢ãããããšã¯ segmentation fault ã§åæ¢ãããšããšåãã§, print ã bt,
up, down ã䜿ã£ãŠããã°ã©ã ã®ç¶æ ã調ã¹ãäºãã§ãã. ã¹ããã 1,2 : ããã°ã©ã ãã³ã³ãã€ã«ã, M-x gdb ã§ãããã¬ãèµ·åãããšãããŸã§ã¯ãããŸã§ãšåã. ã¹ããã 3 ãã¬ãŒã¯ãã€ã³ãèšå® : run ã³ãã³ãã§ããã°ã©ã ãèµ°ãããåã«, æ¢ããããšããã«ãã¬ãŒã¯ãã€ã³ãã èšå®ãã. ããã§ã¯ããã°ã©ã ã®å é ã§æ¢ãŸãããã«, main é¢æ°ã«èšå®ãã.
(gdb) break main Breakpoint 1 at 0x8048393: ï¬le ini2.c, line 7. break 㯠b ã§ããã. ã¹ããã 4 ããã°ã©ã ã®èµ·å : åŸã¯éåžžã©ããããã°ã©ã ãèµ°ããã.
(gdb) r Starting program: /home/tau/ini2 Breakpoint 1, main (argc=1, argv=0xbf8f3634) at ini2.c:7 ãããšããã°ã©ã ã main é¢æ°ã®å é ã§åæ¢ãã. Emacs äžã§ãœãŒã¹ãã¡ã€ã«äžã®åæ¢äœçœ®ã«å°ã衚瀺ããã.
ãã®ç¶æ ãã以äžã®ãããªæ段ã§ããã°ã©ã ããå°ããã€ãå®è¡ã§ãã.
break ãš continue : ããå°ãå ã«å¥ã®ãã¬ãŒã¯ãã€ã³ããèšå®ããŠãããŸã§é²ãã. ãã®å Žå, é²ããããã« run ã³ ãã³ãã§ã¯ãªã, continue ã䜿ã (run ã¯åžžã«ããã°ã©ã æåããã®å®è¡).
step : 1 æå®è¡ãã. ãã®æã«é¢æ°åŒã³åºããå«ãŸããŠããããã®é¢æ°ã®äžã«çªå ¥ãã (ã€ãŸãåŒã³åºãããé¢æ°ã®å é ã§åæ¢ãã).
next : 1 æå®è¡ãã. step ãšç°ãªã, ãããŸã§ä»ããæã®å®è¡ãçµãããšãããŸã§é²ã. ããããçµã¿åãããŠããã°ã©ã å®è¡äžã®ã©ã®æç¹ã§, ã©ã®ãããªç¶æ ã«ãªã£ãŠãããã調ã¹ãŠè¡ãäºãã§ãã. ãªã, ãã¬ãŒã¯ãã€ã³ãã¯ä»¥äžã®å Žæã«èšå®ããäºãã§ãã. é¢æ°ã®å é :
(gdb) break h é¢æ°å i äŸ:
(gdb) b main ãœãŒã¹ã³ãŒãäžã®æå®äœçœ® :
(gdb) break h ãœãŒã¹ãã¡ã€ã«å:è¡çªå· i äŸ:
(gdb) b ini.c:5 Emacs ã®ããŒæäœ : åé ãšåãäºã, Emacs ã§ãœãŒã¹ã³ãŒãäžã®ãã¬ãŒã¯ãã€ã³ããèšå®ãããè¡ã«ã«ãŒãœã«ã移å ããŠ, C-x SPACE ãæã€äºã§ã§ãã.
6.4 ãããã¬: ãŸãšã ã³ãã³ããšããŠã¯ä»¥äžèŸºããæããŠãããšãã. display, ï¬nish ã¯æ¬è³æã§ã¯èª¬æããŠããªã. gdb ã®äœ¿ãæ¹ã«ã€ã㊠ãæ¯é, info ãªã©ã§äžåºŠæéãåã£ãŠã¿ãŠã¿ããšãã.
⢠q(uit) ⢠r(un) ⢠p(rint), disp(lay) ⢠bt, up, down ⢠b(reak), n(ext), s(tep), c(ont), ï¬ni(sh)
7. C ããã°ã©ã ã®ãããã° ä»åã®èª²é¡ã¯ C ããã°ã©ã ã®ééããä¿®æ£ããäºã§ãã. C èšèªã«é¢ãã埩ç¿, ãããã¬ã®äœ¿ãæ¹ã®åŸ©ç¿ãšã¬ãã«ã¢ã ã, ããé«æ¬¡å ãª, ããããã°ã®ä»æ¹ (6= ãããã¬ã®äœ¿ãæ¹)ãã身ã«ã€ããç·Žç¿ãšæã£ãŠ, ã¯ã€ãºæ°åã§åãçµãã§ã»ãã.
æ¬èª²é¡ 1.7 èª²é¡ HP ã«ã¢ã¯ã»ã¹ãããš, ããããã®ãééã£ããããã°ã©ã ã®å ¥ã£ããã¡ã€ã«ããããŠãã. ããã ã«å«ãŸããééããä¿®æ£ã, æ£ããåãã. ã³ã³ãã€ã«ããéã¯æçµçã«ã¯, -Wall ãªãã·ã§ã³ãã€ããŠ, èŠåãåºãªã ãªãããã«ãã. æé :
ãã¡ã€ã« problems.tar.gz ãããŠã³ããŒãããã, ããã以äžã§å±éãã.
$ tar xvf problems.tar.gz
ãããš, problems ã®äžã«å€æ°ã®ãµããã£ã¬ã¯ã㪠00, 01, . . . , ãã§ãã. äžã€ã®ãã£ã¬ã¯ããªãäžåã«çžåœãã. åã㣠ã¬ã¯ããªã®ãã¡ã€ã«ãã³ã³ãã€ã«ããŠå®è¡ã, æ£ããåäœããããäºãç®æšã§ãã. ã³ã³ãã€ã«æã«ãšã©ãŒã«ãªã£ããã ããèªãã§ä¿®æ£ãã. ç¡äºã³ã³ãã€ã«ã§ãããå®è¡ãã. å®è¡ã®ä»æ¹ (äžããã¹ãã³ãã³ãã©ã€ã³åŒæ°ãªã©) ãš, ãã®ã ãã°ã©ã ãæå³ããŠããèšç®å 容ã¯, ããã°ã©ã å é ã«ã³ã¡ã³ããšããŠæžããŠããã®ã§, ãããèªãããš. åŒæ°ãäžãã å Žå, ãããããªåŒæ°ã§æ£ããåãäºãç®æšã«ãã. äŸ 1:
$ cd 00 $ gcc p00.c $ ./a.out
# ããã§ãšã©ãŒãåºããä¿®æ£ # ããã§ãšã©ãŒãåºããåäœããããããã°ä¿®æ£
ãã¡ããã³ã³ãã€ã«ã«ã¯ M-x compile ã䜿ãäºãæšå¥šãã. äŸ 2:
$ cd 03 $ gcc p03.c $ ./a.out 3 3^2 = 8
# åŒæ°ã«ã€ããŠã¯ p03.c ã®ã³ã¡ã³ããèªã # ééã! ä¿®æ£
ãããããªã¬ãã«ã®ééããå«ãŸããŠãã. ãããã«å¯Ÿã, ãã®æå³ãããšãããæ£ããææ¡ããŠ, ä¿®æ£ããã®ã課é¡ã§ ãã. æ£ããããã°ã©ã ã«ããããã«å¿ èŠãªä¿®æ£ã®éã¯, æåæ°ã»è¡æ°ãšããŠã¯ã©ãããããã§ãã. ãŸã, åã ã®ãã ã°ã©ã ã¯äžããæžããŠãããã«æžããŠããŸããããªåçŽãªç©ããã. ã ãããšãã£ãŠäžããããããã°ã©ã ãç¡èŠããŠ, ãšãããåãããã°ã©ã ãæžããŠ, ãã¯ãã§ããŸããããšããã®ã¯ãã®æŒç¿ã®æå³ãããšããã§ã¯ãªã. ãããŸã§, äžã ãããããã°ã©ã ã®, ãã©ãã, ãªãééã£ãŠããããæ±ãããã®ãç®æšã§ãã. ãèªåã¯å»è , ããã°ã©ã ã¯æ£è ããšèš ãã€ããã§, çç¶ããééããã蚺æãã説æãããŠã»ãã. ãã³ããšããŠ, ã©ã®ãããªæ®µéã§ã©ã®ãããªçš®é¡ã®ãšã©ãŒ ãåŸ ã¡åããŠããã®ã, ãã®ããã€ããåæããŠãã (以äžã¯ä»åŸãå®éã«ééãã, å žåçãªãšã©ãŒã§ãã). ã³ã³ãã€ã«ã»ãªã³ã¯æã®ãšã©ãŒ : gcc ããšã©ãŒãåºåãã.
⢠ææ³ãšã©ãŒ ⢠åãšã©ãŒ ⢠é¢æ°å®£èšã®æ¬ åŠã«é¢ããèŠå ⢠ãªã³ã¯ãšã©ãŒ. ããã°ã©ã äžã§äœ¿çšããŠããé¢æ°ãã©ãã«ãå®çŸ©ãããŠããªã, ãšãããšã©ãŒ. ãããçŽã ã«ã¯ gcc ãèµ·åããã³ãã³ãã©ã€ã³ã«, ãããªãã·ã§ã³ãè¿œå ããå¿ èŠããã. å®è¡æã®ãšã©ãŒ : å®è¡å¯èœãã¡ã€ã«ãã§ããã, å®è¡ãããšãšã©ãŒã¡ãã»ãŒãžã衚瀺ããŠéäžã§çµäºãã.
⢠segmentation fault ⢠assertion ãšã©ãŒ (âAssertion âx == yâ failed.â ã®ãããªã¡ãã»ãŒãž) ⢠ãã®ä»ã®ãšã©ãŒ (âfopen: No such ï¬le or directoryâ ã®ãããªã¡ãã»ãŒãž) åäœã»åºåã®ééã : å®è¡å¯èœãã¡ã€ã«ãã§ã, å®è¡ããŠããããããŸãªãšã©ãŒã¯ã§ãªãã, çããªã, åäœãªãããã ãã. ãã¡ããæåŸã®ã¿ã€ãã®ãšã©ãŒã, å®éãšã©ãŒã§ãããšãããããã«ã¯, ãããããã®ããã°ã©ã ãäœããããã¯ãã®ã ããã°ã©ã ãªã®ãã, ã©ããã§èŠå®ãããŠããªããŠã¯ãªããªãã, åºåããåžžèçã«å€æããŠã»ãã (äŸãã°ããã°ã©ã ã®åºåã, â10 + 20 = 50â ã ã£ãã, ããã¯ãããããšããäº). ããã°ã©ã èªèº«ã¯é«åºŠã§ããªããã°, 圹ã«ç«ã€ç©ã§ããªã. ãããŸã§, C èšèªã®èŠåãããç¥ãäº, ããã°ã©ã ã®å®è¡ èŠåãç¥ãäº, åé¡ç©¶æã®ããã®èãæ¹ãç¿åŸããäº, ãã®ããã®éå · (ãããã¬ãªã©) ãç¿åŸããäºãç®çã§ãã. å ·äœ çã«ã¯æ¬¡ã®ãããªæŠå¿µãéå ·ããç·Žç¿ãããäºãå¿ãããããš.
⢠ã³ã³ãã€ã«æã®ãšã©ãŒã¯, ãã¡ããšãšã©ãŒã¡ãã»ãŒãžãèªãã§, äœãèšãããŠããã®ã, ãªãããããšã©ãŒã«ãªã ã®ã, C èšèªã®èŠåãç解ããããš (åœãŠãã£ãœãã§ããã°ã©ã ãä¿®æ£ããªã).
⢠M-x compile ãš, C-x âã«ãã£ãŠã³ã³ãã€ã«ãšã©ãŒã®äœçœ®ãžèªåçã«é£ã¶, ã䜿ãããªãã㚠⢠segmentation fault ãªã©ç°åžžãªçµäºã®ä»æ¹ãããã, ãœãŒã¹ãåœãŠããªãçºããã®ã§ã¯ãªã, ãŸã㯠M-x gdb ã§, ãããçºçããŠããå Žæãçªãæ¢ããããš. åœãŠãã£ãœãã§çŽã, ã®åã«ãªããããèµ·ããã®ããç解ããããš.
segmentation fault ã¯è§Šã£ãŠã¯ãããªãã¡ã¢ãªçªå°ã觊ã£ãæã«ããã. ãããèµ·ããçç±ã®ã»ãšãã©ã¯, é åã® æ·»åã«ãã®èŠçŽ æ°ä»¥äžã®å€ãæå®ããå Žå, ãã€ã³ã¿å€æ°ã«ééã£ãå€ãå ¥ã (ãããã¯å€ãå ¥ãå¿ã) ãŠããã éããŠã¡ã¢ãªãã¢ã¯ã»ã¹ããå Žå, ã§ãã (*p, p[i], pâf ãªã©).
⢠assertion ãšã©ãŒã¯çºçäœçœ® (ãœãŒã¹ãã¡ã€ã«åãšè¡çªå·) ãã²ãšãã§ã«è¡šç€ºãããã, ãã¯ã M-x gdb ã§çªãæ¢ ããã®ãç°¡åã§ãã.
⢠ãã®ä»ã®å®è¡æãšã©ãŒã«ã€ããŠã, ããã°ã©ã ãçµäºããéã«åŒã°ãã exit, abort ãªã©ã®é¢æ°ã«ãã¬ãŒã¯ãã€ã³ ããä»æã (break exit) ãŠå®è¡ããäºã§ææã§ãã. up ã³ãã³ãã䜿ã£ãŠ exit/abort ãåŒã³åºããå°ç¹ã«æ»ã äºã§, åé¡ã®çºçå Žæãçªãæ¢ãããã.
⢠äžè¬ã«, ããã°ã©ã ã®å ¥åãå€ããããå Žå, ãã®å ¥åãè²ã ãããŠæåãæ¢ã. ãã®é, ããšã©ãŒãåºããªãã¹ ãå°ããªå ¥åãçªãæ¢ããããšããèãæ¹ãéèŠã§ãã. ãã®æ¹ãå§åçã«ãããã°ã¯æ¥œã«ãªãã, ãããã§ãã æç¹ã§åå ãæšæž¬ã§ããŠããŸãäºãå€ã.
⢠ããã°ã©ã ã®æåã調ã¹ãã®ã«ã¯ããã°ã©ã ãã©ããå®è¡ããŠãã, ãã®æã«å€æ°ã®å€ãäœã§ãããã調ã¹ãã® ãåºæ¬ã§ãã. printf ãã¯ããã§èŠæã§å€æ°ãåŒã®å€ã衚瀺ãã, ãããã âprintf ãããã°â ã¯æå¹ã§ãã.
8. Linux ã䟿å©ã«äœ¿ãããã®ããŸã 8.1 ããã«ã«ã¢ããªã±ãŒã·ã§ã³ãç»é²ãã ã¡ãã¥ãŒããã¢ããªã±ãŒã·ã§ã³ãæ¯åéžæãã代ããã«, ããã«ã«ç»é²ããŠããäºãã§ãã.
(1) ç®çã®ã¢ããªã±ãŒã·ã§ã³ãã¡ãã¥ãŒã«è¡šç€ºãããŠ, ãã®ã¢ããªã±ãŒã·ã§ã³ã®äžã§å³ã¯ãªã㯠(2) ããã®ã©ã³ãã£ãããã«ã«è¿œå ã ããããŠ, 端æ«ãš Emacs ã¯æ¯åã¡ãã¥ãŒãäœå±€ããã©ããã«èµ·åã§ããããã«ããŠãããšè¯ã.
8.2 ããã«ã« CPUã»ãããã¯ãŒã¯äœ¿çšéã衚瀺ãã ããã«ã«åžžæ, CPU ããããã¯ãŒã¯ã®äœ¿çšéã衚瀺ããŠãããš, èªåã®ããã°ã©ã ãèµ°ãåºããæã®å€åãèŠãã㊠é¢çœãäž, ééããæ¢ãå©ãã«ããªã (å Žåããã).
(1) ããã«ã®ç©ºçœéšåãå³ã¯ãªã㯠â ããã«ãžè¿œå â ã·ã¹ãã ã¢ãã¿ ãéžæ (2) ããã»ããµæ¶è²»éã®è¡šç€ºãããã«ã«çŸãã. ãããå³ã¯ãªã㯠â èšå® (3) ãç£èŠãããªãœãŒã¹ãã§, ããã»ããµ, ã¡ã¢ãª, ãããã¯ãŒã¯ãéžæ. ä»ã«ã衚瀺ããããã°èªç±ã«éžæ. 8.3 ãœãããŠã§ã¢ããã±ãŒãžãã€ã³ã¹ããŒã«ãã æŒç¿ã§äœ¿ãå€ãã®ãœãããŠã§ã¢ã¯ãã§ã«ã€ã³ã¹ããŒã«ãããŠããã, æ°ããããã±ãŒãžãå ¥ããã®ãç°¡åãªã®ã§, ãã æ¹ãèŠããŠãããšè¯ã. æ¹æ³ 1 GUI :
(1) ã¡ãã¥ãŒãã, ã¢ããªã±ãŒã·ã§ã³ â è¿œå ãšåé€ ãéžæ (2) 奜ããªã¢ããªã±ãŒã·ã§ã³ãéžãã§ãå€æŽã®é©çšã. ããã¯, ãã©ããªã¢ã㪠(ã²ãŒã ?) ãããã®ã ããããšãããããªãšãã«æçšã§ãã. æ¹æ³ 2 apt-get ã³ãã³ã : ã€ã³ã¹ããŒã«ããããœããã®åå (ããã±ãŒãžå) ãåãã£ãŠããå Žå, root ãŠãŒã¶ã«ãªã£ ãåŸ, ã³ãã³ãã©ã€ã³ã§, apt-get ã³ãã³ãã§ã€ã³ã¹ããŒã«ã§ãã. äŸãã° âiperfâ ãšããããã±ãŒãžãå ¥ãããšèš ãäºã«ãªã£ãã,
$ sudo apt-get install iperf ã§ãã. ã©ã®ãããªããã±ãŒãžãã€ã³ã¹ããŒã«ã§ãããã®æ€çŽ¢ã¯,
$ apt-cache search h ããŒã¯ãŒã i
ã§ã§ãã. ã²ãŒã ãæ¢ãããã®ãªã,
$ apt-cache search game ãŸã, ã䜿ãããã³ãã³ãåãããã®ãŸãŸããã±ãŒãžåã«ãªã£ãŠããäºãå€ã. ãããã£ãŠããã³ãã³ãã䜿ã£ãŠ, ãã ããªã³ãã³ãã¯ãªãããšããããã,
$ sudo apt-get install h ãªããšããããã³ãã³ãå i ãšããã°, 10 ç§åŸã«ã¯äœ¿ããç¶æ ã«ãªã£ãŠããäºãå€ã. ãã以åã«, Ubuntu ã®å Žå, æåãªã³ãã³ãã«ã€ããŠã¯, ãã ããªã³ãã³ãã¯ãªãããšèšããããšãã«ããã±ãŒãžåãæããŠãããäºããã.
$ sl ããã°ã©ã âslâ ã¯ãŸã ã€ã³ã¹ããŒã«ãããŠããŸããã 次ã®ããã«å ¥åããäºã§ã€ã³ã¹ããŒã«ã§ããŸã:
sudo apt-get install sl bash: sl: command not found GUI ãçšããæ¹æ³ã§, æçšãã, é¢çœãããªã¢ããªã±ãŒã·ã§ã³ãæ¢ããŠã€ã³ã¹ããŒã«ããŠã¿ã. apt-cache search ã§ãæ¢ ããŠã¿ã.
第2æ¥
ãã¡ã€ã«ã®èªã¿æžããš, é³ããŒã¿ã®å ¥åºå
ä»åã¯ãã¡ã€ã«ã®èªã¿æžããäžå¿ã«è¡ã.
2 幎 4 åŠæã« C èšèªã®æšæºã©ã€ãã©ãª (fopen, fprintf ãªã©) ãçšãããã¡ã€ã«å ¥åºåããã£ããšæãã, ããã§ã¯ UNIX ã®ã·ã¹ãã ã³ãŒã«ãçšãããã¡ã€ã«å ¥åºåã«ã€ããŠçŽ¹ä»ãã. é¢æ°åãšããŠã¯, open, read, write, close ã® 4 〠ãçšãã. äž¡è ã®éã, ãªããã®å®éšã§ãã¡ããçšããã®ãã«ã€ããŠã軜ã觊ãã. ãã®éçšã§, ãã¡ã€ã«ã®äžèº«ããã ã€ãã®åããšããŠæ£ããç解ã§ããããã«, å¥ã®èšèã§èšãã°ããã€ããªãã¡ã€ã«ã®èªã¿æžããæ··ä¹±ãªãã§ããããã«ã ãªã£ãŠã»ãã. 次ã«, ããç¹å¥ãªãã¡ã€ã« (/dev/dsp) ãèªã¿æžãããã ãã§, é³ã®å ¥åºåãè¡ããäºã説æãã. ãããã£ãŠããã° ã©ãã³ã°ãšããŠã¯, ãã¡ã€ã«ã®å ¥åºåãã§ããã°é²é³ã»åçãè¡ãã äºã«ãªã. é³ãè¡šçŸããããŒã¿åœ¢åŒãéåžžã«æ±ã ãããç©ã§, åæå»ã«ãããæ¯å¹ ããã®ãŸãŸäžŠã¹ãã ãã®ç© (Linear PCM) ã§ãã. æåŸã«, åŸã 波圢ããŒã¿ã解æãããå€æãããããããã®å©ããšããŠ, ã°ã©ããå¯èŠåããããŒã« gnuplot ã«ã€ã㊠åŠã³, é²é³ã»åçãããé³ãå¯èŠåãã.
1. ãã¡ã€ã«å ¥åºå 1.1 ãã¡ã€ã«ãžã®åºåãšãã¡ã€ã«ã®äœæ ãŸãã¯ãã¡ã€ã«ã«ããŒã¿ãæžã蟌ãç·Žç¿ãããŠã¿ãã. åºæ¬ãã©ãŒã ã¯ä»¥äžã®ããã«ãªã. ã¹ããã 1: ãã¡ã€ã«ãéã :
int fd = open(filename, O WRONLY | O CREAT | O TRUNC, 0644); ãã©ã°ããããããã, ããããã£ãŠãã¡ã€ã«ãäœããšãã¯ãããã, ãšèŠããŠããã°è¯ã.
⢠O WRONLY ã§, filename ãæžã蟌ã¿ã¢ãŒãã§éãäº, ⢠O CREAT ã§, filename ããªããã°äœãäº, ⢠O TRUNC ã§, filename ãååšããŠããŠãäžåºŠç©ºã«ãã (äžããäœãçŽã) äº, ⢠æåŸã® 0644 ã¯, ãããã㧠filename ãäœãããå Žå, èªã¿æžãæš©éã誰ã«äžããããšããäºãæå®ããŠã ãã, ãšãããããã®å®éšã§ã¯ 0644 以å€ã¯äœ¿ããªã. ãã®ãã¿ãŒã³ã¯ãã䜿ãã®ã§, äžãšåãäºããã creat ãšããã·ã¹ãã ã³ãŒã«ããã.
ããã䜿ã£ãŠäžèšã
creat(filename, 0644) ãšæžããŠãè¯ã. ã¹ããã 2: æžãããããŒã¿ãé åã«æºåãã : å®éã«æžãããããŒã¿ãäœããšããã ãã, ãã¡ããããã°ã©ã ã«ã㣠ãŠåå·®äžå¥ã§ãã. 以äžã¯ãããŸã§äžäŸ.
unsigned char data[N]; data[0] = . . . ; data[1] = . . . ; ... ã¹ããã 3: ããŒã¿ãæžã :
write(fd, data, N); ããã§, data[0], data[1], . . . , data[Nâ1] ã® N ãã€ãã filename ã«æžã蟌ãŸãã. äžè¬ã«, write(fd, a, n) ã¯, 㢠ãã¬ã¹ a ããå§ãŸãæ倧 n ãã€ãã, fd (ãè¡šããŠãããã¡ã€ã«) ã«æžã蟌ã, ãšããäºã§ãã. ãã ã, èŠæ±ãã N ãã€ããã¹ãŠãæžã蟌ãŸãããšã¯éãã, ããæªæºã®ããŒã¿ (1 ãã€ã以äž) ã ããæžã蟌ãŸã ãäºãããã®ã§æ³šæãå¿ èŠã§ãã. å®éã«æžã蟌ãŸãããã€ãæ°ãè¿ãå€ã«ãªã. 倱æããå Žåã¯äœãè¿ãã? ã
ã¡ããšããã¥ã¢ã«ã§èª¿ã¹ã (第 1 ç« , 5. ç¯åç §). ãã¡ãã, write ã¯å¥œããªã ãç¹°ãè¿ãåŒã³åºããŠãã. ãã®å Ž å, write ãåŒã³åºããé ã«, ãã¡ã€ã«å ã«ããŒã¿ãé ã«æ ŒçŽããã. ã¹ããã 4: ãã¡ã€ã«ãéãã :
close(fd); ããä»¥äž write ã§ããŒã¿ãæžã蟌ãäºã¯ã§ããªããªã. ãŸã open ãšããã·ã¹ãã ã³ãŒã«ãåŒã¶ãš, ãã®ãã¡ã€ã«ã«æžããŠãã蚌ããšããŠ, æŽæ° (ãã¡ã€ã«ãã£ã¹ã¯ãªãã¿ãš åŒã°ãã) ãè¿ããã. ããšã¯åã ã®èªã¿æžãã, 䜿ãçµããåŸãã¡ã€ã«ãéããéã«, ããã§è¿ãããå€ãæž¡ã.
open ãš write ã®é¢ä¿ã¯, ãã£ãºããŒã©ã³ãã®ãªããšããã¹ããŒããš, ä¹ãç©ã®é¢ä¿ã«äŒŒãŠãã. äžåºŠåžå£²ãå Žã§ãã¹ ããŒããè²·ã (open), ãããæã«ãããåã ã®ä¹ãç©ã«ä¹ã (write ãã) ãšãã¯ãã®ãã¹ããŒããèŠããã° (fd ãåŒæ° ã«æž¡ãã°) ãã. ãã¡ã€ã«å ¥åºåã«éãã, ãã®ãããªãã¿ãŒã³âæåã®åŒã³åºãã§ãäœãããè¿ãããŠ, ãã®è¿ããã ãäœããããã®åŸåŒã³åºãé¢æ°ã«æž¡ãâã¯ãããããªå Žé¢ã§çŸãã.
æºåèª²é¡ 2.1 ãã¡ã€ã«ã®ç¬¬ 0 ãã€ãç®ã« 0, 第 1 ãã€ãç®ã« 1, . . . , 第 255 ãã€ãç®ã« 255, ãå ¥ã£ãŠãããããª, 256 ãã€ãã®ãã¡ã€ã« my data ãäœã C ããã°ã©ã mk data.c ãäœã. mk data.c ã¯, open, write, close ãçšããŠãã¡ ã€ã« my data ãäœæãã.
ãã®ããã°ã©ã ãç¡äºã³ã³ãã€ã«ããã«ã¯, ããã€ãã®ããããã¡ã€ã« (.h ã§çµãããã¡ã€ã«) ã#include ããæ瀺 ãæžããªããŠã¯ãªããªã (#include <????.h>). ã©ã®ãã¡ã€ã«ã#include ããã°ããã®ãã, man ã³ãã³ãã§èª¿ã¹ ãŠ, æ£ããã³ã³ãã€ã«ãã (第 1 ç« , 5. ç¯åç §). 以éã, C èšèªã§æäŸãããŠããé¢æ°ã䜿ãã«ã¯, ããããããã¡ã€ã« ã#include ããªããã°ãªããªã, ãšããå Žåããã°ãã°çŸããã, äžã æããªã.
æºåèª²é¡ 2.2 mk data.c ãå®æã, ç¡äº my data ãã§ããã, ls ã³ãã³ã (-l ãªãã·ã§ã³) ãçšããŠ, å®éã«ãã¡ã€ã« ã 256 ãã€ãã§ããäºã確èªãã. ãŸã, ãã®ãã¡ã€ã«ã cat ã³ãã³ãã Emacs ã§éããŠ, ã©ããªé¢šã«èŠããã, èŠãŠ ã¿ã.
æºåèª²é¡ 2.3
⢠第 0 ãã€ãç®ã« 228 ⢠第 1 ãã€ãç®ã« 186 ⢠第 2 ãã€ãç®ã« 186 ⢠第 3 ãã€ãç®ã« 229 ⢠第 4 ãã€ãç®ã« 191 ⢠第 5 ãã€ãç®ã« 151 ãšãã, 6 ãã€ããããªããã¡ã€ã« hitoshi ãäœãããã°ã©ã hitoshi.c ãäœã, åãäºãããŠã¿ã.
泚æ:
äŸãã°æåã®åé¡ã«å¯ŸããŠä»¥äžã®ãããªçµæãæåŸ ããŠããã®ã§ã¯ãªã.
012345678910111213...253254255
åæ§ã« 2 åç®ã®åé¡ã«å¯ŸããŠ, 以äžã®ãããªçµæãæåŸ ããŠããã®ã§ã¯ãªã.
228186186229191151 èšãæããã°ããã§èšãã第 0 ãã€ãç®ã« 0ããšããã®ã¯, ãããŸã§ãæŽæ°ã® 0ã, ãã㊠2 é²æ°ã§æžãã° 00000000 ãš ãã 8 ãããã®äºãèšã£ãŠããã®ã§ãã£ãŠ, æåã®â0â ã®äºãèšã£ãŠããã®ã§ã¯ãªã. ãã®è©±ãããåãããªããšæããã以äžã®æ®µèœãèªãã§, ãã¡ã€ã«ã®äžèº«ã«äœãæ ŒçŽãããŠããã®ãã«ã€ããŠç解ã ããŠãããŠã»ãã.
ãã¹ãŠã®ãã¡ã€ã«ã¯, ãã€ãå (ãããå) ã«éããªã
(1) ãã¡ã€ã«ã¯èšããŸã§ããªãããŒã¿ãæ ŒçŽããç©ã§ãã. (2) ãã®ããŒã¿ãšã¯, ãã€ãããããããšäžŠãã ç©ã§ãã. (3) 1 ãã€ã㯠8 bit ã®äºã§ãã£ããã, 1 ãã€ã㯠256 éãã®å€ãåºå¥ã§ãã. (4) ããã 0 ãã 255 ãŸã§ã®æ°åã ãšæãã°, èŠããã«ãããããã¡ã€ã«ã®äžèº«ã¯, ã0 . . . 255 ãŸã§ã®ã©ããã®æ°åãããããããšäžŠãã§ãã ç©ãªã®ã§ãã. ããå°ãå ·äœçã«èšãã°, ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãããã°ã©ã ã«å¯ŸããŠæäŸããŠãããã¡ã€ã«ã®å ¥åºåæ©èœã,
⢠ãã®ãã¡ã€ã«ãã X ãã€ãèªãŸããŠäžãã â 0, . . . , 255 ãŸã§ã®æ°åã X å䞊ãã ç©ãè¿ã£ãŠãã ⢠0, . . . , 255 ãŸã§ã®æ°åã X å䞊ãã ç©ãæž¡ããŠ, ãã®ãã¡ã€ã«ã« X ãã€ãæžãããŠãã ãã â ããããã¡ã€ã« ã«æžããŠããã ãšããã ãã®ç©ã§ãã£ãŠ, ãã¹ãŠã¯ãããåºæ¬ãšããŠãã, ãšããäºã§ãã. èšããããŸã§ããªãåœããåã®è©±ãšæ ããããããªãã, ãããŸã§ãã¡ã€ã«ã®èªã¿æžãã¯ããã¹ã (æå) ãããã£ã äºããªã, ãšãã人ã¯æ··ä¹±ã®å ãšãªããããããªãã®ã§ãã泚æããŠã»ãã. ãšãããããã£ãŠããã¹ãäºã¯, ãã¡ã€ã«ã«æ ŒçŽãããŠããç©ã¯ (ã©ããªãã¡ã€ã«ã§ãã£ãŠã), ã0 . . . 255 ãŸã§ã®ã© ããã®æ°åãããããããšäžŠãã ç©ã§ãã, ãã¡ã€ã«ã®äžã«ãã以å€ã®ç©âãæåããçµµâãªã©ãšããç©ã¯ãªã. ãã® æ§ã«èšããš, ããã¡ãã£ãšåŸ ãŠ, å åŠæç¿ã£ã fprintf é¢æ°ã§,
fprintf(fp, âhello\nâ); ã®ããã«æžãã°ãã¡ã€ã«ã«, hello ãšããæååãæžãã, ããã¯ãšãã£ã¿ã§ãã®ãã¡ã€ã«ãéãã°ç¢ºèªã§ããã§ã¯ãªã ã, ããã¯ãæåããæžããŠããã§ã¯ãªãã®ã? ãšããçåãæã€äººããããšæã. ãããå®ã¯, äžèšãšããŸãã£ããå ããã¡ã€ã«ãã¯, 以äžã®ããã«ããŠãäœãäºãã§ããã®ã§ãã.
unsigned char data[6]; data[0] = 104; data[1] = 101; data[2] = 108; data[3] = 108; data[4] = 111; date[5] = 10; write(fd, data, 6); ãã®æ§ã«ããŠã§ããäºã€ã®ãã¡ã€ã«ã¯ãŸãã£ããåãã§ãã. ãã®æå³ã«ãããŠ, ãã¹ãŠã®ãã¡ã€ã«ã¯ãã€ãåã«éã㪠ã, ãã以å€ã®ç©ã¯å ¥ã£ãŠããªã, ãšããäºãªã®ã§ãã.
ãã€ãåã«éããªãããŒã¿ã, ãšãã£ã¿ã§æåãšããŠè¡šç€ºãããã, ç»åãšããŠè¡šç€ºãããã, é³æ¥œãšããŠæµãããã ãã®ã¯, ãã¹ãŠ, ããã°ã©ã ããããçŽæ (笊å·åæ¹åŒ. ãã¡ã€ã«ãã©ãŒããã)ãã«ãããã£ãŠãã€ãåã解éããŠãã ããã, ãšããäºã§ãã. 笊å·åæ¹åŒã®ãã¡æãåçŽã§, ã銎æã¿ã®ç©ã¯, è±æ°åã笊å·åãã, ASCII 笊å·ãšããç©ã§, äŸãã° a ãšããæåã«
97, b ã« 98, c ã« 99, . . . , ãå²ãåœãŠãŠãã. ãã®ä»ãæ¹è¡ãã« 10 ãå²ãåœãŠãŠãã. ã ããäžè¿°ã®, hello\n ã¯, 104, 101, 108, 108, 111, 10 ãšãã䞊ã³ã«ãªã. æåã®åé¡ã§ Emacs ã§ãã¡ã€ã«ãéãããšãã«, äžéšã« abcdefg. . . ã®ãã ãªèŠæ £ããæåãåºçŸããäºãšæãã, ããã¯ãã®ãããªäºæ ã«ãã. ä»ã«ã, 挢åã«ã¯æŒ¢åã®ããã®, é³ã«ã¯é³ã®ãã ã®, éæ¢ç»ã«ã¯éæ¢ç»ã®ããã®, åç»ã«ã¯åç»ã®ããã®ç¬Šå·åãããã®ã§ãã. ãã©ãã©ãšè¿°ã¹ãŠããã, èŠããã«ãã¡ã€ã«ããå ¥åããŠããããŒã¿ã 10, 20, 30, 40 ãšãããã€ãåã§ããäºãš, æ ååâ10 20 30 40âã§ãããšããäºã¯å€§éãã§, ããããã£ããåéãããŠãããš, ä»åŸé³å£°ãªã©ã®ããŒã¿ãæ±ããšãã« æå³äžæãªäºã«ãªããã泚æãããšããäºã§ãã. ã¡ãªã¿ã«åŸè ã®æåå (â10 20 30 40â) ã¯ãã€ãåãšããŠã¯, 49, 48,
32, 50, 48, 32, 51, 48, 32, 52, 48 ã§ãã. ã©ããªããŒã¿ããã€ãåã ãšä»äžåºŠåŒ·èª¿ããããã«æã£ãŠãã. 1.2 od ã³ãã³ã ãã¡ã€ã«ã«ã©ã®ãããªããã€ãåããå ¥ã£ãŠããã®ããããã®ãŸãŸèŠããŠãããã³ãã³ãããã.
$ od -t u1 ãã¡ã€ã«å
ã®ããã«äœ¿ã.
æºåèª²é¡ 2.4 od ã³ãã³ããçšããŠ, my data ã衚瀺ããŠ, äºæããéãã®çµæã«ãªã£ãŠããäºã確èªãã. hitoshi ã«ã€ããŠãåãäºãããŠã¿ã.
od ã¯, -t ã³ãã³ã (t 㯠type ã®æå³) ã§, ãã€ãåã®ã解éã®æ¹æ³ããæ§ã ã«å€ããŠ, åããã¡ã€ã«ã衚瀺ããäºã㧠ãã. äžèšã§çšãã-t u1 ã¯, ãã¡ã€ã«ããã€ãã®äžŠã³ãšã¿ãªã, ãã€åã ã® 1 ãã€ãã unsigned ãšã¿ãªããŠè¡šç€ºãã ãšããæå³ã§ãã. ã€ãŸã, åã ã®ãã€ãã 0, . . . , 255 ã®æŽæ°ãšã¿ãªã, ãšããæå³ã§ãã. ããã, -t d1 ãªã, åã ã®ãã€ãã笊å·ä»ãæŽæ°ãšã¿ãªãâ â128, . . . , 127 ã®æŽæ°ãšã¿ãªãâãšããæå³ã«ãªã. -t u2 ãªã 2 ãã€ããã€ã ãŸãšã㊠16 ãããã®æŽæ° (0, . . . , 65535) ãšã¿ãªã. ããåãããšæãããããã¯ãã¹ãŠ, ãåããã€ãåããèŠãŠãã ã«éããªã. ãã®ãã€ãåããã©ã解éãããããã®æ¹æ³ã«è²ã ãããšããäºã®äŸã«éããªã.
od ã³ãã³ãã¯, ãã¡ã€ã«ã«ããŒã¿ãæžããã€ãããªã®ã«çµæãæãããã«ãªããªã, ãšã, ãã¡ã€ã«ããããŒã¿ãå ¥å ããŠããã€ãããªã®ã«æãããã«ãªããªã, ãªã©ã®ãšã, 蚺æããŒã«ãšããŠæçšã§ãã.
1.3 ã³ãã³ãã©ã€ã³åŒæ° ã»ãšãã©ã®å®çšçãªããã°ã©ã ã¯, ã¡ããã© od ã³ãã³ãã®äŸã§èŠãããã«, æ±ããã¡ã€ã«åã, åäœãå€ããããã® ãªãã·ã§ã³ãã³ãã³ãã©ã€ã³åŒæ°ãšããŠåãåã. æã ãæåã® 2 åã§äœã£ãããã«, ã©ããªå Žåã§ã my data ãšãã ååã®ãã¡ã€ã«ãäœã, ãªã©ãšããé åºãªäºã«ã¯ãªã£ãŠããªãã®ãæ®éã§ãã. ããã§ã¯ãã®ãããªããã°ã©ã ã C ã§äœããšãã®ããæ¹ã説æãã. é£ããäºã¯ãªã, ã³ãã³ãã©ã€ã³ã§äžããåŒæ° ã, èªåã®ããã°ã©ã ã®äžã§ãåãåããæ¹æ³ãç解ããã°è¯ãã ãã§ãã.
(1) ã³ãã³ãã©ã€ã³ã§äžããæååã¯, main é¢æ°ã®åŒæ°ãšããŠæž¡ããã. (2) main é¢æ°ã«ã¯äºã€ã®åŒæ°ãæž¡ãããŠãã, ãããåããšãã«ã¯ä»¥äžã®ããã«ãã. main(int argc, char ** argv) å€æ°åã¯ã©ãã§ããã, å (int ãš char **) ãšãã®é çªãéèŠã§ãã.
(3) 第äžåŒæ° (argc) ã«ã¯, ã³ãã³ãã©ã€ã³ã§äžããæååã®æ° (ã³ãã³ãåãå«ã) ãå ¥ã, argv ã«ã¯ãããã®æåå ã®é åãå ¥ã.
(4) äŸãã°,
$ ./mk data foo ãšããã³ãã³ãã©ã€ã³ã«å¯ŸããŠã¯,
⢠argv[0] = â./mk dataâ ⢠argv[1] = âfooâ ãæ ŒçŽãã, ãããã£ãŠ, argc = 2 ãšãªã (èŠããã«, argv ã®èŠçŽ æ°ãäžããŠããã®ã argc).
æºåèª²é¡ 2.5 ./mk data ã³ãã³ããããå°ããã·ãªç©ã«ããããã«, ããŒã¿ãæžãåºãã¹ããã¡ã€ã«åãã³ãã³ãã© ã€ã³ããåãåãããã«ãã.
1.4 ãšã©ãŒæ€æ» ãã¡ã€ã«ãäœæããéã®åºæ¬ãã©ãŒã ã
int fd = open(filename, O WRONLY | O CREAT | O TRUNC, 0644); ã§ãããšè¿°ã¹ãã, å®ã¯ããã§ã¯è¶³ããªã. å®éã«ãã¡ã€ã«ãéãããã©ãããæ€æ»ããªããŠã¯ãªããªã. äŸãã°éãã ãšãããã¡ã€ã«ã, æžã蟌ã¿çŠæ¢ (äžå¯) ãªãã£ã¬ã¯ããªã«ããããããã, ãã®ãããªå Žåã¯ãã¡ã€ã«ãéãäºã¯ã§ã ãªã. åŸã«ãã¡ã€ã«ãèªã¿èŸŒãç·Žç¿ãããã, ãã®éã«ã¿ã€ããªã©ã§, ååšããªããã¡ã€ã«ãèªãããšããã°, ãã¡ãã ãã¡ã€ã«ãéãäºã¯ã§ããªã. åŸã®é±ã§ãããã¯ãŒã¯ããã°ã©ãã³ã°ãè¡ãã, ãããã¯ãŒã¯ã§ã¯ãã®ä»ã«ãæ§ã ãªãš ã©ãŒã®èŠå (èšå®ãã¹, éä¿¡çžæãããªã, ãããã¯ãŒã¯èªäœãäžèª¿, ãªã©) ããã. ã©ã€ãã©ãªé¢æ°ã®äœ¿ãæ¹ãééã£ãŠ ãã, ãšããäºã ã£ãŠãã. æèšã¯, ã©ã€ãã©ãªé¢æ°ãªã©ãåŒã³åºããã, ãããæåãããåŠããå¿ ãæ€æ»ããªããŠã¯ãªããªã, ãšããäºã§ãã. ãã®èª¿ã¹æ¹ã¯é¢æ°ã«ãã£ãŠéãã, ããããã®å Žå, è¿ãå€ã§æåã»å€±æãåºå¥ã§ããããã«ãªã£ãŠãã. äŸãã° open ãšããé¢æ°ã¯, éãã®ã«å€±æãããš, â1 ãè¿ããšæ±ºããããŠãã. ãããã£ãŠç°¡åãªåºæ¬ãã©ãŒã ã¯ä»¥äžã®ããã«ãªã.
int fd = open(filename, O WRONLY | O CREAT | O TRUNC, 0644); if (fd == â1) { /* ãšã©ãŒæã®åŠç */ } ããšã©ãŒæã®åŠçããšèšã£ãŠãå ·äœçã«ã¯äœãããã°è¯ãã®ã ããã? å€ãã®ã©ã€ãã©ãªé¢æ°ã¯, ãšã©ãŒãè¿ããçŽåŸã«,
perror ãšããé¢æ°ãåŒã³åºããš, ãã®åå ã衚瀺ããŠããã. ãããã£ãŠå®å šãªåºæ¬ãã©ãŒã ã¯ä»¥äžã®ããã«ãªã. int fd = open(filename, O WRONLY | O CREAT | O TRUNC, 0644); if (fd == â1) { perror(âopenâ); exit(1); } exit(1) ã¯, ããã°ã©ã ãçµäºããé¢æ°ã§ãã. ãããã£ãŠãã®ããã°ã©ã ã¯, ãã¡ã€ã«ãéãã®ã«å€±æãããš, ãã®çç± ãçãè¿°ã¹ãŠçµäºããããã«ãªã. ãã㧠perror ã exit ãªã©ã®æ°ããé¢æ°ãåºãŠãã. man ã䜿ã£ãŠ#include ãã¹ãããããã¡ã€ã«ãå ¥ããäºãå¿ã ãã«.
æºåèª²é¡ 2.6 äžèšã®ãããªãšã©ãŒåŠçãæœããããã°ã©ã mk data2.c ãäœã, open ã®åŒæ°ã«æ¬¡ã®å ¥åãäžããŠèµ·å ããŠã¿ã. ã©ããªãšã©ãŒã¡ãã»ãŒãžãåºåãããã.
⢠/foo ⢠bar/baz (ããã§, bar ã¯ååšããªããã£ã¬ã¯ããªãšãã)
ãã, ã©ã€ãã©ãªé¢æ°ãåŒã³åºã床ã«ãããããã®ãé¢åãšãã人ã¯,
void die(char * s) { perror(s); exit(1); } ãšããé¢æ°ãäœã£ãŠãã, 倱æããããããåŒã³åºãããã«ããã°å€å°æ¥œã«ãªã.
ãªããããéèŠã?
ãã®ãåºæ¬ãã©ãŒã ããèŠãŠ, ããªãã , çµå±å€±æããããã çµäºããã ããªã®ãããš, ã¬ã¯ããš
ãããšãšãã«, ã倱æã¯å€±æ, ã©ãã倱æãããã ã£ããäœãèµ·ããŠãåã. ãšã©ãŒã¡ãã»ãŒãžãªãã衚瀺ããã£ãŠ, æ ° ãã«ãããªããªãããšæã£ãããã®ãã, ãã®èãã¯å³å»æ¹ããªããŠã¯ãªããªã. ãšã©ãŒæ€æ»ã®äžçªã®ç®çã¯, ãšã©ãŒãèµ·ããããã®ãŸãŸå ãžé²ãŸãªã ãšããäºã§ãã. ããã¯, ãšã©ãŒãèµ·ãããŸãŸåŠçãå ãžé²ãããš, ããã°ã©ã ã¯ãã£ãšããã®åãããªãæåã瀺ãã ãã§ãã. ä»®ã«äžã®ããã°ã©ã ã§, äœãã®çç±ã§ open ã倱æãããšããŠã, ããã°ã©ã ã®åŠçèªäœã¯å ãžé²ãã§ããŸã. ãããŠ, write ã·ã¹ãã ã³ãŒã«ãŸã§å°éãã. ãã¡ãããã¡ã€ã«ã¯éãããŠããªãã®ã ããå®éã«ããŒã¿ããããã¯ã㯠ãªã. ãã㧠write ã·ã¹ãã ã³ãŒã«ã倱æããäºãæ€æ»ãããã«å ãžé²ãã°, åŠçã倱æããŠããã®ã«æ°ã¥ããªããŸãŸã© ãã©ãå ãžé²ã¿, ããã°ã©ã ãäžèŠæ£åžžã«çµäºããããã«èŠãããšãããŸã§é²ãäºããããã. ã«ãããããããã¡ã€ã« ãã§ããŠããªããšã, ãã¡ã€ã«ãæåããååšããŠããå Žå, ãã®äžèº«ãæžãæãã£ãŠããªã, ãªã©ã®æå³äžæãªç¶æ ã« é¥ã. ããšã話ãšããŠã¯, 瀟ä¿åºã幎éèšé²æŒãåé¡ãé·å¹ŽæŸçœ®ããããã«, ä»ãäœãã©ããªã£ãŠããã®ããã£ã±ãåãã㪠ãç¶æ ã«ãªã£ãŠãã, ãšããã®ãšåãã§ãã. äœäºãæåã«ééããèµ·ãããšãã«æ°ã¥ããŠè¡åãèµ·ããã¹ããªã®ã§ãã.
æºåèª²é¡ 2.7 write ã®æåãš, è¿ãå€ã man ã³ãã³ãã§èª¿ã¹ãŠã¿ãŠãæžã蟌ã¿ãæåãããäºã確èªããã«ã¯ã©ã®ã ããªæ€æ»ãå ¥ããã°ããã, èã, 以éå®è·µãã.
ãšã©ãŒæ€æ»ãçç¥ããŠããŸããããªãæ°æã¡ã¯ä»¥äžã®ãããªç©ã ãã.
⢠èªåã¯ãŸã ããã°ã©ãã³ã°ãäžæ £ãã§, æ°è¡æžãã°ããã«ééããç¶æ ã§ãã. ãããªæã«ããã°ã©ã ã®è¡æ°ãå¢ ãããããªã.
⢠ãšã©ãŒãèµ·ãããšãã«ããäºã¯ã©ããã€ãŸããªãäºãªã®ã§, ããŸãèããããªã. ç¹°ãè¿ãã«ãªãã, ããã§å®è·µãããšèšã£ãŠããã®ã¯å€§ãããª, ãšã©ãŒããã®å埩 (ãŠãŒã¶ã«ãã¡ã€ã«åãèãçŽããªã©) ãªã©ã§ã¯ãªã,
if (. . . 倱æ . . . ) { perror(âãªã«ãäžèšâ); exit(1); } ã®ã1 è¡ããå ãããšããåçŽãã€æ±ºãŸããã£ãäºãªã®ã§, äžèšã®å¿é ã¯åœãããªã. 倧ããŠèããå¿ èŠããªã, ããã° ã©ã ã®è¡æ°ã 1 è¡å¢ããã ã. ã«ãããããã, ãããããã°ã©ã ãå®æããããŸã§ã®æéãççž®ããã®ã§ãã. ãæ¥ã ã°åããã®ç²Ÿç¥ãªã®ã , ãšæã£ãŠ, å¿ ã, ãšã©ãŒãæ€æ»ããâãšããããã, ãæåã確èªããã«å ãžé²ãŸãªããâäºã çã«ããŠã»ãã. ã ããããã¹ãã¯, ããšã©ãŒæ€æ»ããšããããããæå確èªããšèšãã¹ãã§ãã. ç³æ©ãå©ããŠæž¡ã, ãšããããšããããã. å®ãèšããšãã¡ã€ã«å ¥åºåããããªããããå®ãããšãäœãšããªãã®ãããããªãã, éä¿¡ããããã§ãããš, èšå®é éãã, éä¿¡åªäœ, éä¿¡çžæã®äžèª¿ã«ãã, ãäžå¯é¿ãªãšã©ãŒããšããç©ãããããåºãŠãã. ãã®æã«ã誰ãæªãã®ãã ãããã«çªãæ¢ããæ段ãšããŠ, åžžã«, ãèªåã¯æªããªãããšããäºã確èªããªããå ãžé²ãäºãå¿ é ã«ãªã£ãŠãã.
1.5 èª ã¿ èŸŒ 㿠次ã«ãã¡ã€ã«ããããŒã¿ãèªã¿èŸŒãç·Žç¿ãããŠã¿ãã. åºæ¬ãã©ãŒã ã¯ä»¥äžã®ããã«ãªã. ãã¡ã€ã«ãéã :
fd = open(filename, O RDONLY); O RDONLY ã§, ãã¡ã€ã«ãèªã¿èŸŒã¿ã®ããã«éãäºãæå®ããŠãã. ãã¡ããçŽåŸã®ãšã©ãŒæ€æ»ã¯ããããš. ä» åŸã®èª¬æã§ã¯äžã æããªã. ããŒã¿ãèªã¿èŸŒãããã®é åãé åãšããŠæºåãã : äŸãã°,
unsigned char data[N]; ããŒã¿ãèªã :
n = read(fd, data, N); ããã§, data[0], data[1], . . . , data[Nâ1] ã«, èªã¿èŸŒãŸããããŒã¿ãæ ŒçŽããã.
read(fd, a, n) ã¯, fd (ãè¡šããŠãããã¡ã€ã«) ããæ倧 n ãã€ãèªã¿åºã, ãããã¢ãã¬ã¹ a ããå§ãŸãå Žæã«æž ã蟌ã. ãã ã write ãšåæ§, N ãã€ããŽã£ããèªã¿åºããããšã¯éãã, ããæªæºã®ããŒã¿ã ããèªãŸããäºãããã®ã§ 泚æãå¿ èŠã§ãã. å®éã«èªãŸãããã€ãæ°ãè¿ãå€ã«ãªã. 倱æããå Žåã¯äœãè¿ãã? ãã¡ããããã¥ã¢ã«ã§ 調ã¹ã. ãã¡ãã, read ã¯å¥œããªã ãç¹°ãè¿ãåŒã³åºããŠãã. ãã®å Žå, read ãåŒã³åºããé ã«, ãã¡ã€ã«å ã® ããŒã¿ãé ã«èªã¿åºããã. ãã¡ã€ã«ãéãã :
close(fd); ããä»¥äž read ã§ããŒã¿ãèªã¿èŸŒãäºã¯ã§ããªããªã.
泚: ãã¡ã€ã«ã®ãçµããããŸã§èªãã«ã¯?
n = read(fd, data, N); ã¯, æ倧 N ãã€ãã®ããŒã¿ããã¡ã€ã«ããèªã¿èŸŒãããšãã. ãã®æ, å®éã«èªãŸããããŒã¿ã®ãã€ãæ° (1 以äž) ã, è¿ ãå€ãšããŠè¿ããã. ãšã©ãŒã®å Žå㯠â1 ãè¿ããã. ãã¡ã€ã«ã®çµãããŸã§èªã¿ãã£ãŠ, ããããŒã¿ããªããšãããšã 㯠0 ãè¿ããã. ããã, ããšã©ãŒããªã, ãã¡ã€ã«ãæåŸãŸã§èªããããšããäºã®èšŒãšãªã. çµå±, ããã¡ã€ã«ã®çµã ããŸã§èªããåºæ¬ãã©ãŒã ã¯ä»¥äžã®éã.
while (1) { n = read(fd, data, N ); if (n == â1) { perror(âreadâ); exit(1); } if (n == 0) break;
# ãã¡ã€ã«ã®çµãã
. . . data ã«äœãåŠçããã . . . } ãã¡ããäœãã€ãäžåºŠã«èªãã (äžèšã® N ) ã¯èªç±ã§ãã. ãã¡ã€ã«ã®çµãããéåžžãã®åã®éã, END OF FILE ãšåŒã³, EOF ãšæžã. ãã¡ã€ã«ãèªãããšããŠ, EOF ãæ€åº ããã (äŸãã°, read ã 0 ãè¿ãã) å Žå, æ¯å©çãªè¡šçŸãšããŠ, ãEOF ãèªãã ããªã©ãšããäºããã. ãã¡ããå®é ã«ã¯, ããŒã¿ãèªãã ããã§ã¯ãªã. ãEOF ãè¿ãããããªã©ãšããäºããã. å®éã«ã¯ 0 ãè¿ã£ãŠããã®ã«. ããã ã¯æ¯å©çãªè¡šçŸã§ã.
æ¬èª²é¡ 2.8 ã³ãã³ãã©ã€ã³ã§æå®ããããã¡ã€ã«ã open ã§éã, äœãã€ãç®ãäœãšãããã€ãã ã£ããã, 2 ã«ã©ã 㧠(第äžã«ã©ã ããã€ãæ° (æåã®ãã€ãã 0 ãã€ãç®ãšãã), 第äºã«ã©ã ããã®å€) 衚瀺ããããã°ã©ã read data.c ãæžã. äŸãã°ãã®ããã°ã©ã ãäœã£ãŠ, å ã»ã©äœã£ã my data ãèªãŸããã°åœç¶ã®äºãªãã,
00 11 22 ... 254 254 255 255 ã®ããã«è¡šç€ºãããã¹ãã§ãã. ããã確èªãã.
ããã¯ãŸããã, od ã³ãã³ã (ã, åæ©èœã«ããŠåºå圢åŒãå€ããç©) ãäœã£ãŠããäºã«ãªã. 泚: èªã¿æžãåæ open
ãã¡ã€ã«ãæžã蟌ã¿ãšèªã¿èŸŒã¿äž¡æ¹ã§éãå¿ èŠãããå Žåã¯, O RDONLY, O WRONLY ã®
代ããã«, O RDWR ãçšãã.
int fd = open(filename, O RDWR | O CREAT | O TRUNC, 0644);
ãããã¯: fopen/fprintf ãš, open/read/write ã®é¢ä¿
2 幎 4 åŠæã«, ãã¡ã€ã«å ¥åºåãè¡ãããã®é¢æ°ãšããŠ,
fopen, fprintf, fscanf ãªã©ã®é¢æ°ãç¿ã£ãäºã ãã. äŸãã°ä»¥äžã®ããã«äœ¿ã. FILE * fp = fopen(filename, âwbâ); if (fp == NULL) { perror(âfopenâ); exit(1); } fprintf(fp, âhello %s san!\nâ, argv[1]); ãã®æ©èœã¯ C èšèªã®ãã¹ããªãŒã å ¥åºåã©ã€ãã©ãªããšåŒã°ããŠãã. ããã°ãã¡ã€ã«å ¥åºåã«æäœã§ãäºéãã®æµå (open/read/write ãçšããæµåãš, fopen/fprintf ãªã©ãçšããæµå) ãããäºã«ãªã. äž¡è ã®éããšããŠãŸãæåã«æ°ã¥ã, é¢æ°å以å€ã®éãã¯, open ãæŽæ°ãè¿ãã®ã«å¯ŸããŠ, fopen ã¯
FILE *ãšããæ§é äœãžã®ãã€ã³ã¿ãšããç©ãè¿ãäºã§ãã. ãããã£ãŠ fopen ã§éããçµæã® fp ã, write/read ãªã© ã®ã·ã¹ãã ã³ãŒã«ã« (ãã®ãŸãŸ) æž¡ãäºã¯ã§ããªãã, éãåæ§ã§ãã. 以åã« open ã®è¿ãå€ããã£ãºããŒã©ã³ãã®ãã¹ããŒãã ãšè¿°ã¹ãã, ãã®ããšã話ã (ç¡çãã) ç¶ãããš, fopen ã® è¿ãå€ã¯, ãã£ãºããŒã©ã³ããŸã§ã®é»è»ã®å笊, ãã£ãºããŒã©ã³ããã¹ããŒã, ã¢ã³ããµããŒããã«å®¿æ³åž, ããã«ãšäŒ å Žã®åŸåŸ©ãã¹ãªã©ããã¹ãŠã»ããã«ãªã£ã, ã¯ãŒãã³åžã®ãããªç©ã§ãã. å®ã¯ open ããæãåºæ¬ãçãªæ©èœã§ãã,
fopen ãå®éã« open ã䜿ã£ãŠæçµçã«ã¯ãã¡ã€ã«ãéããŠãã. ãããŠå®é, FILE ãšããããŒã¿äžã«ã¯ãã£ãããšãã¡ ã€ã«ãã£ã¹ã¯ãªãã¿ (open ã®è¿ãå€) ãå«ãŸããŠãã (ã¯ãŒãã³åžã®äžã®äžæã«, ãã£ãºããŒã©ã³ãã®ãã¹ããŒããå« ãŸããŠããã®ãšåã). åæ§ã«, fprintf ãªã©ã®æ©èœã, é©å® write ã·ã¹ãã ã³ãŒã«ãçšããäºã§å®çŸãããŠãã (ä¹ãç© ã«ä¹ããšãã¯ã¯ãŒãã³åžã§ã¯ãªã, çµå±ãã£ãºããŒã©ã³ãã®ãã¹ããŒããèŠãã). fopen/fprintf ãªã©ã®ã©ã€ãã©ãªã¯,
open/read/write ã®åšãã«, ãã¡ã€ã«å ¥åºåããã䟿å©ã«ããããã®ããŸããè²ã ãã£ã€ããç©ãšæãã°è¯ã. ⢠äŸãã° read/write ã·ã¹ãã ã³ãŒã«ã¯, é åãšãã®é·ã (ãã€ãæ°) ãæå®ããèªã¿æžãããã§ããªãããªããã£ã ãªç©ã ã, fprintf ã¯äžèšã®ããã«æååã®äžã«, å¥ã®æåå (%s) ãæŽæ°ã®å€ãæåååããç© (%d) ãåã蟌ã æ©èœãæã£ãŠãã.
⢠èªã¿èŸŒã¿ã«é¢ããŠã¯, fgets(data, N, fp) ã®ãããª, ãã¡ã€ã«ãã 1 è¡èªã¿èŸŒã (æ¹è¡æåãçŸãããŸã§èªã¿èŸŒã) ãªã©ã®, ãã䜿ãç©ãçšæãããŠãã.
⢠read/write ã«ããè¿ãç©ãšããŠ, fread/fwrite ãšããé¢æ°ããã. åŒæ°ãªã©ããã䌌ãŠãã.
ãŸã, fopen ãšãã®åšèŸºã®é¢æ°ãã¡ã¯, C èšèªã®æšæºã©ã€ãã©ãªãšããŠèŠå®ãããŠããé¢æ°ãã¡ã§, UNIX ã§ããããš
Windows ã§ããããšäœ¿ãã. äžæ¹ open/read/write 㯠UNIX ã®ã·ã¹ãã ã³ãŒã«ã§ãã£ãŠ, åºæ¬çã«ã¯ UNIX åºæã®ç© ã§ãã, ãšããéãããã. ããèããšããããªããããããã®å®éšã§ã¯, ããªããã£ããªã·ã¹ãã ã³ãŒã«ã®æ¹ããããã䜿ãããã®ã? ãšçå ã«æããããããªã. ãã®çç±ã¯ããã€ããã.
⢠fopen/fprintf/fwrite/fread ãªã©ãçµå±ã¯ã·ã¹ãã ã³ãŒã«ã䜿ã£ãŠå®çŸãããŠãã. ãã®ããåŸè ã®æ¹ãåäœãå åçŽå ¥ã§ãããããããšããäºããã. äŸãã°åè ã«ã¯ãããã¡ãªã³ã°ãšããæ©èœããã, ããã€ãã®æžã蟌ã¿èŠ æ±ãã¡ã¢ãªäžã«è²¯ããŠãã, äžåã® write ã·ã¹ãã ã³ãŒã«ã§æžãã«ãã, ãšãããããªäºããã. ãããã£ãŠæžã 蟌ã¿ãè¡ã£ãç¬éã«åºåãè¡ããããšã¯éãã, ãé³ãæã£ãã¿ã€ãã³ã°ã§é³Žããªãããªã©ã®åé¡ã究æããæ ã®æªç¥æ°ãäžã€å¢ããŠããŸã.
⢠ä»åã®å®éšã§é³ã®å ¥åºåãããã«åœãã£ãŠã¯, fprintf ãæäŸãããããªæååã䟿å©ã«å ¥åºåããæ©èœã¯äžèŠã§, ã·ã¹ãã ã³ãŒã«ãçšãããããšãã£ãŠè©±ãé£ãããªãäºã¯ããŸããªã.
2. æšæºå ¥åºåãšãªãã€ã¬ã¯ã ãã¡ã€ã«ãèªã¿æžãããããã°, open ã·ã¹ãã ã³ãŒã«ã§ãã¡ã€ã«ãéã, è¿ããããã¡ã€ã«ãã£ã¹ã¯ãªãã¿ã read/write ã·ã¹ãã ã³ãŒã«ã«æž¡ã, ãšããã®ãåºæ¬ã ã, UNIX ã§ã¯, open ããªããŠããæåããéãããŠããããã¡ã€ã«ãã£ã¹ ã¯ãªãã¿ãååšãã. ããããæšæºå ¥åºåããšããç©ã§, 以äžã® 3 ã€ã§ãã.
0 : æšæºå ¥åãšãã°ã, read ã·ã¹ãã ã³ãŒã«ãçšããŠèªã¿èŸŒãäºãã§ãã. ãããèªã¿èŸŒããš, éåžžã¯ããŒããŒãããã® å ¥åãèªã¿èŸŒãäºã«ãªã. äŸãã°ä»¥äžã¯ããŒããŒããã 10 ãã€ãèªã¿èŸŒã.
read(0, data, 10); 1 : æšæºåºåãšãã°ã, write ã·ã¹ãã ã³ãŒã«ãçšããŠæžã蟌ãäºãã§ãã. ããã«æžã蟌ããš, éåžžã¯ç«¯æ«ãžåºåãã äºã«ãªã. äŸãã°ä»¥äžã¯ç«¯æ«ã«ããŒã¿ã 10 ãã€ãæžã蟌ã.
write(1, data, 10); 2 : æšæºãšã©ãŒåºåãšãã°ã, write ã·ã¹ãã ã³ãŒã«ãçšããŠæžã蟌ãäºãã§ãã. ããã«æžã蟌ããš, éåžžã¯ç«¯æ«ãžåº åããäºã«ãªã. äŸãã°ä»¥äžã¯ç«¯æ«ã«ããŒã¿ã 10 ãã€ãæžã蟌ã.
write(2, data, 10); ãªãæšæºåºåãš, æšæºãšã©ãŒåºåã®äºã€ãçšæãããŠããã®ãã¯åŸè¿°. ãããã, åãæ©èœã®, ã¹ããªãŒã å ¥åºåã©ã€ãã©ãªçãšã§ãèšãã¹ãç©ãååšããŠãã, ãããã, stdin, stdout, stderr ãšè¡šèšãã (#include <stdio.h> ããå¿ èŠããã). ã ãã,
read(0, data, 10); ã¯
fread(data, 1, 10, stdin); ãš, ã»ãŒåãæå³.
write(1, data, 10); write(2, data, 10); ã¯ãããã,
fwrite(data, 1, 10, stdout); fwrite(data, 1, 10, stderr); ãšã»ãŒåãæå³ã«ãªã. ãããŠãã䜿ã fprintf ã,
fprintf(stdout, âhello %s san\nâ, name); fprintf(stderr, âhello %s san\nâ, name); ãšæžãã°ããããæšæºåºå, æšæºãšã©ãŒåºåã«æžã蟌ãäºã«ãªã. ãããŠåè ãæ®æ®µããçšããŠãã printf ã«ä»ãªã㪠ã. ã€ãŸãäžèšã® 1 è¡ç®ã¯,
printf(âhello %s san\nâ, name); ãšåãäºã§ãã. ãã㊠UNIX ã«ãããŠã¯, ã³ãã³ããèµ·åããéã«ãã¡ã€ã«ã®ãªãã€ã¬ã¯ã (redirect) ãšããè¡šèšãçšãããš, ãã ãã®å ¥åºåå ãå€ãã (ãªãã€ã¬ã¯ããã) äºãã§ãã.
./a.out > filename ãšãããš, æšæºåºåã filename ã«ããäžã§ããã°ã©ã ãèµ·åããã. ãããã£ãŠããã°ã©ã ã open ã fopen ãäžååŒ ã³åºããªããŠã,
write(1, data, 10); fprintf(stdout, âhello %s san\nâ, name); printf(âhello %s san\nâ, name); ãªã©ã¯, filename ãžã®æžã蟌ã¿ãšåãå¹æãæã€. èŠããã«åçŽãªãã¡ã€ã«å ¥åºåããè¡ããªã (æ±ããã¡ã€ã«ã 1 ã€ã ãã§, èµ·åæã«æ±ºãŸããããªç©) ããã°ã©ã ã§ããã°, open ãªã©ãçšããŠæ瀺çã«ãã¡ã€ã«ãéãå¿ èŠããªããªãã®ã§ ãã.
> ã¯, æšæºåºåã®ã¿, filename ã«éã蟌ã. æšæºãšã©ãŒåºåãå¥ã®ãã¡ã€ã«ã«éã蟌ã¿ãããã°, 2> ãšããè¡šèšãçš ãã. ã€ãŸã,
./a.out > filename 2> filename2 ãšãã. ãã ãå€ãã®ããã°ã©ã ã¯ããã°ã©ã ã®éåžžã®åºåãæšæºåºåã«æžã, ãšã©ãŒã¡ãã»ãŒãžãªã©ã¯æšæºãšã©ãŒåº åã«æžã, ãšããæ £ç¿ãå®ã. ãã®ãããªæ £ç¿ã«æ²¿ã£ãããã°ã©ã ã¯, æšæºåºåã ããå¿ èŠã«å¿ããŠãªãã€ã¬ã¯ãã, ãš ã©ãŒã¯åžžã«ç«¯æ«ã«è¡šç€ºãã (ã€ãŸããªãã€ã¬ã¯ãããªã) ãšãã䜿ãæ¹ãããã®ã䟿å©ã§ãã.
3. ããã€ã¹ãã¡ã€ã«ã®å ¥åºåãçšããé³å£°å ¥åºå Linux ç°å¢ (æ¬å®éšçšã«ç¹å¥ã«ãã€ãããç©ã§ã¯ãªã, æšæºç㪠Linux ç°å¢) ã§ã¯, é³ããŒã¿ãå ¥åºåããããã®, é© ãã»ã©åçŽãªã€ã³ã¿ãã§ãŒã¹ãçšæãããŠãã. ããã¯, â/dev/dspâ ãšããååã®ãã¡ã€ã«ãéåžžã®ãã¡ã€ã«ãšåã〠ã³ã¿ãã§ãŒã¹ã§èªã¿æžãããã°, ãããé³ã®å ¥åºåã«ãªã£ãŠãã, ãšããç©ã§ãã. èæ¯èª¬æãåŸåãã«ããŠãŸãã¯ä»¥äž ããã£ãŠã¿ã. ãŸãã¯é³ããŒã¿ã®å ¥å.
æºåèª²é¡ 2.9 以äžã®ãããããªã³ãã³ãã§, /dev/dsp ãèªãã§ã¿ã. ãã¡ã€ã«ãçµäºããäºã¯ãªãã®ã§, é©åœãªãšã ãã§, Ctrl-C ã§åŒ·å¶çµäºããã.
$ od -t u1 /dev/dsp
$ ./read data /dev/dsp ./read data ã¯, åé¡ 2.8 ã§äœã£ãããã°ã©ã ã§ãã.
ãããã, 127, 128, 129 ä»è¿ã®å€ããããããšäžŠã¶ãšæããã. ã³ã³ãã¥ãŒã¿å èµã®ãã€ã¯ãæå¹ã«ãªã£ãŠããã°, ããã§å èµãã€ã¯ã«åãã£ãŠå«ã¹ã°, 衚瀺ãããããŒã¿ã«å€åãçŸ ããã ãã. å èµãã€ã¯ã§ã¯ãªã, ãã€ã¯ç«¯åãæå¹ã«ãªã£ãŠããã°, ãã€ã¯ç«¯åã«å€ä»ããã€ã¯ãæ¥ç¶ããŠãã®ãã€ã¯ ã«åãã£ãŠå«ã¹ã°, 衚瀺ãããããŒã¿ã«å€åãçŸããã ãã. ã©ã¡ããã®æ¹æ³ã§åºåãå€åããäºã確èªããŠã¿ã. ãã ããããšããªã¥ãŒã ããã¥ãŒãã®èšå®çã§ã©ã¡ãããã£ãŠãå€åããªãå¯èœæ§ãããã, ãããã®èšå®æ¹æ³ã¯åŸã§èª¬æ ããäºã«ããŠä»ã¯å ãžé²ã. ãšããããããŸãè¡ã£ããªã, 以äžã®ããã«ããŠ/dev/dsp ã®äžèº«ãããã®ãŸãŸããã¡ã€ã«ã«ä¿åããã°, ãé²é³åã ãå®æãã.
$ cat /dev/dsp > data
# æ°ç§åŸ ã£ãŠ, é©åœãªãšãã㧠Ctrl-C ã§çµäºããã
cat ã¯, ããã¡ã€ã«ã®äžèº«ãèŠãç©ããšæã£ãŠãããšããèªäœäžæè°ã«èŠãããããããªãã, cat ãšã¯èŠããã«, ããã¡ ã€ã«ã®äžèº«ããã®ãŸãŸæšæºåºåã«åºãããã°ã©ã ãã§ãã. äžã§ã¯ä»¥äžã®ãããªäºãèµ·ãã£ãŠãããšæ³åããã°è¯ã (説 æãç°¡ç¥åãããã, ãšã©ãŒæ€æ»ãªã©ã¯çç¥ããŠãã).
int main(int argc, char * argv) { int fd = open(argv[1], O RDONLY); unsigned char data[1000]; while (1) { int n = read(fd, data, 1000); if (n == â1) { perror(âreadâ); exit(1); } if (n == 0) break; write(1, data, n); } return 0; } ã ããäžã®ã³ãã³ãã©ã€ã³ã¯, /dev/dsp ããèªãã§ããç©ããã®ãŸãŸ, data ã«ä¿åãã, ãšããåäœã«ãªã. 次ã¯é³ããŒã¿ã®åºå. æ³åã§ããããã«, /dev/dsp ãšããååã®ãã¡ã€ã«ã«æžãã°è¯ã.
æºåèª²é¡ 2.10 以äžã®ã³ãã³ãã§, /dev/dsp ã«æžããŠã¿ã.
$ cat data > /dev/dsp
ããã§, data ã¯å ã»ã©äœã£ãç©ã§ãã. å ã®å®éšã§ãã, ãã€ã¯ãæå¹ã«æ©èœããŠãããã§ããã°, ããã§å ã»ã©èªå ãå«ãã é³ã, åçãããã¯ãã§ãã. ãã ããã®å Žåãããªã¥ãŒã èšå®ãªã©ãé¢ä¿ããŠããã®ã§, ãã¡ããšèšå®æ¹æ³ã ç解ãããŸã§ã¯ããŸãè¡ããªããŠã深远ãããªããŠãã.
/dev/dsp ãäœè ããç解ãã
ãšããã/dev/dsp ãšãããã¡ã€ã«ãèªã¿æžãããã ãã§, é³ãå ¥åºåã§ããŠããŸã£
ã. ããããšãããçŽåŸããŠããŸãã°æ¬å®éšãé²ããã«ã¯å åãªã®ã ã, äžæ¹ã§ãããªç©ãèŠãããããšããã¡ã€ã«ãšã ãã®ã¯ãã£ã¹ã¯ã«ä¿åãããããŒã¿ã®äºã ãšæã£ãŠããã®ã«, èªã¿èŸŒããšãã®æã®é³ãåºãŠãããªããŠã€ããããšãã
人ããããšæã (念ã®ãã, /dev/dsp ãèªãã ãšãã«åºãŠããã®ã¯, éå»ã«/dev/dsp ã«æžãããå€ãšã¯å šãé¢ä¿ããªã. ãããŸã§ãã®æã³ã³ãã¥ãŒã¿ã«å ¥åãããŠããé³ã§ãã). ã³ã³ãã¥ãŒã¿ã«é³ãå ¥åºåããã«ã¯, ããŒããŠã§ã¢ã¬ãã«ã§ã¯ã³ã³ãã¥ãŒã¿ã«è£ çãããŠãããµãŠã³ãã«ãŒããš CPU ã®éã§, ããŒã¿ã®ãããšããããäºã«ãªã. ãã®è©³çŽ°ã¯ãµãŠã³ãã«ãŒãããšã«ç°ãªãã, ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšã ãŠã¯ãããã«å¯ŸããŠ, ããŸããµãŠã³ãã«ãŒãã®æ©çš®ã«äŸåããªã, ãã€ç°¡æãªããã°ã©ãã³ã°ã€ã³ã¿ãã§ãŒã¹ (API) ã æäŸããã.
UNIX ã«ãããŠ, ãµãŠã³ãã«ãŒããæ±ã API ãšããŠçå®ãããŠããç©ã®äžã€ã, Open Sound System (OSS) ãšåŒã° ãã API ã§, /dev/dsp ãšãããã¡ã€ã«åãéããŠ, é³ã®å ¥åºåãè¡ããããã«ãã, ãšããã決ãŸãããããã§ä»æ§ãš ããŠçå®ãããŠãã. ããããããã€ã¹ã«ã¯ãµãŠã³ãã«ãŒã, ããŒããã£ã¹ã¯ã³ã³ãããŒã©, ã·ãªã¢ã«å ¥åºå, USB ããã€ã¹ãªã©, ãããããªçš® é¡ããã. UNIX ã§ã¯, ãããæ§ã ãªããã€ã¹ã®çš®é¡æ¯ã«, ãããšéä¿¡ããããã®æ°ããé¢æ°çŸ€ (äŸãã°, open sound card,
read sound card, etc.) ãçºæããã«, (1) ãã¹ãŠã®ããã€ã¹ã«ãå ±éã®ãã€ã³ã¿ãã§ãŒã¹ (open, read, write, close, etc.) ãèšãã. (2) open, read, write, close, etc. ã®æäœã«ã©ããåå¿ããããã¯ããã€ã¹ããšã«ç°ãªã£ãŠãã (ããã決ããŠããã® ã¯, ããã€ã¹ãã©ã€ããšåŒã°ããããã°ã©ã ). ãšããæ £ç¿ãäœã£ãŠãã. ãããŠ, ãããããæ®éã®ããã¡ã€ã«ã®èªã¿æžãã®ã€ã³ã¿ãã§ãŒã¹ãšãå ±éåããŠããŸã£ã. æåŸã®, ãããã€ã¹ããèªã¿æžãããã€ã³ã¿ãã§ãŒã¹ãšãæ®éã®ãã¡ã€ã«ããèªã¿æžãããã€ã³ã¿ãã§ãŒã¹ãåãã«ã ãå¿ ç¶æ§ã¯ãªããšæãããããããªã. ããã, å ±éåããäºã§æ®éã®ãã¡ã€ã«ãããã€ã¹ãå šãåãããã«èªã¿æžã㧠ããããã«ãªã. åŸã«åºãŠãã, ãœã±ãã (ãããã¯ãŒã¯ãšã®ãããšãããã API) ã, UNIX ã«ãããŠã¯, å®ã¯ãã¡ã€ã« ãšå ±éã® API ã§èªã¿æžãããäºãã§ãã. ããèããŠã¿ããš, ãããããæ®éã®ãã¡ã€ã«ã®æå (æžããããŒã¿ãèªãŸãã)ããšããç©èªäœ, ããŒããã£ã¹ã¯ã
USB ã¡ã¢ãªãªã©ã®ã2 次èšæ¶è£ 眮ããšåŒã°ããâããèªäœãšãŠãè€éãªâãããã€ã¹ããšã®ãããšããäžæã«ããäºã« ãã£ãŠã©ãã«ãå®çŸãããŠããéåžžã«é«çŽãªæ©èœã§ãã. æ®æ®µãã¡ã€ã«ãããŸãã«äœæ°ãªã䜿ã£ãŠããã®ã§å¿ããŠã㟠ããã¡ã ã, ã³ã³ãã¥ãŒã¿ãäœãäžã§, æ®éã®ãã¡ã€ã«ã®æåã, ãã®ä»ã®ããã€ã¹ãšã®ãããšãããç°¡åã«, èªç¶ã«å® è£ ã§ãããšããããã§ã¯ãªãã®ã§ãã. ã ãã, /dev/dsp ããæ®éã®ãã¡ã€ã«ãšæåãéãããšèšã£ãŠæ©ãã®ã¯ãã¹ã ã¹ã§, ããããããªããã€ã¹ã, åãã€ã³ã¿ãã§ãŒã¹ãæã€ã, ã ãããããç°ãªãæåã瀺ãããšããäžçããŸãå ã« ãã (ãããèªç¶).
4. é³å ¥åºåã®èšå® é³ã®é²é³ãåçãããŸãè¡ã£ãŠããªããšæã£ãã, ãµãŠã³ãã«ãŒãã®èšå®ã«åé¡ãããå¯èœæ§ããã. é²é³, å èµã〠ã¯, å€ä»ããã€ã¯ãå ¥åãšããŠæå¹ã«ãªã£ãŠããªã, é²é³ã¬ãã«ãäœããã, ãã¥ãŒããèšå®ãããŠãã, ãªã©ã®åé¡ã ãã. åçã§ã, å èµã¹ããŒã«, å€ä»ãã¹ããŒã«ãæå¹ã«ãªã£ãŠããªã, åçã¬ãã« (ããªã¥ãŒã ) ãäœããã, ãã¥ãŒã ãèšå®ãããŠãã, ãªã©ã®åé¡ããããã. å ¥åæº (ãã€ã¯ç«¯åãå èµãã€ã¯ã), åºåå ãéžãã ã, åçé²é³ã¬ãã«ã調ç¯ããããã®ã¢ããªã±ãŒã·ã§ã³ãšããŠ, ãé³é調ç¯ããŒã«ãããã. ããã«ã«ã¹ããŒã«ã®çµµãããã¢ã€ã³ã³ãããã°ããã§ãã. ãªããã°, 第 1 ç« , 8.1 ç¯ã§èª¬æ ããèŠé ã§è¿œå ãã. ãã®äžã§,
(1) ããã«äžã®ã¹ããŒã«ã®çµµãããã¢ã€ã³ã³ãå³ã¯ãªã㯠â é³é調ç¯ããŒã«ãéã (2) ç·šé â èšå®ã, ãã¡ã€ã« â ããã€ã¹ã®å€æŽ, ãéããŠè²ã æ¢ã (å³ G1.2.1). å ·äœçã«ã©ããéžãã ãè¯ãã®ãã¯æ©çš®ã«ãã£ãŠãç°ãªãããã§, ããŸãäžè¬çãªäºã¯èšããªã. å®éšã§è²žãåºããŠãã æ©çš®ã§ã©ããéžãã ãè¯ããã¯å®éš HP ã«èšè¿°ãã.
5. /dev/dsp ã®ããŒã¿åœ¢åŒ å®éã«/dev/dsp ãèªãã ãšãã«èªãŸããããŒã¿ã, /dev/dsp ã«é³ã鳎ãããããšæã£ããšãã«æžã蟌ãã¹ãããŒã¿ ã®åœ¢åŒã¯éåžžã«åçŽãªç©ã§, é³ã®æ³¢åœ¢ (y = f (t)) ã, äžå®ééã§æšæ¬å (sampling) ããå€ããããããšäžŠãã§ããã ã ã®ç©âLinear Pulse Code Modulation (Linear PCM)âã§ãã (å³ G1.2.2). åã ã®æšæ¬ãäœ bit ã®å€ãšããŠè¡šãããã (æšæ¬åå解èœ, sampling resolution), 1 ç§éã«å¹Ÿã€ã®æšæ¬ããšãã (æšæ¬
å³ G1.2.1
å³ G1.2.2
é³é調ç¯ããŒã«
/dev/dsp ã®ããŒã¿åœ¢åŒ (Linear PCM)
ååšæ³¢æ°, sampling rate), 幟ã€ã®ãã£ãã«ããšãã (ã¢ãã©ã«ãã¹ãã¬ãªã), ã¯èšå®ã«ãã£ãŠå€ããäºãã§ã, å¯èœãª çµã¿åãããæ¢å®ã®èšå®ããµãŠã³ãã«ãŒãã«ãã£ãŠç°ãªã. å®éšç°å¢ã§ã®æ¢å®å€ã¯ä»¥äžã®ããã«ãªã£ãŠãã.
⢠æšæ¬åå解èœ: 8bit (256 çš®é¡ã®å€) ⢠æšæ¬ååšæ³¢æ°: 8kHz (8000 æšæ¬/ç§) ⢠ãã£ãã«æ°: 1 (ã¢ãã©ã«) ãããã£ãŠèªã¿åºãããããŒã¿ã®ã¬ãŒã㯠1 ãã€ã/æšæ¬ Ã8000 æšæ¬/ç§ Ã1 = 8000 ãã€ã/ç§ãšãªã.
1 ã€ã®æšæ¬ã¯ 1 ãã€ã㧠256 çš®é¡ã®å€ããšãåŸãã, ããã笊å·ãªãæŽæ°, ã€ãŸã 0 ãã 255 ãŸã§ã®å€ãšããŠèªã¿, 128 ãåŒããšãããåæç¹ã§ã®æ¯å¹ ãšãªã. ã ãã, å ¥åãã»ãšãã©ãªããšãã¯, 128 ååŸã®å€ãèªã¿åºãããäºã«ãªã.
æºåèª²é¡ 2.11 cat ãšãªãã€ã¬ã¯ãã䜿ã£ãŠ/dev/dsp ã 5 ç§ã»ã©èªã¿åºã, ãã¡ã€ã«ã«ä¿åãã. ãã®ãã¡ã€ã«ã®ãµã€ ãºãèŠãŠ, äžèšã®ããŒã¿ã¬ãŒããšå€§äœãã£ãŠããäºã確èªãã. éã«é©åœãªå€§ããã®ãã¡ã€ã«ã cat ã³ãã³ãã§/dev/dsp ã«åºåããŠã¿ãŠ, åºåãçµããã®ã«ãããæéãããŒã¿ã¬ãŒããšå€§äœãã£ãŠããäºã確èªãã.
6. gnuplot /dev/dsp ããèªã¿åºãããããŒã¿ã波圢ãšããŠå¯èŠåããŠã¿ãã. gnuplot ã¯æ°åŒã§è¡šãããã°ã©ããå®éšããŒã¿ ã, å¯èŠå (ã°ã©ã衚瀺) ããæ±çšçãªããŒã«ã§ãã. 奥ãæ·±ãããŒã«ã ãããã§ã¯ãã®å®éšã§å¿ èŠãªæäœéã®æ©èœã説 æãã.
gnuplot ã«è¡šç€ºããããããŒã¿ã¯, x 軞ã®å€ã第äžã«ã©ã ç®ã«, y 軞ã®å€ã第äºã«ã©ã ç®ã«æžããè¡ã, ãããããšäžŠ ã¹ãã ãã®ç©ã§ãã. äŸãã°,
00 11 24 39 4 16 5 25 6 36 7 49 8 64 ã®ããã«. å€ã¯ãã¡ããå°æ°ç¹ä»ãã®æ°åã§ãã£ãŠãæ§ããªã. ãã®ãããªããŒã¿ããã¡ã€ã« (a.txt ãšãã) ãšããŠæºåã§ããã, 以äžã®ããã«ãã.
$ gnuplot (ãããŒã衚瀺ããã) gnuplot> plot âa.txtâ gnuplot> ããã§çªãçŸã, ã°ã©ãã衚瀺ããã (å³ G1.2.3). ç¹ã«èšå®ãããªããš, åããŒã¿ãç¹ãšããŠè¡šç€ºããã. ãããç·ã§ çµãã§è¡šç€ºãããªã©è²ã ãªèšå®ãå¯èœã ããã®å®éšã§ã¯äžèŠãªã®ã§çç¥ãã.
gnuplot ããŸãç«ã¡äžããŠãã, plot ã³ãã³ããå ¥åãã代ããã«, 以äžã®ãããªå 容ã®ãã¡ã€ã« (a.gpl ãšãã) plot âa.txtâ pause â1 ãçšæããŠ,
$ gnuplot a.gpl ãšããŠããã (pause â1 ã¯, æ¹è¡ãå ¥åããããŸã§çªã衚瀺ãç¶ãããšããæ瀺ã§, ãããæžããªããš, çªãäžç¬è¡šç€ºã ããŠããã«çµäºããŠããŸã).
/dev/dsp ããèªã¿åºãããããŒã¿ã衚瀺ããã«ã¯ã©ããããè¯ãã? èª²é¡ 2.9 ãã¯ãªã¢ããŠããã°äžç¬ã§ãã.
æ¬èª²é¡ 2.12 èª²é¡ 2.9 ã«ãã㊠read data ã䜿ã£ãŠåŸã/dev/dsp ã®åºåã, gnuplot ã§è¡šç€ºããŠã¿ã. ãªããšãªãã ãããã波圢ã衚瀺ãããã°æåã§ãã. 次ã«, read data ãå°ãå€æŽããŠ, 暪軞ãæé (ç§åäœ), 瞊軞ã¯æ¯å¹ 0 ã®æ ãæ£ãã y = 0 ãšããŠè¡šç€ºãããããã«ã㊠(èªã¿åºãããããŒã¿ãã 128 ãåŒããŠ) ã¿ã.
/dev/dsp ã®ããŒã¿åœ¢åŒã Linear PCM ã§ããäºãå®æããããäžã€ã®æ¹æ³ã¯, 人工çãªæ³¢ãåºåããŠ, é³ãçæã㊠ã¿ãäºã§ãã.
å³ G1.2.3
gnuplot
æ¬èª²é¡ 2.13 ãããããªåšæ³¢æ°ã®æ£åŒŠæ³¢:
y = A sin (2Ïf t) ã/dev/dsp ã«åºåããŠã©ã®ãããªé³ãèãããããè©ŠããŠã¿ã. A (æ¯å¹ ), f (åšæ³¢æ°) ãã³ãã³ãã©ã€ã³ããåã åã£ãŠå€æŽã§ããããã«ãã. æååãæµ®åå°æ°ç¹ã«å€æããã«ã¯, atof ãšããé¢æ°ã䜿ã (#include ãå¿ããã«). ããŸãé«ãåšæ³¢æ°ãåºããŠè³ãçããªãããã«. f = 440Hz ä»è¿, å°ããã® A ããã¹ã¿ãŒãããŠã¿ã.
第3æ¥ å šæéå®ç¿ãšãã. é ããŠãã人ã¯ãã®æéã§è¿œãã€ã. äœè£ã®ãã人ã¯, 次åãäºç¿ãã, çºå±èª²é¡ã®æ§æ³ãç·Žã£ãŠè° è«ãã, ãªã©ã®æéãšããŠäœ¿ã.
第 4 æ¥ ããžã¿ã«ä¿¡å·åŠç 1. ã ã ã 1.1 æšæ¬åå®çãš AD å€æ æéçã«ãæ¯å¹ çã«ãé£ç¶å€ãæããã¢ããã°ä¿¡å·ã¯ïŒæé軞äžã§ã®é¢æ£åïŒæšæ¬åïŒïŒæ¯å¹ 軞äžã§ã®é¢æ£åïŒéå åïŒãéããŠããžã¿ã«ä¿¡å·ãžãšå€æããããæåãªã·ã£ãã³ã®æšæ¬åå®çã¯ïŒæ å ±ã®æ¬ èœç¡ã AD å€æïŒAnalog-Digital å€æïŒãè¡ãªãããã®ãæšæ¬åãã«é¢ããå¿ èŠååæ¡ä»¶ãæããŠããããããã§ã¯ïŒæ æã«äžé©åã«æšæ¬åãããïŒãš ã€ãªã¢ã¹ãæ··å ¥ããïŒä¿¡å·ãçæãïŒæšæ¬åå®çãå®éšçã«æ€èšŒããã
1.2 æšæ¬åä¿¡å·ã«å¯ŸããããŒãªãšå€æããã°ã©ãã³ã°ãšãããçšããä¿¡å·è§£æ æç³»åä¿¡å·ã«å¯Ÿããæãåºãç¥ãããä¿¡å·è§£æææ³ïŒäžããããæç³»åä¿¡å·ãåºæ¬æ³¢ã®éã¿ä»ãåãšããŠè¡šçŸãããå³ ã¡ïŒåºæ¬æ³¢ãžãšå解ããææ³ïŒã§ããïŒããŒãªãšå€æã埩ç¿ãïŒæšæ¬åä¿¡å·ã«å¯ŸããããŒãªãšå€æã§ãã DFTïŒDiscrete
Fourier TransformïŒã C èšèªã§å®è£ ãããäœæããããã°ã©ã ã䜿çšãïŒåç¯ã§çšãããšã€ãªã¢ã¹ãæ··å ¥ãããµãŠã³ ãããŒã¿ã«å¯ŸããŠã¹ãã¯ãã«è§£æãè©Šã¿ãã
1.3 ç³ã¿èŸŒã¿æŒç®ã®ããã°ã©ãã³ã°ãš FIR ãã£ã«ã¿ ãç°¡æãµãŠã³ããšãã§ã¯ã¿ã®è©Šäœã ãã£ã«ã¿ãªã³ã°ã®åºç€ãšãªãã€ã³ãã«ã¹å¿çïŒç³ã¿èŸŒã¿æŒç®ã«ã€ããŠåŸ©ç¿ãïŒãã®æŒç®ã C èšèªã§å®è£ ããããŸãïŒ ã€ã³ãã«ã¹å¿çãæéé·ã®ããžã¿ã«ãã£ã«ã¿ã FIRïŒFinite Impulse ResponseïŒãã£ã«ã¿ãšèšããïŒãã®ãã£ã«ã¿ã 䜿ã£ãŠïŒé³é¿ããŒã«ã®åé¿é³ïŒãšã³ãŒïŒå¹æãã·ãã¥ã¬ãŒããããèªèº«ã®å£°ãé³é¿ããŒã«ã§ã®æ声ã«å€æããã
2. 解
説
2.1 ã¢ããã°âããžã¿ã«âã¢ããã°å€æ å°è¡šãäŒããå°éæ³¢ïŒç®ã«é£ã³èŸŒãå¯èŠå ç·ïŒè³ã«é£ã³èŸŒãé³é¿ä¿¡å·ïŒéŒ»ãåºæ¿ããååŠç©è³ªãªã©æ§ã ãªæ å ±ã¯ïŒæç³» åä¿¡å·ãšããŠååšããããšãå€ããéåžžèªç¶çã«ååšããæç³»åä¿¡å·ã¯ä»»ææå»ã«ãããŠå€ãæã¡ïŒãŸãïŒèŠ³æž¬ä¿¡å·ã® æ¯å¹ ã¯é£ç¶å€ãæã€ãå³ã¡ïŒã¢ããã°ä¿¡å·ã§ãããã¢ããã°ä¿¡å·ã«å¯ŸããŠæšæ¬åïŒéååãçµãããšã§ããžã¿ã«ä¿¡å·ã¯ç æããããä¿¡å·ã®ããžã¿ã«åã«ããïŒã¢ããã°ã®ç¶æ ã§ã¯å°é£ã§ãã£ãåŠçãå¯èœãšãªã£ããããžã¿ã«ä¿¡å·åŠçã§ããã
2 幎åŸæã®ãä¿¡å·è§£æåºç€ããåŠãã åŠçã¯ïŒæšæ¬åä¿¡å·ãå ã®ã¢ããã°ä¿¡å·ã«æ»ãããã®æšæ¬åã«é¢ããå¿ èŠåå æ¡ä»¶ãåŠãã ã¯ãã ãã¢ããã°ä¿¡å·ãååšããåšæ³¢æ°åž¯åã f †Fa ã§ãã£ãå ŽåïŒæšæ¬ååšæ³¢æ° Fs ã 2Fa 以äžã«èš å®ããããšãå¿ èŠã§ãããäŸãã° 5kHz ãŸã§ã®åž¯åã«ååšããã¢ããã°ä¿¡å·ãæšæ¬åããã«ã¯ïŒ10kHz 以äžã®æšæ¬ååš æ³¢æ°ãéžã¹ã°ãããããããã°ïŒæšæ¬åä¿¡å·ããå ã®ã¢ããã°ä¿¡å·ãå®å šã«åŸ©å ã§ãã1 ã
2.2 äžé©åãªæšæ¬åãšãšã€ãªã¢ã¹ 2Fa 以äžã®æšæ¬ååšæ³¢æ°ãçšããå ŽåïŒã©ã®ãããªçŸè±¡ãèµ·ããã®ã ãããïŒäŸãã°ïŒãªãŒã±ã¹ãã©ã®æŒå¥ãïŒãã® ãŸãŸ 8kHz ã§æšæ¬åãããšïŒäœãèµ·ããã®ã ãããïŒæ°åŒçãªè©³çŽ°ã¯ãä¿¡å·è§£æåºç€ãã®ããŒãåã³åèå³æžã«è²ããïŒ æšæ¬åãšããæäœã¯ïŒæ¬æ¥ã®ä¿¡å·ã¹ãã¯ãã« X(Ï) ã«å¯ŸããŠïŒãããåšæ³¢æ°è»žäžã§ç¹°ãè¿ãçŸãããããªäººå·¥çãªæå ãçã¿åºãïŒå³ G1.4.1 åç §ãæšæ¬ååšæ³¢æ°ã®ä»£ããã«æšæ¬åè§åšæ³¢æ° Ïs ã䜿ãããŠããïŒ2 ãçµå±ïŒæšæ¬ååšæ³¢æ°ã äžé©åã«äœãå ŽåïŒå³ G1.4.2 ã«ããããã«ïŒæ¬æ¥ã®ã¹ãã¯ãã«ãšïŒæšæ¬åã«ãã£ãŠäººå·¥çã«äœãããã¹ãã¯ãã«ãšã éãªã£ãŠããŸããããããšã€ãªã¢ã¹ã§ããããªãŒã±ã¹ãã©ã®æŒå¥ãïŒãã®ãŸãŸ 8kHz ã§æšæ¬åãããšïŒãšã€ãªã¢ã¹ã容 æã«èµ·ãããå®éšã§ã¯ãã®ãšã€ãªã¢ã¹ãããŠã³ãµã³ããªã³ã°ãéããŠäººå·¥çã«çæããã
2.3 ã¢ãããµã³ããªã³ã°ãšããŠã³ãµã³ããªã³ã° äžããããããžã¿ã«ã»ãµãŠã³ãããŒã¿ãïŒæ¬æ¥ã®ãµã³ããªã³ã°åšæ³¢æ°ãšã¯ç°ãªãåšæ³¢æ°ã§åçããããšãèããŠã¿ãã äŸãã°ïŒ48kHz 㧠AD ããããŒã¿ãïŒ8kHz 㧠DA ããïŒããŠã³ãµã³ããªã³ã°ïŒã«ã¯ã©ãããã°è¯ãã®ãïŒ8kHz 㧠AD 1 é³æ¥œ CD 㯠44.1kHz ã®æšæ¬åïŒ16bit ã®éååã«ããããžã¿ã«ä¿¡å·ïŒæŽæ°å€åïŒã§ãããããã¯ãå°çäžã®å šãŠã®é³ã¯ 22.05kHz 以äžã®
垯åã«ããååšããŠããªããããšã䞻匵ããŠãããã®ã§ã¯ïŒåœç¶ïŒãªãããã®ä»æ§ã¯ïŒããããã人éã®è³ãèãåãã垯åïŒå¯èŽé åïŒã å¡ã 20kHz ãŸã§ããšããççåŠçäºå®ãèæ ®ããŠæ±ºããããä»æ§ã§ãããäœãïŒäžã«ã¯ãã以äžãèãåããæ¹ã ãããã 2 ãã«ã¿é¢æ° ÎŽ(t) ã䜿ã£ãæšæ¬åä¿¡å·ã®è¡šçŸïŒåã³ïŒãã®ããŒãªãšå€æã«ã€ããŠã¯æ°åŒã®å±éã確èªããŠãããšããã ããã
å³ G1.4.1
ãµã³ããªã³ã°ããã波圢ã®åšæ³¢æ°ã¹ãã¯ãã«ïŒäžïŒã¢ããã°ä¿¡å· x(t)ïŒäžïŒæšæ¬åä¿¡å· xs (t)ïŒ
å³ G1.4.2
æãè¿ãæªã¿ïŒãšã€ãªã¢ã¹ïŒã®çºç
ããããŒã¿ã 48kHz 㧠DA ããïŒã¢ãããµã³ããªã³ã°ïŒã«ã¯ã©ããããããã®ãïŒïŒãšãã£ãåé¡ã§ããã å³ G1.4.3 ã«ç€ºãããã«ïŒ48kHz 㧠AD ããããŒã¿ãéåŒãã°ïŒ6 ãµã³ãã«æ¯ã«äžã€åãäžããïŒïŒæšæ¬ååšæç㫠㯠8kHz ã«ãªããäžæ¹ïŒ8kHz 㧠AD ããããŒã¿ã«å¯ŸããŠïŒåãµã³ãã«ã®éã« 5 ã€ãŒããæ¿å ¥ããã°ïŒæšæ¬ååšæçã«ã¯
48kHz ãšãªãïŒãã€ïŒ8kHz ã§ã®ããžã¿ã«ã€ã¡ãŒãžãšåäžã«ãªããããããïŒãã®ãŸãŸ 8kHzïŒããã㯠48kHzïŒã㌠ã¿ãšã㊠DA ãããšïŒã©ã®ãããªé³ãèãããã ãããïŒæåŸ ããé³ãšã¯ç°ãªãã¯ãã§ãããããžã¿ã«åïŒæšæ¬åïŒã® ãäœæ³ãç¥ããªããšïŒãã®ãããªèª€ã£ãä¿¡å·ãçæããããšãããã®ã§æ³šæãå¿ èŠã§ããã
2.4 é¢æ£ããŒãªãšå€æïŒDiscrete Fourier Transform, DFTïŒ å¯èŠå ç·ïŒé³é¿ä¿¡å·ãªã©ã®æç³»åä¿¡å·ã¯äžçš®é¡ã®æ å ±ã ããéã¶èš³ã§ã¯ç¡ããäŸãã°é³å£°ã«ã¯ïŒäœãåã£ãã®ãïŒèª° ãåã£ãã®ãïŒã©ã®ããã«åã£ãã®ãïŒãªã©æ§ã ãªæ å ±ãå«ãŸããŠãããã€ãŸãïŒè€æ°ã®ç¬ç«ããæ å ±ãäžã€ã®æç³»åä¿¡ å·ã«æ··å ¥ããŠããããšã«ãªããã©ã®æ å ±ãïŒæç³»åä¿¡å·ã®ã©ã®åŽé¢ã«å¯Ÿå¿ããŠããã®ãïŒç¬Šå·åãããŠããã®ãïŒïŒã ç¥ãããšããå ŽåïŒãã®ä¿¡å·ããåæãããå解ãããå¿ èŠãçããããã®ãããªå Žåã«åžžå¥æ段ãšããŠçšããããŠã ãã®ãïŒããŒãªãšå€æã«åºã¥ãåšæ³¢æ°è§£æïŒã§ããã以äžïŒããŒãªãšå€æã埩ç¿ããã ä»»æã®åšæçãªã¢ããã°æç³»åä¿¡å· x(t)ïŒäœãåšæã T ãšããïŒã«å¯ŸããããŒãªãšçŽæ°å±éã¯ä»¥äžã®ããã«ãªãã
x(t) =
â a0 â 2Ï + ) (an cos nÏ0 t + bn sin nÏ0 t) (Ï0 = 2 T n=1
ãããïŒãªã€ã©ãŒã®å ¬åŒïŒejΞ = cos Ξ + j sin Ξ ïŒã䜿ã£ãŠæžãæ¹ãããšïŒä»¥äžã®ããã«ïŒè€çŽ ããŒãªãšçŽæ°å±éãšãªãã
x(t) =
â â
cn ejnÏ0 t
n=ââ
(Ï0 =
2Ï ), T
cn =
1 T
â« T2
x(t)eâjnÏ0 t dt
â T2
ããã§ïŒ1) ããŒãªãšçŽæ°å±éã§ã¯ x(t) ã¯å®é¢æ°ã§ãããïŒè€çŽ ããŒãªãšçŽæ°å±éã§ã¯ x(t) ã¯è€çŽ é¢æ°ãšããŠã®æ±ãã
æééåŒã
å³ G1.4.3
ãŒãè©°ã
æééåŒãã®ã¿ã«ããäžé©åãªããŠã³ãµã³ããªã³ã°ãšãŒãè©°ãã®ã¿ã«ããäžé©åãªã¢ãããµã³ããªã³ã°
åããç¹ïŒåã³ïŒ2) åŸè ã§ã¯åšæ³¢æ°ãè² ã®é åã«ãŸã§æ¡åŒµãããŠããç¹ã«æ³šæããŠæ¬²ããããŸãïŒè€çŽ ããŒãªãšçŽæ°å± éã¯ïŒåºæ¬æ³¢ã ejnÏ0 t ãšããŠïŒä»»æã® x(t) ãïŒéã¿ä»ãåºæ¬æ³¢ã®è¶³ãåããã«å解ããæäœã§ããã ããŠïŒéåšæä¿¡å·ã«å¯ŸããŠã¯ïŒäžèšã®åšæä¿¡å·ã«å¯Ÿããå±éç³»ã T â â ãžãšæ¡åŒµããããšã§å¿çšããããšãå¯èœã§ ãããä»»æã®è€çŽ ã¢ããã°ä¿¡å· x(t) ã«å¯ŸããããŒãªãšéå€æïŒããŒãªãšå€æã¯äžèšãšãªãã
x(t) =
1 2Ï
â« â
X(Ï)ejÏt dÏ,
â« â X(Ï) =
ââ
jÏt
ããã§ãåæ§ïŒè§åšæ³¢æ° Ï ã®åºæ¬æ³¢ e
x(t)eâjÏt dt
ââ
ã«å¯Ÿããéã¿ã X(Ï) ã§ãããåèšå·ïŒ
â
â«
ïŒãç©åèšå·ïŒ ïŒã«ãªãïŒæ£èŠå
ä¿æ°ãä»äžãããã ãã§ããã以äžã¯ã¢ããã°ä¿¡å· x(t) ãïŒåºæ¬æ³¢ãšãã®éã¿ã«å解ããæ°åŠçããŒã«ã§ãããïŒãã ã®ããžã¿ã«ïŒæšæ¬åïŒä¿¡å·çãïŒé¢æ£ããŒãªãšå€æïŒDFTïŒã§ãããæšæ¬ååšæ Ts ïŒãµã³ãã«æ° N ã®æšæ¬åä¿¡å· xs (n) ïŒå³ã¡ xs (n) = x(nTs )ïŒäœã n = 0, ..., N â 1ïŒã«å¯ŸããŠïŒé DFTïŒDFT ã¯äžèšã®ããã«å®çŸ©ãããã N â1
xs (n) =
2Ï 1 â Xs (k)ej N kn , N
Xs (k) =
N â1 â
xs (n)eâj N kn 2Ï
(k = 0, ..., N â 1)
n=0
k=0
2pi
ããã§ãåæ§ïŒåºæ¬æ³¢ã ej N kn ãšããŠïŒn ãæéïŒk ãåšæ³¢æ°ã«å¯Ÿå¿ïŒïŒéã¿ãä»ããŠè¶³ãåãããŠããã ãã§ããã ãªãïŒåæå®æéé·ã¯ N Ts ã§ããããïŒk 㯠NkTs [Hz] ã®åšæ³¢æ°ã«å¯Ÿå¿ãããé DFT åã³ DFT ããªã€ã©ãŒã®å ¬åŒã 䜿ã£ãŠäžè§é¢æ°è¡šèšã«æ»ããšäžèšã®ããã«ãªããxs (n) ã®å®éšïŒèéšã xrs (n)ïŒxis (n) ãšããŠïŒ N â1
xrs (n) =
1 â r Xs (k) cos(2Ïnk/N ) â Xsi (k) sin(2Ïnk/N ) N k=0
xis (n) =
1 N
N â1 â
Xsr (k) sin(2Ïnk/N ) + Xsi (k) cos(2Ïnk/N )
k=0
ã§ããïŒDFT ã¯ïŒ
Xsr (k) =
N â1 â
xrs (n) cos(2Ïnk/N ) + xis (n) sin(2Ïnk/N )
n=0
Xsi (k) =
N â1 â
âxrs (n) sin(2Ïnk/N ) + xis (n) cos(2Ïnk/N )
n=0
ãšãªãããããŸã§æ¥ããšïŒC èšèªã§ããã°ã©ãã³ã°ã§ããã ãããä»»æã®è€çŽ ç³»åä¿¡å· xrs [], xis [] ãå ¥åãšãïŒãããè€
DFT ãšãªãã çŽ ç³»åä¿¡å· Xsr [], Xsi [] ã«å€æããé¢æ°ãæžãã°ïŒããã C èšèªã§å®è£ ãã â ããåºéã®ä¿¡å·ã DFT ãïŒæ¯å¹ ã¹ãã¯ãã«ïŒlog |Xs (k)| = log
ã¹ãã¯ãã«ïŒâ Xs (k) = arctan
(
Xsi (k) Xsr (k)
)
2
Xsr 2 (k) + Xsi (k)ïŒk ã¯åšæ³¢æ°ã«çžåœïŒãïŒäœçž
ïŒãåãåºãããšãåšæ³¢æ°è§£æãšèšããèšãæããã°ïŒååšæ³¢æ°ã®æ¯å¹ ã®å€ã
äœçžã®å€ã䜿ã£ãŠïŒæ§ã ãªæ å ±ãè¡šçŸãããïŒæ¯å¹ ãäœçžã«æ å ±ãåã蟌ãŸããïŒããšãå€ãïŒãšããããšã§ãã3 ãå æ²ããã k = 0, ..., N â 1 ã¯åšæ³¢æ°ã§èšãã° 0, ..., NNâ1 T1s (= NNâ1 Fs ) ã«çžåœãããå®éšã§ç¢ºèªããŠæ¬²ãããïŒDFT ã è¡ãªããšæ¯å¹ ã¹ãã¯ãã«ãäœçžã¹ãã¯ãã«ã¯ãã€ãã¹ãåšæ³¢æ° Fs /2 ã軞ã«ãã察称圢ã«ãªãïŒå³ G1.4.1 åç §ïŒã
2.5 ç³ã¿èŸŒã¿æŒç®ãš FIRïŒFinite Impulse ResponseïŒãã£ã«ã¿ å±å€ã§ããæã誰ãã«æã£ãŠããããããŒã«ã§åãæãåãããã«æã£ãŠããããå šãåãããã«æã£ãŠããã£ãŠãïŒ å£°ã®é¿ãæ¹ïŒèããæ¹ã¯éã£ãŠãããæãæã®å£ãåºãæã¯åãããã«ç©ºæ°ãéåããŠããã¯ããªã®ã«ïŒè³ã«å±ããŠã ã空æ°ã®éåãã¿ãŒã³ã¯ïŒå±å€ãšããŒã«ã§ã¯å€§ããç°ãªã£ãŠãããç®ã®åã«ãã人ã®å£°ãèããä»åºŠã¯æºåž¯ãéããŠè ããåœç¶ïŒçžæã¯åãããã«åã£ãŠããŠãèãããŠæ¥ã声ïŒç©ºæ°ã®éåãã¿ãŒã³ïŒã¯çŽæ¥èãã®ãšæºåž¯ãéããå Žåãš ã§ã¯ç°ãªã£ãŠããããã®ãããªä¿¡å·ã®å€å®¹ã¯ïŒãã®ä¿¡å·ã«ãã£ã«ã¿ããããããšã§èµ·ããçŸè±¡ã§ãããããã§ã¯ïŒããž ã¿ã«ä¿¡å·åŠçã«ããããã£ã«ã¿ãªã³ã°ã®åºç€ã§ããïŒFIR ãã£ã«ã¿ã«ã€ããŠè§£èª¬ãã4 ã åäœã€ã³ãã«ã¹ä¿¡å·ã
{ ÎŽ(n) =
1
(n = 0)
0
(n 6= 0)
3 ã¡ãªã¿ã«ïŒäººéã®è³ã¯ïŒè¿äŒŒçã«èšã£ãŠïŒé³é¿ä¿¡å·ã«å¯ŸããïŒå€©ç¶ã®ã察æ°æ¯å¹ ã¹ãã¯ãã«æœåºåšããšããŠæ©èœããŠããã 4 以äžã§ã¯ïŒæ·»åã® s ã¯çããŠããã
å®ç·ïŒçŽæ¥é³ æ³¢ç·ïŒéæ¥é³
"impulse_response.dat"
B A 0
å³ G1.4.4
500
1000
1500 2000 2500 sample index
3000
3500
4000
åå°æ³¢ã«ãããšã³ãŒïŒéæ¥é³ïŒã®çºçãšïŒé³é¿ããŒã«ã®ã€ã³ãã«ã¹å¿ç
ãšãããšïŒä»»æã®ããžã¿ã«ïŒæšæ¬åïŒä¿¡å· x(n)(n = 0, 1, 2, ...) ã¯äžèšã®ããã«è¡šçŸãããã
x(n) =
â â
x(k)ÎŽ(n â k) (n = 0, 1, 2, ...)
k=0
ã€ãŸãïŒåäœã€ã³ãã«ã¹ãåºæ¬æ³¢ãšããŠïŒãã®éã¿ä»ãåãšã㊠x(n) ãè¡šçŸããŠããã ãã§ãããããã§ïŒåäœã€ã³ã ã«ã¹ ÎŽ(n) ããã£ã«ã¿ H ã«éããæã«ïŒãã®åºåïŒå¿çïŒã h(n)(n = 0, 1, 2, ...) ãšãªã£ããšãããã€ã³ãã«ã¹ã«å¯Ÿãã åºåïŒå¿çïŒïŒãšããæå³ã§ïŒãã® h(n) ãåäœã€ã³ãã«ã¹å¿çãšåŒã¶ããã£ã«ã¿å ¥åã i(n)ïŒåºåã o(n) ãšæžãã°ïŒ
i(n) = ÎŽ(n) â ãã£ã«ã¿ H â o(n) = h(n) (n = 0, 1, 2, ...) ãšãªããã㊠x(n) ããã®ãã£ã«ã¿ã«éããå Žåã®å¿çã¯ã©ã®ããã«ãªãã ãããïŒæå» k ã ã移åããåäœã€ã³ãã« ã¹ ÎŽ(n â k) ã«å¯Ÿããå¿çã¯ïŒåœç¶ïŒh(n â k) ãšãªãããã£ãŠïŒ
i(n) = x(n) =
â â
x(k)ÎŽ(n â k) â ãã£ã«ã¿ H â o(n) =
k=0
â â
x(k)h(n â k) =
k=0
â â
i(k)h(n â k)
(n = 0, 1, 2, ...)
k=0
ãšãªãã®ã¯èªæã ããããããããžã¿ã«ä¿¡å·ã«ããããç³ã¿èŸŒã¿ãæŒç®ã§ãããç³ã¿èŸŒã¿æŒç®ã¯å¯Ÿç§°æ§ãããããïŒ
o(n) =
â â k=0
i(k)h(n â k) =
â â
h(k)i(n â k)
(n = 0, 1, 2, ...)
k=0
ãæç«ãããçµå±ïŒãã£ã«ã¿ã®åäœã€ã³ãã«ã¹å¿çïŒh(n)ïŒãæ¢ç¥ãšãªãã°ïŒåŠäœãªãä¿¡å·ãå ¥åãããšããŠãïŒãã® åºåã¯ããã°ã©ãã³ã°ã§ããããšã«ãªããããŠïŒh(n) ãæéé ã§æã¡åããšãªã£ããšãããå³ã¡ïŒ
h(n) = 0
(n > n0 )
ã§ããããã®å Žåã®ãã£ã«ã¿ãã€ã³ãã«ã¹å¿çãæéãšããæå³ã§ïŒFinite Impulse Response (FIR) ãã£ã«ã¿ãšåŒã¶ã
2.6 åå°æ³¢ã«ãããšã³ãŒå¹æã® FIR ãã£ã«ã¿ãçšããã¢ãã«åãšå®è£ é³é¿ããŒã«ã®ã¹ããŒãžã«ãããŠïŒåäœã€ã³ãã«ã¹ãçºçãããããšãèããŠã¿ããäŸãã°ïŒæãå£ã®åã§ãã³ãšãã ããŠã¿ãïŒå³ G1.4.4 å·Šäžã® AïŒããããšã©ããªãããå³ã«ç€ºãããã«ïŒçŽæ¥è³ïŒå³äžã® BïŒã«å±ãçµè·¯ããããïŒçŽ æ¥é³ïŒå®ç·ïŒïŒæ§ã ãªå£ã«åå°ããŠæéå·®ã䌎ã£ãŠè³ã«å±ãçµè·¯ãããïŒéæ¥é³ïŒç Žç·ïŒãåœç¶ïŒçŽæ¥é³ã¯æžè¡°ãå°ãã ãïŒéæ¥é³ã¯æžè¡°ã倧ããããŸãïŒéæ¥é³ã®çµè·¯ã¯ç¡æ°ã«ããããã®çµæïŒãã³ãšããã€ã³ãã«ã¹çæã«å¯ŸããŠïŒè³ã« å±ããä¿¡å·ãå³ G1.4.4 å³ãšãªã£ããšããããã®ã€ã³ãã«ã¹å¿ç h(n) ãäžããããã°ïŒãã®ããŒã«ã«ãããŠïŒèªåã® å£ã§çºçãããé³ãã©ã®ããã«èããããã¯ïŒç°¡åã«ããã°ã©ãã³ã°ã§ç¢ºèªã§ããããšã«ãªããäŸãã°ã«ãŒãã®ãŒã㌠ã«ã§æããšèªåã®å£°ã¯ã©ã®ããã«èããããïŒã¯ïŒh(n) ããããã°ããã°ã©ãã³ã°ã§ããïŒãšããããšã«ãªãã ãã®åå°æ³¢ã«ãããšã³ãŒå¹æã«å¯Ÿããç°¡åãªã¢ãã«ãèãããä»ïŒã€ã³ãã«ã¹å¿çãå³ G1.4.5 ã®ãããªãã®ã§ã㣠ããšããããã®å ŽåïŒçŽæ¥é³ã«ããã€ã³ãã«ã¹ãšïŒæ°åã®éæ¥é³ã«ããã€ã³ãã«ã¹ã®ã¿ãèãããçŽæ¥é³ãã次ã®åå° é³ãŸã§ã®é 延ãåæé 延ïŒdp ïŒïŒãã®åŸã®é 延ãé«æ¬¡é 延ïŒds ïŒãšåŒã¶ããšã«ããããŸãïŒçŽæ¥é³ã®æ¯å¹ ã a(0)ïŒåå° æ³¢ã«ããéæ¥é³ã®æ¯å¹ ã a(k)(k > 0) ãšãããããã§ä»¥äžã®é¢ä¿åŒãä»®å®ããã
  (k = 0)   1 a(k) = ap (k = 1)    a a(k â 1) (k > 1) s
æ¯ å¹
çŽæ¥é³
éæ¥é³
a(0)
a(1) a(2)
dp
0 å³ G1.4.5
ds
è¡š 倧å°ã®é³é¿ããŒã«çšã®ãã©ã¡ãŒã¿å€
a(3) a(4) a(5)
ds
ds
ds
ãã©ã¡ãŒã¿
å°ããŒã«
倧ããŒã«
ap as dp ds K
0.25 0.4 50 [ms] 25 [ms] 10
0.25 0.4 100 [ms] 50 [ms] 10
æé
çŽæ¥é³åã³éæ¥é³ã§æ§æãããã€ã³ãã«ã¹å¿çã®ã¢
ãã«
n1
ã®æéé ã
ã®æéé ã
z ân1
a1
z ân2
a2
ân3
a3
:
:
+
z ânK
aK
Y (z)
X(z)
+
X(z) z
å³ G1.4.6
z â1 z â1
nK z â1
Y (z)
z â1 a1
z â1
z â1 a3
a2
aK
å³ G1.4.4 ã«å¯Ÿãã 2 éãã®ãã£ã«ã¿æ§æ
    0 d(k) =
(k = 0)
dp (k = 1)    d + d(k â 1) (k > 1) s
ap ã¯åæåå°é³ã®æžè¡°çïŒas ã¯é«æ¬¡åå°é³ã®æžè¡°çã§ããããã®ãããªã¢ãã«ãä»®å®ããã°ïŒå ¥å i(n) ã«å¯Ÿããåºå o(n) ã¯æ¬¡ã®ããã«è¡šçŸã§ãããFIR ãã£ã«ã¿ã®äžçš®ã§ããã o(n) =
K â
a(k)i(n â d(k))
k=0
ãã®ãããªã¢ãã«ãä»®å®ããã°ïŒå¹Ÿã€ãã®ãã©ã¡ãŒã¿å€ãæäœããããšã§ïŒæ§ã ãªãšã³ãŒå¹æãæš¡æ¬ããããšãã§ã ããäŸãã°ïŒè¡šã«ç€ºãå€ã䜿ãããšã§ïŒå€§å°ã®é³é¿ããŒã«ãæš¡æ¬ããããšãã§ããã ãªãïŒå³ G1.4.4 ã«ç€ºããåå°æ³¢ã«ããé³é¿å¹æã¯ïŒåºæ¬çã«ã¯ïŒããåäžã®é³æºããã®é³æ³¢ãç°ãªãæéé ãã§ïŒã ã€ïŒç°ãªãä¿æ°åãããŠïŒèŠ³æž¬è ã«å±ãããšãåçãšãªã£ãŠãããããããã®ãŸãŸããžã¿ã«ãã£ã«ã¿çã«è§£éããã°5 ïŒ å³ G1.4.6 å·Šãšãªãããããå³ G1.4.6 å³ã®ããã«èããã°ïŒå žåç㪠FIR ãã£ã«ã¿ã§ããããšãåããã ããã
3. å®éšèª²é¡ãšæ€èšäºé æ¬èª²é¡ã«ã€ããŠã web ããŒãžãçšæãããŠãããåçš®ããŒã¿ããµã³ãã«ããã°ã©ã ãããŠã³ããŒãã§ããããŸãïŒç 解ã®å©ããšãªããããªãªã³ã¯ã玹ä»ããŠããã®ã§å¿ èŠã«å¿ããŠåç §ãããšè¯ãããªãïŒç®å®ãšããŠïŒ2 幎åŸæã«ãä¿¡å· è§£æåºç€ãã®åäœãååŸããè ã¯å šèª²é¡ã«èšãã§æ¬²ããããã以å€ã®è ã¯èª²é¡ 4.4 ãŸã§ã¯éè¡ããŠæ¬²ããã
æ¬èª²é¡ 4.1 åäžé³æºã«å¯ŸããŠç°ãªãæšæ¬ååšæ³¢æ°ã§æšæ¬åãããµãŠã³ãããŒã¿ã®èŽå æšæ¬ååšæ³¢æ° Fs ãäžãããïŒãããçšããŠä»»æã®ä»»æã®é³æºã AD å€æããå ŽåïŒãšã€ãªã¢ã¹ãçããªããã ã«ïŒäºåã« Fs /2[Hz] 以äžã®æ å ±ãåé€ããïŒLow Pass Filtering, LPFïŒå¿ èŠããããæ°çš®é¡ã®é³æºã«å¯ŸããŠïŒé©å 㪠LPF ãæœããäžã§ïŒ48kHz, 16kHz, 8kHz ã®æšæ¬åïŒ16bit ã®éååãæœããŠåŸãããããžã¿ã«ã»ãµãŠã³ãããŒã¿ ãå®éš web ã«æ²èŒããŠããããããèŽåããŠïŒæšæ¬ååšæ³¢æ°ã®éãã«ããèããæ¹ã®éãã«ã€ããŠïŒé³æºéã§æ¯èŒã 5 ä¹ç®ïŒå ç®ïŒæéé ãã® 3 ã€ã®æŒç®ã§ä¿¡å·ã®åŠçãèããã°ïŒãšããããšã§ãã
ããããžã¿ã«ã»ãµãŠã³ãããŒã¿åçããã°ã©ã 㯠web ã«ããã æ€èšäºé
é³æºã«ãã£ãŠãæšæ¬ååšæ³¢æ°ã®éãã«ããèããã®å·®ãã«å·®ãããã®ã¯äœæ ãïŒãèããã
æ¬èª²é¡ 4.2 äžé©åã«æšæ¬åãããïŒäžé©åã«ã¢ããïŒããŠã³ãµã³ããªã³ã°ãããïŒãµãŠã³ãããŒã¿ã®èŽå å³ G1.4.3 ã«ç€ºãããã«ïŒ48kHz ã§ïŒæ£ããïŒæšæ¬åãããããŒã¿ã«å¯Ÿã㊠6 ãµã³ãã«æ¯ã«äžã€ã®å€ãæœåºã㊠äœæããïŒç䌌 8kHz æšæ¬åããŒã¿ãæ²èŒããŠããïŒäžé©åãªããŠã³ãµã³ããªã³ã°ïŒã48kHz ããŒã¿ã 4kHz 以äžã®åž¯ åã«æ å ±ãæã€å ŽåïŒåœç¶ïŒãšã€ãªã¢ã¹ãçãããé©åã« 8kHz ã§æšæ¬åãããããŒã¿ã¯èª²é¡ 1 ã§èŽåãããïŒäžé© å㪠8kHz ããŒã¿ã«ã€ããŠãèŽåãïŒãšã€ãªã¢ã¹ã®èããæ¹ïŒç®ç«ã¡æ¹ïŒã«ã€ããŠé³æºéã§æ¯èŒããã ãŸãïŒ8kHz ã§ïŒæ£ããïŒæšæ¬åãããããŒã¿ã«å¯ŸããŠãŒãã 5 ã€ãã€æ¿å ¥ããããšã§äœæããïŒç䌌 48kHz æšæ¬åããŒã¿ãæ²èŒããŠããïŒäžé©åãªã¢ãããµã³ããªã³ã°ïŒãããã«ã€ããŠãèŽåãïŒæ¯èŒãããæ£ããã¢ãããµã³ ããªã³ã°ããããŒã¿ïŒ48kHz æšæ¬åããŒã¿ã§ãããïŒæ å ±ã¯ 4kHz 以äžã«ã®ã¿ååšããïŒãæ²èŒããŠããã æ€èšäºé
èª²é¡ 4.1 ãèžãŸãïŒãšã€ãªã¢ã¹ã®ç®ç«ã¡æ¹ã«é³æºéã§å·®ãããçç±ãèããããŸãïŒäžé©åãªã¢ãã
ãµã³ããªã³ã°ã«ãã£ãŠäœããã 48kHz ããŒã¿ã¯ïŒã©ã®ãããªã¹ãã¯ãã«åœ¢ç¶ãæã€ããšã«ãªãã®ãïŒãèããã
æ¬èª²é¡ 4.3 C èšèªã«ããã DFT ã®å®è£ ä»»æã®è€çŽ ç³»åä¿¡å· xrs [], xis [] ãå ¥åãšãïŒãããè€çŽ ç³»åä¿¡å· Xsr [], Xsi [] ã«å€æããé¢æ°ãããã°ã©ãã³ã°ããã ãŸããã®é¢æ°ãçšããŠïŒä»»æã®è€çŽ ç³»åä¿¡å· xrs [], xis [] ã«å¯ŸããŠïŒãã®å¯Ÿæ°æ¯å¹ ã¹ãã¯ãã«ãèšç®ããã³ãã³ããäœæ ãããã³ãã³ãã®åºåããã¡ã€ã«åãïŒGNUPLOT ã䜿ã£ãŠã°ã©ãåããããªãïŒä»¥éã®å®éšã§ã¯ïŒåºéé· N ãç° ] [ ãªãã¹ãã¯ãã«ãæ¯èŒããããïŒå¯Ÿæ°æ¯å¹ ã¹ãã¯ãã«ãšããŠã¯ log10
1 i2 r2 N {Xs (k) + Xs (k)}
ã䜿ãã
ç©ŽåããœãŒã¹ãã¡ã€ã«ã¯ïŒå®éš web ã«æ²èŒããŠããã
æ¬èª²é¡ 4.4 DFT ã«ããã¹ãã¯ãã«è§£æ6 èª²é¡ 4.1ïŒèª²é¡ 4.2 ã§èŽåãããµãŠã³ãããŒã¿ãåæãïŒå¯Ÿæ°æ¯å¹ ã¹ãã¯ãã«ç¹æ§ãæ±ããã8kHz, 16kHz, 48kHz ã®ããŒã¿ã«å¯ŸããŠïŒåºéé·ã¯ N = 256, 512, 1536 ãšãããå®æéé·ã§èšãã°ïŒã©ãã 32[msec] ã§ããããªãïŒåé³ æºã«å¯ŸããŠïŒã©ã®æç¹ããã® N ãµã³ãã«ãåæ察象ããã®ãã«ã€ããŠã¯å®éš web ãåç §ããã æ€èšäºé
èª²é¡ 4.1, èª²é¡ 4.2 ã§è¡ãªã£ãäºæ³ãš DFT ã«ããåæçµæãæ¯èŒãïŒèªãã®äºæ³ãæ€èšŒãã7 ããšã€
ãªã¢ã¹ãç®ç«ã€é³æºïŒäžé©åãªã¢ãããµã³ããªã³ã°ã«ãã圱é¿ã¯ïŒåæçµæã®ã©ãã«çŸããŠããã®ãèå¯ããã
éžæèª²é¡ 4.5 å®éã®ã€ã³ãã«ã¹å¿çã䜿ã£ãé³é¿å¹æã·ãã¥ã¬ãŒã·ã§ã³ æ°çš®é¡ã®ç°ãªãã€ã³ãã«ã¹å¿çãå®éš web ã«æ²èŒããŠããïŒããŒã¿ãã©ãŒããããªã©ã¯ web åç §ïŒããããçšã ãŠïŒåçš®é³æºãæŒåºããŠã¿ãããªãïŒæ¬èª²é¡ã®ããã«å®éã«ç¡é¿å®€ïŒåé¿é³ãå šãç¡ãéšå±ïŒã§åé²ããããµãŠã³ã ããŒã¿ãæ²èŒããŠãããããã«ã€ããŠãå®éšããŠã¿ãã ç©ŽåããœãŒã¹ãã¡ã€ã«ã¯ïŒå®éš web ã«æ²èŒããŠããã 6 å¿ ãïŒèª²é¡ 4.1ïŒèª²é¡ 4.2 ã®äºæž¬ãè¡ãªã£ãŠããå®è¡ããããš!!! 7 èª²é¡ 4.1, èª²é¡ 4.2 ã®äºæ³ãäžé©åã§ãã£ãŠãïŒèª²é¡ 4.4 ã§ã®æ€èšŒã®çµæïŒæ£ããèå¯ã«å°éããŠããã°ïŒæžç¹ã¯ããªããèªãã®æèã®
誀ããå®éšãéããŠèŠã€ãïŒãããæ£ãèœåãä»åŸèŠæ±ãããèœåã®äžã€ã§ããã
æ€èšäºé ãšã³ãŒå¹æ㯠FIR ãã£ã«ã¿ã§ããããšã説æãããäœæããåçš®ãšã³ãŒãã£ã«ã¿ãŒã®å¯Ÿæ°æ¯å¹ ã¹ã㯠ãã«ãæ±ãïŒGNUPLOT ã§å³ç€ºããã
éžæèª²é¡ 4.6 FIR ã䜿ã£ãïŒç°¡æãµãŠã³ããšãã§ã¯ã¿ã®è©Šäœ å³ G1.4.5 ã«åŸã£ãŠç°¡æãµãŠã³ããšãã§ã¯ã¿ãè©ŠäœããŠã¿ãããªãïŒç©ŽåããœãŒã¹ãã¡ã€ã«ã¯ïŒç¡ãã
4. å®éšæ¹æ³ãšæ³šæäºé æ¬ããã¹ããšå®éš web ãããåç §ããªããå®éšãé²ããããã«ãåçš®ã³ãã³ãã®äœ¿ãæ¹ïŒããŒã¿ãã¡ã€ã«ã®ãã©ãŒ ããããªã©ã®æ å ±ãå®éš web ã«æ²èŒããŠããããªãïŒé åž PC ã®å èµã¹ããŒã«ã§ã¯ïŒé³ã®éããããåãããªãå¯èœæ§ ãããã®ã§ïŒå€ä»ãã¹ããŒã«ãç¹ãããšè¯ãã ãããäœãïŒããã¿ã«ããªã¥ãŒã ãäžããŠåãã®åŠçã«è¿·æããããªã ããã«ããŸãïŒãããã»ãããã€ã¯ã¯ä¹±æŽã«æ±ããšïŒç ŽæããïŒæããïŒããšãããã®ã§æ³šæããããã«ã
åèå³æž ⢠ãããã°ã©ãã³ã°èšèª CãB. W. ã«ãŒããã³ïŒD. M. ãªãããŒèïŒç³ç°æŽä¹ èš³ïŒå ±ç«åºç (1989) ⢠ãä¿¡å·è§£æå ¥éãè¶å·åžžæ²»èïŒè¿ä»£ç§åŠç€Ÿ (1992) ⢠ããã£ãžã¿ã«ã»ãµãŠã³ãåŠçå ¥éãéæšçŽå²ïŒCQ åºç瀟 (2006) ⢠ãC èšèªã§ã¯ãããé³ã®ããã°ã©ãã³ã°ãéæšçŽå²ïŒãªãŒã 瀟 (2008)
G2.
æ å ±: 第 2 éš
第 5 æ¥ ã€ã³ã¿ãŒãããåºç€ 1. 㯠ã ã ã« ä»åããããããã€ã³ã¿ãŒãããé»è©± (or äŒè°ã·ã¹ãã ) ãäœãã«ããã£ãŠã®, ããäžã€ã®éèŠãªèŠçŽ ã§ãã, ããã ã¯ãŒã¯ã«é¢ãã課é¡ãå§ãã. ä»åã¯, ãããã¯ãŒã¯ã®ãããã°ã©ãã³ã°ãã«ã€ããŠåŠã¶åã®æºåãšããŠ, ã€ã³ã¿ãŒãããã«ã€ããŠç解ããŠããã¹ã æŠå¿µãåŠã³, æ¢åã®ã³ãã³ããéããŠãããã¯ãŒã¯ã䜿ã£ãŠã¿ãäºã§, ãããå®æãã. ä»ååŠã¶å 容ã¯, ãããã¯ãŒã¯ ãçšãããœãããŠã§ã¢ãèšå®ããã, ãããã¯ãŒã¯ãã€ãªãããªãæã®ãã©ãã«ã·ã¥ãŒãã®ããã«å¿ èŠãªç¥èãæŠå¿µã§ ããã.
æºåèª²é¡ 5.1 æŒç¿çš wireless network ZENKIJIKKEN ã«æ¥ç¶ã, ã€ã³ã¿ãŒãããã®ããŒãžãé²èŠ§ã§ããäºã確ãã ã. äŸãã°æŒç¿ããŒã ããŒãž http://g1g2g3.logos.ic.i.u-tokyo.ac.jp/ã«ã¢ã¯ã»ã¹ããŠã¿ã.
2. ã€ã³ã¿ãŒãããã®å®äœ 2.1 IP ã³ã³ãã¥ãŒã¿ãæ¥åžžå©çšããã«åœãã£ãŠã¯, ã€ã³ã¿ãŒããããžæ¥ç¶ãããŠãã â Web ããŒãžãé²èŠ§ã§ããŠã¡ãŒã«ãã§ãã ãšããäºãããããªã. æ¬å®éšãéããŠãã€ã³ã¿ãŒããããžæ¥ç¶ãããŠããããšããç¶æ ãããå°ã粟å¯ã«, æè¡çã«ç 解ã§ããããã«ãªã£ãŠæ¬²ãã. ãã€ã³ã¿ãŒãããããšããç©ã®æè¡çãªå®äœã¯, Internet Protocol (IP) ãšããéä¿¡ãããã³ã«ãåºç€ãšããŠãã. IP ã¯, IP ã¢ãã¬ã¹ãšããååãå®å ãšããŠ, ãã®å®å ããæå®ããã°äžçäžã®ã©ããžã§ããã±ãããå±ããŠããããšãã ä»çµã¿ã§ãã. ãã®ããã« IP ã§ã¯æ§ã ãªå®å ãžã®çµè·¯ (ã«ãŒã) ãæãåãä»çµã¿, IP ãäœäœå±€ã®ãããã¯ãŒã¯ (Local
Area Network. æç· LAN ãç¡ç· LAN) ãšçµã³ã€ããä»çµã¿ãèŠå®ããŠãã. IP ã¢ãã¬ã¹ã®äŸã¯, 133.11.238.2 ã®ãããª, 0-255 ãŸã§ã®æ°åã 4 ã€äžŠãã ç©ã§ãã. ãããæ°ã§èšãã°, 8 ããã Ã4 = 32 ããã ã§ãã. ããã¯, IP ver. 4 (IPv4) ãšåŒã°ãããããã³ã«ã§çšãã IP ã¢ãã¬ã¹ã§, IP ver. 6 (IPv6) ã®å Žå ã¯, FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 ã®ããã«, 16 é²æ° 4 æ¡ (16 ããã)Ã8 = 128 ããã ã®ã¢ãã¬ã¹ ãçšãããã. æ¬å®éšã§çšãã IP ã¢ãã¬ã¹ã¯ IP ver. 4 ã®ç©ã§ãã. åœç¶ã®äºãªãããããã¹ãã§, IP ãçšããéä¿¡ã ã§ããããã®æ¡ä»¶ãã® 1 ã¯, IP ã¢ãã¬ã¹ãå²ãåœãŠãããäºã§ãã.
UNIX ã§ã¯, ãã¹ãã«èšå®ãããŠãã IP ã¢ãã¬ã¹ã¯, ifconï¬g ã³ãã³ãã䜿ã£ãŠèª¿ã¹ãäºãã§ãã (Windows ã§ã¯, ipconï¬g).
æºåèª²é¡ 5.2 ifconï¬g ã³ãã³ããçšããŠèªåã®ã¢ãã¬ã¹ã調ã¹ãŠã¿ã.
$ ifconï¬g
ãªã, æç·, ç¡ç·å«ããŠå€æ°ã®ãããã¯ãŒã¯ã€ã³ã¿ãã§ãŒã¹ã«é¢ããåºåããªãããã, å®éšå®€ã§ã¯ç¡ç· LAN ãçšã ãŠããã ãããã, ãã®ãã¡èŠãã¹ãã¯ç¡ç· LAN ã®ç©ã§ãã. ãã㯠wlan0 ãšããååã®ã€ã³ã¿ãã§ãŒã¹ã«ãªã£ãŠã ãããšã ãã.
$ ifconï¬g wlan0 ãšããã° wlan0 ã®èšå®å 容ã ããèŠãäºãã§ãã. ãã€ã³ã¿ãŒãããã«æ¥ç¶ãããŠããããšããç¶æ ã¯, æãåå§çãªæå³ã§ã¯ãIP ãã±ãããéåä¿¡ã§ããããšããäºã§ ãã. UNIX ã§, ããã¢ãã¬ã¹ã« IP ãã±ãããéä¿¡ã, ãã®è¿äºãåãåããšããã³ãã³ãã, ping ã§ãã. Windows ã§ã ping ã³ãã³ããçšãã.
æºåèª²é¡ 5.3 ifconï¬g ã³ãã³ããçšããŠãäºãã®ãã·ã³ã® IP ã¢ãã¬ã¹ã調ã¹ãŠãããæãåã, ping ã³ãã³ããçš ããŠãäºãã®çé確èªãããŠã¿ã. çŸåšã©ã®ãã·ã³ãåä¹ã£ãŠããªã IP ã¢ãã¬ã¹ãžåã㊠ping ã³ãã³ãã§ãã±ãã ãæããŠã, åœç¶è¿äºã¯åž°ã£ãŠããªã. é©åœãªã¢ãã¬ã¹ãæå®ã㊠ping ã³ãã³ããå®è¡ããŠã¿ãŠ, ãã®æã®æåã確 èªããŠã¿ã.
$ ping h åéã®ãã·ã³ã® IP ã¢ãã¬ã¹ i $ ping www.yahoo.co.jp $ ping h ã§ããã㪠IP ã¢ãã¬ã¹ i
ãã¡ãã, èªåã« IP ã¢ãã¬ã¹ãå²ãåœãŠãããŠããªããšãã« ping ã³ãã³ããçºè¡ããŠã, æåããªã. ããããã㊠詊ããŠç¢ºèªããŠãããšè¯ã. ãšã©ãŒã®ãšãã«ã©ããªæåã«ãªãããç¥ã£ãŠããäºã¯, ãæ¥ãã°åããã§, åŸã èªåã®ããã°ã©ã ã®ééãã蚺æãã éã«éèŠã§ãã.
IP ã§äžçäžã®ãã·ã³ãšãã±ããã®ãããšããåºæ¥ãããã«, äžå¿çãªåœ¹å²ãæãããŠããã®ã, ãã±ããã®å®å IP 㢠ãã¬ã¹ã«å¿ããŠ, ãã®ãã±ãããé©åãªæ¹åãžéã蟌ã (転éãã) ã«ãŒã¿ãšåŒã°ããæ©æã§ãã. ã«ãŒã¿ã§ãªãæ©æ (ã» ãšãã©ã®ãã¹ã) ã¯,
⢠èªåã®ãè¿é£ãã®å®å ãžã¯, LAN ãçšããŠãã±ãããçŽæ¥å±ã, ⢠ãã以å€ã®ãã±ããã¯ãã¹ãŠæ±ºããããã«ãŒã¿ (default gateway) ã«æãã€ãã, ãšããåçŽãªäºããããªã. ã©ã® IP ã¢ãã¬ã¹ããè¿é£ããšã¿ãªããã¯, ããµããããããšããç¯å²ã§èšå®ãããŠãã, å® äœãšããŠã¯ãã IP ã¢ãã¬ã¹ã®åºé (åœç¶ãã®åºéã«ã¯èªåã® IP ã¢ãã¬ã¹ãå«ãŸãã) ã§ãã. è¡šèšãšããŠã¯,
133.11.238.0/25 ã®ããã«,
address/n ãšããè¡šèšãçšãã. address 㯠IP ã¢ãã¬ã¹, n 㯠(åççã«ã¯)0. . . 31 ãŸã§ã®æŽæ°ã§ãã. ããã¯ãaddress ãšäžäœ n ããããäžèŽãããã¹ãŠã®ã¢ãã¬ã¹ã®éåããæå³ããŠãã. äŸãã° 133.11.238.0/25 ã¯, 133.11.238.0, 133.11.238.1,
. . . , 133.11.238.127 ãæå³ããŠãã. äŸãã° 133.11.238.10 ãšãã IP ã¢ãã¬ã¹ã§, ãµãããããšã㊠133.11.238.0/25 ãèšå®ããŠãããã¹ãããã IP 㢠ãã¬ã¹ã« IP ãã±ãããéä¿¡ãããšã,
⢠ãã®ã¢ãã¬ã¹ã, äžèšã®ç¯å²ã«ããã°, ãããžã¯å®äœå±€ã®ãããã¯ãŒã¯ (LAN) ã®æ©èœãçšã㊠(ã©ãã«ãããã« ã) ãã±ãããå±ãã
⢠ããã§ãªããã°, default gateway ã«, (ãã¯ãå®äœå±€ã®ãããã¯ãŒã¯ã®æ©èœãçšããŠ), ãã±ãããå±ããŠ, ããšã¯ é©åãªè»¢éå ã«éã£ãŠããã
ãšããå Žååãããã. ãã®å Žååãã, å®å ã«å¿ããŠãã£ãšçŽ°ããèšå®ããŠããã®ãã«ãŒã¿ã§ãã. é©åœã«æžãããã© ãã«ãããã«ããã®éšåã¯ãã®ãã¡ææ¥ã§åŠã¶äºã ãã. èŠããã«ãµããããå ã¯ãã©ãã«ãããã«ããLAN ã®æ©èœã çšããŠéä¿¡ã, ãµãããããè¶ããããã«ã«ãŒãã£ã³ã°ãè¡ã£ãŠãµããããéãæž¡ãæ©ãã®ã IP éä¿¡ã§, ã ãã Internet
(Inter Network) ãšåŒã°ãã. ãããŸã§ããŸãšãããš, ãããã¹ã㧠IP éä¿¡ãã§ããããã®æ¡ä»¶ãã® 2 ã¯, ãã®ãã¹ããå±ãããµããããã®æ å ±ã èšå®ãããŠããäº, ã§ãã. ãããŠæ¡ä»¶ãã® 3 ã¯, default gateway ãæ£ããèšå®ãããŠããäº, ã§ãã. ãã , ãã ã¯èªåãšåäžã®ãµããããå ã®çžæãšããéä¿¡ããªãã®ã§ããã°ãªããŠãããäºã«ãªã. ãµããããã®æ å ±ã ifconï¬g ã³ãã³ãã§èª¿ã¹ãäºãã§ãã. å®éã«è¡šç€ºãããã®ã¯ subnet mask (ãµãããããã¹ã¯) ãšåŒã°ããæ å ±ã§ãã. ã ããµãããã address/n ã«å¯Ÿãããµãããããã¹ã¯ãšã¯, 32 bit äžäžäœã® n ãããããã¹ãŠ 1, äžäœ (32 â n) ãããã
0 ã§ãããããªãããåã IP ã¢ãã¬ã¹é¢šã«è¡šèšããç©ã§ãã. äŸãã° 133.11.238.0/25 ãšãããµããããã®ãµãããã ãã¹ã¯ã¯, äžäœ 25 ãããã 1 ã§ãããããªãããåã IP ã¢ãã¬ã¹é¢šã«è¡šèšãã, 255.255.255.128 ã§ãã. èŠããã«,
133.11.238.0/25 ãšãããµããããã¯, a & 255.255.255.128 = 133.11.238.0
ãšãªããã㪠IP ã¢ãã¬ã¹ a ã®éå, ãšããããšã§ãã.
Default gateway ã¯, route ã³ãã³ããçšããŠèª¿ã¹ãããšãã§ãã. ãã®ã³ãã³ãã¯äžè¬ã«, ã©ã® IP ã¢ãã¬ã¹å®ã®ã ã±ããã¯, 次ã«ã©ããžå±ããããšèšãæ å ± (ã«ãŒãã£ã³ã°ããŒãã«; çµè·¯è¡š) ã衚瀺ãããã®ã§, éåžžã®ãã¹ãã§ããã°, åäžãµããããå ãšãã以å€ã®æ¬ã衚瀺ããã. ãããŠåŸè ã«å¯Ÿã㊠default gateway ãžãã±ãããæãã, ãšããæ å ± ã衚瀺ããã. $ route -n ã«ãŒãã« IP çµè·¯ããŒãã« åä¿¡å ãµã€ã
ã²ãŒããŠã§ã€
ããããã¹ã¯
ãã©ã°
Metric
Ref
䜿çšæ°
ã€ã³ã¿ãã§ãŒã¹
133.11.238.0
0.0.0.0
255.255.255.128
U
2
0
0
wlan0
0.0.0.0
133.11.238.1
0.0.0.0
UG
0
0
0
wlan0
2.2 ã°ããŒãã« IP ã¢ãã¬ã¹ãšãã©ã€ããŒã IP ã¢ãã¬ã¹ ã²ãšãã³ãã¹ã (PC ãªã©) ã« IP ã¢ãã¬ã¹, default gateway, ãµãããããã¹ã¯ãèšå®ãã, default gateway ãŸã§ 㯠LAN ã§éä¿¡ã§ãã, ãšããç¶æ ã確ä¿ãããŠããŸãã°, ããšã¯äžçäžã®ã©ããªãã·ã³ã«å¯ŸããŠã IP ãã±ãããå±ã ãäºãåºæ¥ã. ãã¡ããããã«ã¯ default gateway ãæ£ããèšå®ãããŠãã (å®å IP ã¢ãã¬ã¹ã«å¿ããŠé©åãªçµè·¯ = 次ã®ã«ãŒã¿ãéžãã§ããã), ãšããã®ãåæã§ããã, ãã®ä»çµã¿ã«ã€ããŠè©±ããšé·ããªã (ãã®ãã¡ææ¥ã§åºãŠãã) ã, 幞ãåã ã®ãã¹ãããã®èšå®ã«é¢äžããããã§ã¯ãªãã®ã§ããã§ã¯æ·±å ¥ãããªã. éã«äžçäžã®ãã¹ããã default
gateway ãŸã§, ãããµããããè¡ãã® IP ãã±ãããå±ããšããç¶æ ã«ãªã£ãŠããã°ããšã¯ãã®ãµããããäžã®åã ã®ã ã¹ãã«å¯Ÿãã IP ãã±ããããã® gateway ã LAN ã䜿ã£ãŠå±ããŠããã. ããããŠåã ã®ãã¹ãã¯, äžçäžã®ãã¹ããš éä¿¡ãåºæ¥ãããšã«ãªã. ãã ãããã€ãäŸå€ããã, å®éšå®€ç°å¢ããã®ãäŸå€ãã«çžåœããŠããã®ã§ãããäžå¿èª¬æããŠãã. ãã£ã«ã¿ãªã³ã° : ã»ãã¥ãªãã£ã®æ¹éã«ãã, ã«ãŒã¿ãäžéšã® IP ãã±ããã転éããªã, ãšããããšããã. äŸãã°,
⢠ç¹å®ã® IP ã¢ãã¬ã¹ã«åãããã±ãããã転éããªã ⢠ç¹å®ã® IP ã¢ãã¬ã¹ã«åãããã±ããã¯, ç¹å®ã® IP ã¢ãã¬ã¹ããéãããŠãããã±ãããã転éããªã ãªã©. åŸè¿°ãããããŒãããçšããŠããã«çŽ°ããèšå®ãããããšããã. ãã©ã€ããŒã IP ã¢ãã¬ã¹ : å šäžççãªæ £ç¿ãšããŠ, ã«ãŒã¿ããããã«åãã転éãããªãããšã決ããããŠãããµã ããããååšãã. ãããã®ãµããããã«å±ããã¢ãã¬ã¹ããã©ã€ããŒã IP ã¢ãã¬ã¹ãšåŒã¶. ãã以å€ã® IP 㢠ãã¬ã¹ã¯ã°ããŒãã« IP ã¢ãã¬ã¹ãšåŒã¶. ãã©ã€ããŒã IP ã¢ãã¬ã¹ãšã¯å ·äœçã«ã¯ä»¥äžã§ãã.
192.168.0.0/16
192.168.0.0
...
192.168.255.255
172.16.0.0/12
172.16.0.0
...
172.31.255.255
10.0.0.0/8
10.0.0.0
...
10.255.255.255
ãããã® IP ã¢ãã¬ã¹ã«å¯ŸããŠ, ç°ãªããµããããããã«ãŒã¿ãçµç±ã㊠IP ãã±ããã転éããã, ãšããããšã¯ æ £ç¿äžè¡ãããªã. éã«èšããš, æ¬æ¥äžçäžã§äžæã«å²ãåœãŠãããã¯ãã® IP ã¢ãã¬ã¹ã, ãã©ã€ããŒã IP ã¢ãã¬ã¹ã«é¢ããŠã¯äŸå€ ã§, LAN ãç°ãªãã°åããã©ã€ããŒã IP ã¢ãã¬ã¹ãè€æ°ã®ãã·ã³ãåä¹ã£ãŠãæ··ä¹±ã¯çããªã. ãã©ã€ããŒã
IP ã¢ãã¬ã¹ã®ååã®ç±æ¥ã§ããã. ããã§ãã©ã€ããŒã IP ã¢ãã¬ã¹ (ãµãããã) ã¯, LAN ãæ軜ã«æ§ç¯ããæ 段ãšããŠå€çšãããŠãã. å®éšå®€ã®ç¡ç· LAN ã«ã€ãªãã å Žåã, ãã©ã€ããŒã IP ã¢ãã¬ã¹ãå²ãåœãŠããã. 家 åºã§ãããã€ããšå¥çŽããŠ, ãããŒããã³ãã«ãŒã¿ãªã©ã« PC ãã€ãªãã éã«å²ãåœãŠãããã¢ãã¬ã¹ã倧æŠãã© ã€ããŒã IP ã¢ãã¬ã¹ã§ãã.
ãã©ã€ããŒã IP ã¢ãã¬ã¹ããæããªã PC ã§ã, äžçäžã®ãã·ã³ãžåããŠãã±ãããéãããšã¯å¯èœã§ãã. äžæ¹, äžç äžã®ãã·ã³ãããã®ãã©ã€ããŒã IP ã¢ãã¬ã¹ãžåããŠãã±ãããéã£ãŠã, ããããã®ãã·ã³ã«å±ãããšã¯ãªã. ã§ã¯ ãªã, ãã®ãããªãã·ã³ã§ãæ®éã«ããŒã ããŒãžãèŠãããã®ã? ããŒã ããŒãžãèŠãããšãããªã¯ãšã¹ãã Web ãµãŒ ãã«å±ããšãããŸã§ã¯ããã, è¿äº (ããŒã ããŒãžã®å 容) ãã©ããã£ãŠåããšãã®ã? ããã«ã¯åããã«ããããªãã¯ãåããŠãã. èªåããäžçäžã®ãã·ã³ãžåã㊠IP ãã±ãããéãéã«çµç±ããã«ãŒ ã¿ (é称, NAT ã«ãŒã¿ãšåŒã°ãã. 家åºã§äœ¿ããããŒããã³ãã«ãŒã¿ã倧æŠãããã§ãã) ã, IP ãã±ããã®éä¿¡å IP ã¢ãã¬ã¹ããã£ãã, PC ã® IP ã¢ãã¬ã¹ããã«ãŒã¿ã®ç©ã«å€æŽããŠãã. ãªã¯ãšã¹ããåãåã£ã Web ãµãŒãã¯ãã ãã«ãŒã¿ããã®ç©ã§ãããšæã£ããŸãŸ, ã«ãŒã¿ã«è¿äºãè¿ã. ãããŠã«ãŒã¿ã«å±ãã IP ãã±ãããã«ãŒã¿ã PC ã«è»¢é ãã.
2.3 UDP ãš TCP IP ã§ã®éä¿¡ãã§ããããã«ãªãã°, åççã«ã¯, äžçäžã®ã©ã®ãã¹ããšã§ããã±ããã®ãããšããã§ãã. ããããªã ãå®éã®ã¢ããªã±ãŒã·ã§ã³ãäœãã«åœãã£ãŠã¯ IP ã ãã§ã¯ãŸã äžååãªç¹ãå€ã. ãã®ããã«, UDP ãš TCP ãšãã ãããã³ã«ã IP äžã«æ§ç¯ãããŠãã.
IP ãäžååãªç¹ã®ç¬¬äžã¯, IP ã¢ãã¬ã¹ã¯åã ã®ãã¹ãã«ã€ãäžã€ (è€æ°èšå®ããäºãã§ããã, ãã®å Žåã§ãããã ãæ°å) ããæãããããªããšããããšã§ãã. ãã®ãã, è€æ°ã®ã¢ããªã±ãŒã·ã§ã³ãäžã€ã®ãã¹ãã§åæã«èµ·åãã㊠éä¿¡ããããšæããš, ãããã®ä»åããããå¿ èŠãçãã. ã€ãŸããããè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ã«ç°ãªãè«ççãªãå® å ããå²ãåœãŠãŠãããªããšãããªã. äŸã話ãšããŠã¯, ãæ±äº¬éœæ京åºæ¬é· 7-3-1ããšããã¢ãã¬ã¹ã«, ãã«ã®ååãåŠ ç§ã®ååãã€ããŠ, ãããå®éã«åãåã人ãæå®ã§ããå¿ èŠãæã. ãã®ããã«ããŒãçªå·ãšããæ°åãçšã, IP 㢠ãã¬ã¹ãšããŒãã®çµãéä¿¡ã®å®å å, ãšã§ããããã«ããã®ã UDP (User Datagram Protocol) ã§ãã. ããŒã çªå·ã¯ 16 ããã, ã€ãŸãäžã€ã® IP ã¢ãã¬ã¹ã§, 65,536 åã® UDP éä¿¡ã®å®å ãè«ççã«æã€äºãã§ãã.
IP ãäžååãªç¹ã®ç¬¬äºã¯, éä¿¡ã®å°éä¿èšŒ (ä¿¡é Œæ§) ããªããšããç¹ã§ãã. ã€ãŸã, éä¿¡ãããã±ãããå¿ ãå®å ã« å°çãããšããä¿èšŒã¯ãªãã, å°çãããåŠããéä¿¡è ã«ç¥ãããä»çµã¿ããªã. ããã¯æ§ã ãªå Žé¢ã§ãããã³ã«ããã ãã¯ãŒã¯æ©åšã®èšèšãåçŽã«ãã. äŸãã°ãããã¯ãŒã¯æ©åšã¯é«è² è·æã«äœã®å¶åŸ¡ãéç¥ãããã«, ãã±ãããç Žæ£ãã äºãã§ãã. ããããäžçäžãšéä¿¡ããäºãç®æšã«èšèšããããããã³ã«ã ãã, ãã¹ãŠã®ã«ãŒã¿ãå¥åº·ã«åäœããŠãã ãªã©ãšããåæã§ãããã³ã«ãèšèšããäºã¯ã§ããªãã®ã§, ããã¯ãã£ãšããªäºã§ãã. äžæ¹ã§, ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ããéä¿¡ãããã±ãããé»ã£ãŠç Žæ£ããããããããªãããšããåæã§èšè¿°ã㪠ããŠã¯ãããªãã®ã§ã¯, ããã°ã©ã ã¯æãããè€éã«ãªã£ãŠããŸã. ããã§, IP ã®äžã«ä¿¡é Œæ§ã®ããéä¿¡ãæäŸããŠã ãã®ã, TCP (Transfer Control Protocol) ã§ãã. ã€ã³ã¿ãŒãããäžã®ã¢ããªã±ãŒã·ã§ã³âWeb, ã¡ãŒã«, ãã¡ã€ ã«è»¢éãªã©âã¯, å€ãã TCP ãçšããŠãã, ã€ã³ã¿ãŒãããæè¡ã®ã³ã¢äžã®ã³ã¢ãšèšã£ãŠãããããã³ã«ã§ãã. ãã® ããã€ã³ã¿ãŒãããã®äºã代åè©çã«, TCP/IP ãšåŒã¶å Žé¢ãå€ã. ãã ã, ãç¡çãªç©ã¯ç¡çãâäŸãã°éä¿¡çžæèª èº«ãéäžã§ããªããªã£ãŠããŸã£ãã, LAN ãžã®æ¥ç¶ãé·æéåããããšã©ãŒã«ãªãâãšããäºã¯åœç¶ã§ãã. äžæç㪠ã«ãŒã¿ã®é«è² è·ã, çæéã®åæã«å¯Ÿããèæ§ãæäŸããã®ã TCP ã§ãã.
2.4 DNS æåŸã«, å®å ã®æå®ã« IP ã¢ãã¬ã¹ãšããŒãçªå·ãçšãããšè¿°ã¹ãã, IP ã¢ãã¬ã¹ã¯äººéãçšããååãšããŠã¯äžäŸ¿ã§ ãã. ããã§éåžž, ãã¹ãåã¯, IP ã¢ãã¬ã¹ã§ã¯ãªã, DNS åãšããã·ã³ããªãã¯ãª (ã¢ã«ãã¡ããããçšãã) åå ã§æå®ãã. DNS åã®äŸã¯, www.yahoo.co.jp ã www.cnn.com ã®ãããª, web ããŒãžãé²èŠ§ããŠãããšãã«ã, çšã ãŠããç©ã§ãã. DNS åã¯å®éã® IP éä¿¡ã«å ç«ã£ãŠ, IP ã¢ãã¬ã¹ã«å€æãããå¿ èŠããã, ãã®å€æãè¡ãä»çµã¿ã
DNS (Domain Name System) ã§ãã. DNS ã¯æè¡çã«ã¯ DNS åããããã«é¢é£ããæ å ± (IP ã¢ãã¬ã¹ãªã©) ã åŒãåºãããã®å·šå€§ãªããŒã¿ããŒã¹ã§ãã.
DNS ã®å€æåŠçã¯, å€æ°ã®èšç®æ© (DNS ãµãŒã) ã«åæ£ããŠå®çŸãããŠãã. ãããã£ãŠãã®åãåããèªäœã« IP (UDP) ã䜿ãããŠãã. åã ã® PC ã¯, æè¿ãª DNS ãµãŒãã²ãšã€ãæå®ããŠ, ãã¹ãŠã®åãåããããã (Primary DNS ãµãŒã) ãžæãã€ãã. DNS ãµãŒãã¯, DNS ãµãŒãéã§å調ã, èªåã§åŠçã§ããªãåãåãããé©åã«è»¢éã ãŠ, ã©ããªåãåããã«å¯ŸããŠãçµè«ãåºã. ããã§ãããã¹ãã§, ã·ã³ããªãã¯ãªãã¹ãåãçšããéä¿¡ (â äžè¬ãŠãŒ ã¶ãå¿«é©ã«, ãããããã€ã³ã¿ãŒãããã) ãã§ããããã®æ¡ä»¶ãã® 4 ã¯, primary DNS ãµãŒããèšå®ãããŠããäºã§ ãã. ãã , çŽç²ãªæè¡çãªèšè䜿ãã«ããããã°, ããã¯ãIP éä¿¡ãã§ãããããã®èŠä»¶ã§ã¯ãªã.
UNIX äžã§, DNS ãçšã㊠DNS åã IP ã¢ãã¬ã¹ã«å€æããã³ãã³ãã¯ããã€ããã. nslookup, host, dig ãªã©ã ããã, æ¬å®éšã§ã¯ host ã³ãã³ãã䜿ã. Windows ã«ã¯, nslookup ã³ãã³ãããã.
æºåèª²é¡ 5.4 host ã³ãã³ã㧠www.yahoo.co.jp ã, èªåã®ãã䜿ããã¹ã (Web ãµãŒããªã©) ã® IP ã¢ãã¬ã¹ã調 ã¹ã.
$ host www.yahoo.co.jp ãã㧠IP ã¢ãã¬ã¹ãåãã£ãã, http://www.yahoo.co.jp/ ã®ä»£ããã«ãã®ã¢ãã¬ã¹ãçšããŠ, ãã©ãŠã¶ã§ããŒãžã ã¢ã¯ã»ã¹ããŠã¿ã. ãã®ãŸãŸ yahoo ãèŠç¶ããŠã¯ãããªã.
ãŸã, ã·ã³ããªãã¯ãªãã¹ãåã IP ã¢ãã¬ã¹ã«å€æããä»çµã¿ã¯, DNS 以å€ã«ã, èšå®ãã¡ã€ã« (/etc/hosts) ãžçŽæ¥ èšè¿°ãã, NIS, LDAP ãªã©ã®ä»çµã¿ããã, å®éã®éçšã§ã¯ããããçµã¿åãããäºãããã®ã§, å°ã ããããã. ã ã®å®éšã§ã¯, DNS 以å€ã¯ç¡èŠããŠãã.
2.5 ãããŸã§ã®ãŸãšã. ã€ã³ã¿ãŒãããã®èŠä»¶ åã ã®ãã¹ãã«ä»¥äžã®æ å ±ãäžãã (èšå®ãæœã) ãš, ã€ã³ã¿ãŒãããã§éä¿¡ãããããã®èŠçŽ æè¡ã䜿ããããã«ãªã.
IP ã¢ãã¬ã¹: ãµãããã: ã©ã®å®å ã¢ãã¬ã¹ã®ç¯å²ã«, LAN ãçšããŠçŽæ¥ (gateway ãçµç±ããã«) ãã±ãããéä¿¡ããã
default gateway: ãµããããå€ã® IP ã¢ãã¬ã¹ãžåãããã±ãããéãã€ããå®å . ããããå ã®è»¢éãè¡ã£ãŠãã ã (ã¯ã).
DNS ãµãŒã: ã·ã³ããªãã¯ãªãã¹ãå (DNS å) ã IP ã¢ãã¬ã¹ãžå€æããŠããããµãŒã
ããŠ, äžèšã®æ å ±ã¯æåã§èšå®ããäºãã§ããã, ã©ããããããªã©, å€ãã®ããŒãœãã«ãŠãŒã¶åãã®ãã·ã³ã§ã¯ DHCP
(Dynamic Host Conï¬guration Protocol) ãšãããããã³ã«ã§èªåçã«èšå®ããã. ä»æã® PC ã¯, äœãèšå®ãã ãªããã° DHCP ãçšããŠãããã®æ å ±ãèªåèšå®ããããã«ãªã£ãŠãããã, PC ãç©ççã«ãããã¯ãŒã¯ã«æ¥ç¶ãã ã°æ°ã¥ããªããã¡ã«ã€ã³ã¿ãŒããããžã€ãªãã£ãŠããäºãå€ã. ãã®è£ã§ã¯ãããã®æ å ±ãèªåçã«æ³šå ¥ãããŠããã® ã§ãã. ifconï¬g ã§è¡šç€ºãããã®ãããããŠæ³šå ¥ãããæ å ±ã«ä»ãªããªã. ã³ã³ãã¥ãŒã¿ã®äžçã«ã¯ (äžã®äžãã¹ãŠã§?) 倧ããæå³ã®ãªã 3 æåç¥èªãããµããŠããã, è¡š G2.2.1 ã«èŒããç© ã¯ééããªãéèŠãªæŠå¿µã§ãã.
è¡š G2.2.1 ç¥èª
IP UDP TCP DNS DHCP
ã€ã³ã¿ãŒãããé¢ä¿ã®æéèŠ 2/3/4 æåç¥èª
æŠèŠ IP ã¢ãã¬ã¹ãå®å ãšããŠ, äžçäžã®ãããã¯ãŒã¯ã« IP ãã±ãããå±ãã ãã±ããã¯éäžã§ç Žæ£ããããããããªã éä¿¡ã®å®ãŠå ã« IP ã¢ãã¬ã¹ãšããŒãçªå·ãçšãã. äžãã¹ãã§è€æ°ã®éä¿¡ãå¯èœã«ãªã ãã±ããã®å°éæ§ãšå°éé åºãä¿èšŒãã IP ã¢ãã¬ã¹ã®ä»£ããã«ãã¹ãå (www.yahoo.jp ãªã©) ãçšããéä¿¡ ãå¯èœã«ãã. æ£äœã¯, ãã¹ãå âIP ã¢ãã¬ã¹ã®å€æ ãã¹ããã€ã³ã¿ãŒãããã«æ¥ç¶ããããã®æ å ±ãé ä¿¡ãã
å®è£ ã® (äž»ãª) æåš ã«ãŒã¿ ãã¹ã ãã¹ã DNS ãµãŒã
DHCP ãµãŒã
3. nc ã³ãã³ã㧠TCP/IP éä¿¡ãè¡ã åç¯ã§è¿°ã¹ãéã, ã€ã³ã¿ãŒããããçšããã¢ããªã±ãŒã·ã§ã³ã¯, TCP ããã㯠UDP ãšãããããã³ã«ãçšããŠ, ãIP ã¢ãã¬ã¹ãšããŒãçªå·ã®çµããå®å ãšããŠæå®ããªããéä¿¡ãè¡ã. ãã¡ããããã¯æ®æ®µ, ã€ã³ã¿ãŒããããçšããŠããããããã¢ããªã±ãŒã·ã§ã³ã®äžã§èµ·ããŠããäºã§ãã. äŸãã°
Internet Explorer ã Firefox ãªã©ã®ãŠã§ããã©ãŠã¶, Windows ã¡ãŒã«ãé»ä¿¡å «å·ãªã©ã®ã¡ãŒã«ãœãããªã©, ãããã㜠ãããå éšã§ TCP ã UDP ãçšããéä¿¡ãè¡ã£ãŠãã. æ¬å®éšã§äœãã¢ããªã±ãŒã·ã§ã³ãäŸå€ã§ã¯ãªã. ãã®ããã«
UNIX ã§ã Windows ã§ã, ããœã±ããããšåŒã°ããããã»ã¹ééä¿¡ã®ããã®ã€ã³ã¿ãã§ãŒã¹ (Application Programming Interface; API) ãçšãããã. ãã®èª¬æã¯æ¬¡åã«åãäºãšã, ä»å㯠TCP ã UDP ãçšããéä¿¡ãè¡ãããªããã£ã ãªã³ãã³ããéããŠ, ãã®æŠå¿µãå®æããäºãç®æã. ãã¡ãããããã®ã³ãã³ãããœã±ããã€ã³ã¿ãã§ãŒã¹ãçšããŠé ä¿¡ãè¡ã£ãŠãã.
netcat ãšããããã°ã©ã (nc ã³ãã³ã) ã¯, (1) ã©ããã® IP ã¢ãã¬ã¹ + ããŒããšã®æ¥ç¶ã確ç«ãã (2) ãã®æ¥ç¶çžæããåãåã£ãããŒã¿ãæšæºåºåã«åãæµã (3) æšæºå ¥åããåãåã£ãããŒã¿ããã®æ¥ç¶çžæã«åãæµã ãšããæ©èœã ããæã€åçŽãªããã°ã©ã ã§ãã. ãæ¥ç¶ã確ç«ããããšããã®ã¯, 話ãçžæã決ããŠ, ãã®äººãå®éã«ã ãäºã確èªãã, ãšããäºã§, é»è©±ããããŠåŒã³åºãé³ã鳎ããŸã§ã®ããã»ã¹ãšæãã°è¯ã. é»è©±ã§è©±ãããã«ã¯, ãã© ã¡ãããé»è©±ããããŠ, ã©ã¡ãããåãåãããšãã颚ã«ãªã£ãŠããªããšãããªã. ãœã±ããéä¿¡ã®å Žåãåæ§ã§, é»è©± ããããåŽãã¯ã©ã€ã¢ã³ã, åãåãæ¹ãããµãŒãããšèšãæ £ç¿ã«ãªã£ãŠãã. ãµãŒã: æ¥ç¶ã確ç«ããçžæãæå®ããã«, ã誰ãããæ¥ç¶ãããŠããã®ãåŸ ã€. ããŒãçªå·ãèªãæå®ããäºãã§ãã ã, ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«å²ãåœãŠãŠãããäºãã§ããã, ã©ã¡ãã«ããŠãäžã€ã®ããŒãäžã§, ãæ¥ç¶åŸ ã¡ã ç¶æ ã«ãªã. ã¯ã©ã€ã¢ã³ã: ãµãŒããæ¥ç¶åŸ ã¡ãããŠãã IP ã¢ãã¬ã¹ãšããŒãçªå·ãæå®ããŠ, æ¥ç¶ããã. ãã®äž¡è ãæããš, äž¡ è ã®éã§å®éã®ããŒã¿ã®éä¿¡ãå§ããäºãã§ãã.
nc ã³ãã³ãããµãŒããšããŠçšããã«ã¯, -l ãªãã·ã§ã³ãæå®ã, ãåŸ ã¡åããã«å ¥ãããŒãçªå·ãæå®ãã. ããŒãçª å·ã¯, 0ã65,535 ã®ã©ãããæå®ããã, 1,023 以äžã¯ç®¡çè æš©éããªããšçšããäºãã§ããªãäž, äžè¬ã«äžã®æ¹ã®çªå·ã¯ äºçŽãããŠããã, æ¢åã®ã¢ããªã±ãŒã·ã§ã³ãçšããŠããå¯èœæ§ãæããã, ããã§ã¯çšããªã. ãããã£ãŠ, 倧ããæ°
(äŸãã° 10,000 以äž) ãæå®ããç©ãšèŠããŠãã. ãªã, nc ã³ãã³ãã¯, ç¹ã«æå®ããªããã° (UDP ã§ã¯ãªã)TCP ãçš ããŠéä¿¡ãã. äŸ:
$ nc -l 50000 nc ã³ãã³ããã¯ã©ã€ã¢ã³ããšããŠçšããã«ã¯, æ¥ç¶ããããµãŒãã® IP ã¢ãã¬ã¹ãšããŒãçªå·ãæå®ãã. äŸ: $ nc hIP ã¢ãã¬ã¹ i 50000 ãã¡ãã IP ã¢ãã¬ã¹ã®éšåã«ã¯, ifconï¬g ã³ãã³ãã§èª¿ã¹ã, ãµãŒãããã»ã¹ãèµ°ã£ãŠãããã¹ãã® IP ã¢ãã¬ã¹ãçšã
ã. ããã¯èªåã®ãã·ã³ã®ç©ã§ã, åéã®ãã·ã³ã®ç©ã§ã, (IP ã¢ãã¬ã¹ããåãã£ãŠããã°) æµ·ã®åããã®ãã·ã³ã®ç© ã§ãè¯ã. ãŸã, ãããã°ã®éã¯åäžã®ãã·ã³å ã§äž¡æ¹ã®ããã»ã¹ãç«ã¡äžããã®ã䟿å©ã§ãã. ãã®ãããªå Žå, 127.0.0.1 ãšã ãã¢ãã¬ã¹ã¯ãèªåããæå³ããç©ãšããŠåžžã«äœ¿ããã®ã§äŸ¿å©ã§ãã. ãããäºã€ã®ããã»ã¹ (A, B ãšãã) ãæã£ãŠèµ·åãããš, A ã®æšæºå ¥åãžå ¥åããããŒã¿ã¯ B ãžéãã, ããã B ã®æšæºåºåãžåºåããã. ãã®é (B ã®æšæºå ¥å â A ã®æšæºåºå) ãåæ§ã§ãã.
æºåèª²é¡ 5.5 nc ã³ãã³ããçšã㊠2 ã€ã®ãã·ã³ã®éãæ¥ç¶ã, ç°¡åãªæååãéããã£ãŠã¿ã.
æºåèª²é¡ 5.6 ãããšééããããŒãçªå· (ãµãŒããæ¥ç¶åŸ ã¡ã§ãªããããªããŒãçªå·) ãžæ¥ç¶ã, ãã®éã®æåãèŠãŠ ããããš.
æºåèª²é¡ 5.7 åãããŒãçªå·ã§äºã€ã®ãµãŒããç«ã¡äžãããã©ããªãã? ãããåŸã®ããã«äžåºŠã¯èŠãŠããããš.
æºåèª²é¡ 5.8 man ã³ãã³ã㧠nc ã®äœ¿ãæ¹ã調㹠(man nc) ã. ãµãŒããã¯ã©ã€ã¢ã³ãã, æ¥ç¶ã«æåããéã«ã¡ã ã»ãŒãžã衚瀺ããŠãããããã«ããããã®ãªãã·ã§ã³ãæã. ããã調ã¹ãŠäœ¿ã£ãŠã¿ã. ãŸã, æ¢å®ã§ã¯ TCP ãçšã ãã, UDP ãçšããããã®ãªãã·ã§ã³ã調ã¹ãŠèŠã.
nc ã³ãã³ãã®åºæ¬ã¯, æšæºå ¥å â ãããã¯ãŒã¯, ãããã¯ãŒã¯ â æšæºåºå, ãšããããŒã¿ã®è»¢éãè¡ãäºã§ãã£ãã ã, åœç¶, æšæºå ¥åºåã®ãªãã€ã¬ã¯ããäžæã«çšããã°, ãã¡ã€ã«ã®å 容ãéåä¿¡ããäºãå¯èœã§ãã.
æ¬èª²é¡ 5.9 nc ã³ãã³ããçšããŠ, é©åœãªãã¡ã€ã«ã®å 容ãå¥ã®ãã·ã³ãžã³ããŒããŠã¿ã. UDP ã§ã転éããŠã¿ã.
転éããããã¡ã€ã«ããšããŠ, /dev/dsp ãçšããã°, äžæ¹ã®ãã·ã³ã«å ¥åããé³ãããäžæ¹ã®ãã·ã³ãžè»¢éããäºã ã§ãã. 転éããåŽã§ããããªãã€ã¬ã¯ãããŠ/dev/dsp ã«æžãã°, çæ¹ã®ãã·ã³ã«å¹ã蟌ãã é³ããã®å Žã§å¥ã®ãã·ã³ äžã§åçã§ããŠããŸã.
æ¬èª²é¡ 5.10 nc ã³ãã³ããçšããŠ, çæ¹ã®ãã·ã³ã«å ¥åããé³å£°ãå¥ã®ãã·ã³ãžè»¢éã, ãã®ãã·ã³ã§ãã®é³ãåºå ããŠã¿ã. å®å®ããŠéããã? TCP, UDP ããããçšããŠéãããããã©ãã芳å¯ããŠã¿ã.
ããã§ãäžæ¹éè¡ãã®é³å£°è»¢éãåºããŠããŸã£ã. åŸã¯ãããéæ¹åã«ãè¡ãã°, äŒè©±ãã§ãã. ããã§ã€ã³ã¿ãŒãã ãé»è©±ã®æäœéäžã®æäœéã®æ©èœã¯ã§ããŠããŸã£ã. ãã¡ãããã㯠nc ã³ãã³ãã®æ©èœã䜿ã£ãŠããããã§, æã ã¯ã ãã° nc ã³ãã³ãã®äžèº«ãç解ã㊠(C ããã°ã©ã ãšããŠ) äœãã®ãç®æšã§ããã, ãããã¯ãªã¢ããŠãªãäœåãããã°, å¹ççãªè»¢éæ¹æ³, ãããã笊å·å, å€è éé話ãªã©ã®é«åºŠãªèª²é¡ãžé²ãã§ããäºãã§ãã. ããã㯠nc ãããããå ãã ãã§ã¯ã§ããªã.
4. nc ã§ã¢ããªã±ãŒã·ã§ã³ãããã³ã«ãç解ãã nc ã¯ãããã¯ãŒã¯ãšæšæºå ¥åºåãçŽæ¥çµã¶ã¢ããªã±ãŒã·ã§ã³ã§, 䜿ãæ¹ã工倫ãããš, ã¢ããªã±ãŒã·ã§ã³ããããã¯ãŒ ã¯ã«ã©ã®ãããªããŒã¿ãæµããŠããã®ãã調ã¹ãäºãã§ãã. ããã«ãã, æ®æ®µäœ¿ã£ãŠããã€ã³ã¿ãŒããããçšããã¢ã ãªã±ãŒã·ã§ã³ã, æå€ãšç°¡åãªä»çµã¿ (ãããã³ã«) ã§ã§ããŠãããšããäºãç¥ãã ãã. ããã§ã¯è©Šãã«, ãŠã§ããã©ãŠ ã¶ãšãŠã§ããµãŒãã®éã§æµããŠããããŒã¿ã調ã¹ãŠã¿ã. äŸãã°ãŠã§ããã©ãŠã¶ãç«ã¡äžããŠ, é©åœãªãŠã§ãããŒãžãé²èŠ§ããŠãããšãã. åãŠã§ãããŒãžã«ã¯ URL (Uniform
Resource Locator) ãšããåå (äŸ: http://www.ee.t.u-tokyo.ac.jp/j/banner/life.html) ãã€ããŠãã, çŸåšè¡šç€ºãã ãŠããããŒãžã® URL ã¯ãŠã§ããã©ãŠã¶äžéšã®ã¢ãã¬ã¹ããŒã«è¡šç€ºããã.
URL ã¯ãããã³ã«, ãã¹ãå (+ ããŒãçªå·), ãã¹å (+ ãã®ä»ã®éšå) ãããªã£ãŠãã, äžèšã®äŸã§ã¯, ⢠ãããã³ã« = http ⢠ãã¹ãå (+ ããŒãçªå·) = www.ee.t.u-tokyo.ac.jp (ããŒãçªå·ã¯çç¥ãããŠãã, ãã®å Žå 80 ãšãªã) ⢠ãã¹å (+ãã®ä») = /j/banner/life.html ã§ãã. ãŠã§ããã©ãŠã¶ããã® URL ãåãåã£ããšãã«è¡ãåäœã¯,
(1) www.ee.t.u-tokyo.ac.jp ãšãããã¹ãäžã® 80 çªãšããããŒãäžã§, ãµãŒãããã»ã¹ãåŸ ã¡åãç¶æ ã«ããäºãä»® å®ã, ãããžæ¥ç¶ãã. ãã¡ããããã«å ç«ã£ãŠ, DNS ãçšã㊠IP ã¢ãã¬ã¹ãæ±ãã.
(2) æ¥ç¶ããã, ã/j/banner/life.html ãšããããŒãžããããããšãããªã¯ãšã¹ããéä¿¡ãã. (3) éä¿¡ããã, ãµãŒãããè¿äºãåãåã, ããã衚瀺ãã. ç¡äºããŒãžã®å 容ãååŸã§ããå Žåãããã°, ãã㪠ããŒãžã¯ãªã, ãªã©ã®ãšã©ãŒãè¿ãããäºããã. ã¹ããã 2 ã§, æ£ç¢ºã«ã©ã®ãããªæååãéãã°è¯ãã®ã, ã¹ããã 3 ã§, æ£ç¢ºã«ã©ã®ãããªæååãè¿ãããã®ãã¯,
HTTP (Hyper Text Transfer Protocol) ãšãããããã³ã«ã§èŠå®ãããŠããã®ã ã, ããã§ã¯ãã®å 容ãã®ç©ããã, ãã®ã調ã¹æ¹ããäž»é¡ã§ãã. ã¹ããã 1: ãŸã, nc ã³ãã³ããçšããŠ, åãåããé©åœãªããŒãã§åŸ ã¡åãã«ã¯ããã ãã®, web ãµãŒããã§ã£ã¡äž ãã.
$ nc -l 50000 ã¹ããã 2: ãŠã§ããã©ãŠã¶ (äŸãã° Firefox) ãç«ã¡äžã, ãã®ãµãŒããã, /j/banner/life.html ãšããããŒãžãååŸã ããã, ãªã¯ãšã¹ããã. äŸãã°äžèšã§ç«ã¡äžãããµãŒãã® IP ã¢ãã¬ã¹ã 192.168.1.100 ã ã£ããšãããš, 以äžã ã¢ãã¬ã¹ããŒã«å ¥åãã.
http://192.168.1.100:50000/j/banner/life.html åœåã® URL ã®ãã¹ãåéšå (www.ee.t.u-tokyo.ac.jp) ã, 192.168.1.100:50000 ã«çœ®ãæããç©ã«ãªã£ãŠããäº ããã³, :50000 ã§, ããŒãçªå·ãæå®ãããŠããäºã«æ³šæ. ãããçç¥ãããš, ãããã³ã«ããšã«å®ãŸã£ãæ¢å®ã® ããŒãçªå· (http ã®å Žå 80 çª) ãçšãããã. ãããš, ãã©ãŠã¶ãäžèšã§ç«ã¡äžãããµãŒãã«æ¥ç¶ã, ãªã¯ãšã¹ããéã. ãã®ãªã¯ãšã¹ãã¯åœç¶ãªãã, nc ãªã ã¡ãã£ãŠãµãŒãããã»ã¹ã®æšæºåºåãšããŠ, 芳å¯ããäºãã§ãã. 詳现ã¯ãã©ãŠã¶ã«ãã£ãŠãç°ãªãã, 以äžã®ã ããªæãã®æååã衚瀺ãããäºã ãã.
$ nc -l 50000 GET /j/banner/life.html HTTP/1.1 Host: 191.168.1.100:50000 User-Agent: Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.9.0.6) \ Gecko/2009020911 Ubuntu/8.04 (hardy) Firefox/3.0.6 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deï¬ate
Accept-Charset: Shift JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive
ããã§ã¯è©³çŽ°ã¯éèŠã§ãªãã, æåã®è¡ã§, 欲ããããŒãžã®ååã, GET ãšããã³ãã³ããšãšãã«æå®ãããŠãã äºã«æ³šæããŠæ¬²ãã. ã¹ããã 3: ããã§æ¬æ¥ã®ãµãŒãã§ããã°ããã«è¿äºãè¿ãã, ãã®åœãµãŒãã¯äœãããªãã®ã§, ãã©ãŠã¶ã¯è¿äºåŸ ã¡ç¶ æ ã«ãªã. ãµãŒãããã»ã¹ã匷å¶çµäºãã, ã§ããããªæååãè¿ã, ãã°ããæŸçœ®ãã, ãªã©é©åœãªäºããã£ãŠ, ãã©ãŠã¶ãã©ã®ããã«åå¿ããããèŠãŠã¿ã. ã¹ããã 4: ã§ã¯, ãŸãšããªãŠã§ããµãŒãã¯ã©ã®ãããªè¿äºãè¿ãã®ããèŠãŠã¿ãã. ãã®ããä»åºŠã¯ nc ã«ã¯ã©ã€ã¢ã³ ã (ãã©ãŠã¶) ã®åœ¹ããããã. ãŸãäžèšã®å®éšãããäžåºŠè¡ã£ãŠ, ä»åºŠã¯ã¯ã©ã€ã¢ã³ãããã®æååããªãã€ã¬ã¯ ãããŠ, é©åœãªãã¡ã€ã«å (äŸ: request) ã§ä¿åããŠãã.
$ nc -l 50000 > request request ã«ã¯, äžã§èŠããããªæååãä¿åãããã¯ãã§ãã (確èªãã). ãããŠä»åºŠã¯æ¬ç©ã®ãŠã§ããµãŒãã«å ããŠ, nc ã³ãã³ããçšããŠæ¥ç¶ã, ãã®ãã¡ã€ã«ã®å 容ãéãã€ã, çµæããŸãå¥ã®ãã¡ã€ã«åã«ãªãã€ã¬ã¯ãã ãŠä¿åãã. ãã¡ããå®å ããŒãçªå·ãæ¬æ¥ã®ç© (80) ãçšãã.
$ nc -q -1 www.ee.t.u-tokyo.ac.jp 80 < request > response -q -1 ã¯, ãçµäºãããªããšããæå³ã®ãªãã·ã§ã³ã§, ãããã€ããªããš nc ã³ãã³ãã request ãèªã¿ãã£ããšã ãã§å³åº§ã«çµäºããŠããŸã (çµæ, äœã衚瀺ãããªã). æ°ç§ãåŸ ãŠã° response ã¯åŸãããŠããã¯ããªã®ã§ Ctrl-C ã§çµäºãã. ã¹ããã 5: response ãéããŠã¿ãã°, ãµãŒãããã©ã®ãããªæååãè¿ãããã®ããåãã. å®ã¯ãã®ãŸãŸã§ã¯, ã㌠ãžããªã (Not Found) ãšããçµæãè¿ãããŠããã¯ãã§ãã. ãã®çç±ã¯, request ã® 2 è¡ç®
Host: 192.168.1.100:50000 ã«ãã. ããã¯, request ãéãå®å ã®ãã¹ãåãæžãããŠããã®ã ã, ãããåãåã£ããµãŒãã®äºè§£ (ãèªåã¯
www.ee.t.u-tokyo.ac.jp ãšããååã® Web ãµãŒãã§ããã) ãšé£ãéãããã«çãã. ãã®è¡ãæåã§, Host: www.ee.t.u-tokyo.ac.jp ãšä¿®æ£ããäžã§åãå®éšãè¡ãã°, ãªããšãªãèŠèŠãã®ãã (?) æååãè¿ã£ãŠããã¯ãã§ãã. æååã«ã¯ãããã³ã«ã®ããããš, ããŒãžã®æ¬äœãããããŠããã®ã ã, æåã®ç©ºè¡ãŸã§ããããã§ãã. ãããæšãŠãŠ,
$ ï¬refox response ãšã§ãããŠã¿ãã°, èŠèŠãã®ããããŒãžãåºãŠããäºã ãã.
5. iperf ã§ãããã¯ãŒã¯ã®ãã³ãå¹ ã枬å®ãã iperf ã³ãã³ãã¯, nc ã³ãã³ããšäœ¿ãæ¹ã䌌ãŠãã. ãã ãç®çã¯ãããã¯ãŒã¯ã®æ§èœ (ãã³ãå¹ ) ã®æž¬å®ã§ãã, ãµãŒ ããç«ã¡äžã, ã¯ã©ã€ã¢ã³ããç«ã¡äžãããšåæã« 10 ç§ã»ã©ããŒã¿ãæµããŠ, ãããã¯ãŒã¯ã®ãã³ãå¹ (転éé床) ãè¡š 瀺ããŠããã.
æ¬èª²é¡ 5.11 iperf ã³ãã³ããçšããŠ, åéã®ãã·ã³ã®éã§ãã³ãå¹ ã枬å®ãã. ããããã®äºº (ãŸãã¯ããããã®ã
ãã»ã¹é) ã§åæã«æž¬å®ãããšã©ããªãã. ãã®ç¶æ³ã§, nc ã§é³å£°ãæµããŠã¿ããšã©ããªãã?
第6æ¥ 1. æŠ
ãœã±ããããã°ã©ãã³ã° (ã¯ã©ã€ã¢ã³ã)
èŠ
ãããããããã¯ãŒã¯ãçšããéä¿¡ãèªåã§è¡ãããã°ã©ã ã®äœæã«å ¥ã. ããã«ã¯ UNIX ã§ã Windows ã§ã, æš æºçã«æäŸãããŠããããœã±ããããšããããã°ã©ãã³ã°ã€ã³ã¿ãã§ãŒã¹ (API) ãçšãã. ä»åã¯ãœã±ããã®ã¯ã©ã€ã¢ã³ããäœãããã® API ã«ã€ããŠèª¬æãã. ååãã£ãããã«, ãœã±ããã®ã¯ã©ã€ã¢ã³ãã¯, ããããŒãäžã§ãåŸ ã¡åããç¶æ ã«ãªã£ãŠãããµãŒãããããšããåæã§, ãã® IP ã¢ãã¬ã¹ãšããŒãã«åãã£ãŠæ¥ç¶ã ã (é»è©±ãããã). æ¥ç¶åŸã¯ããŒã¿ã®éåä¿¡ (äŒè©±) ãã§ãã, ãšããç©ã§ãã. åè¿°ãããšãã IP ã®äžã«æ§ç¯ããããããã³ã«ã« UDP ãš TCP ããã, åŸè ãä¿¡é Œæ§ (å°éä¿èšŒ) ãæäŸãã. ãšã ãããæåã¯ãã¡ãã䜿ããããã ãããšããããšã§, 以äžã®èª¬æã§ã¯ TCP ãçšãããšä»®å®ããŠå ·äœçãªèª¬æããã.
TCP ã䜿ã£ãŠå®éã«éä¿¡ããããã®æé ã¯ä»¥äžã®éã. æ¬åŒ§å ãå®éã«åŒã³åºãé¢æ°åã§ãã. ã¹ããã 1: ãœã±ãããäœã (socket) ã¹ããã 2: æ¥ç¶ãã (connect) ã¹ããã 3: ããŒã¿ã®éä¿¡ (send ãŸã㯠write), åä¿¡ (recv ãŸã㯠read) ãè¡ã ã¹ããã 4: éä¿¡çµäºåŸ, ãœã±ãããéãã (close) ãã¡ã€ã«å ¥åºåãšã®é¡æšã§èšãã°, socket 㯠open ãšäŒŒãŠãã. send, recv ã¯ãããã write, read ãšäŒŒãŠãã. å®é,
send ã®ä»£ããã« write, recv ã®ä»£ããã« read ãçšããäºãã§ãã. close ããã¡ã€ã«ãéãããšããšå®éã«åã API ã çšãã. ã€ãŸã UNIX ã«ãããŠã¯ãœã±ããã¯ãã¡ã€ã«ãã£ã¹ã¯ãªãã¿ã®äžçš®ãªã®ã§ãã. äœåãªã¹ããã㯠connect ãš ããäºã«ãªãã, ããã¯å¥ã®ããã»ã¹ã«æ¥ç¶ãããšãã, ãã¡ã€ã«å ¥åºåã§ã¯å¿ èŠãªãã£ãç©ã ãã, äœåãªã¹ãããã« ãªãã®ãããªã¥ãã. ãããŠããå°ãå®éã®ããã°ã©ã 颚ã«æžãã°ä»¥äžã®ãããªæé ã«ãªã.
unsigned char data[N]; int s = socketâ (); connectâ (s, â192.168.1.100â, 50000); read(s, data, N);
# data ã« N ãã€ããŸã§ã®ããŒã¿ãåãåã
data[0] = . . .; data[1] = . . .; . . .; write(s, data, N);
# data ãã N ãã€ããŸã§ã®ããŒã¿ãéã
close(s); ãã¡ãã write, read ã¯ç¹°ãè¿ãçšããŠã, ã©ã®ãããªé çªã§çšããŠãè¯ã. ãªã, UDP ãçšããå Žå, 倧éæã«èšãã°äžèšã® connect ãšããã¹ããããçç¥ãã, send/recv ã®ãã³ã«
sendto/recvfrom ãšãã API é¢æ°ãçšãã. sendto/recvfrom 㯠send/recv ã«å ããŠå®å ã® IP ã¢ãã¬ã¹, ããŒã ãæå®ããåŒæ°ãæ〠(ã€ãŸã, TCP ã§ã¯éä¿¡çžæãåãã£ãŠäžã€ã«éå®ããŠããã®ã«å¯Ÿã, UDP ã§ã¯éã床ã«èªç±ã« å®å ãå€ããããšãã§ãããšããããšã§ãã). æ®å¿µãªããå®éã®ãœã±ãã API ã¯åŒæ°ãªã©ãããå°ãå€ãäžã«, ååãããããã (äžã§é¢æ°åã« â ãã€ããŠããã® ã¯, å®éã® API ãšã¯åŒæ°ãªã©ãç°ãªããšããäºãæ瀺ãããã). ãããŸã§ããããã® API ã«æž¡ããŠããç©ã¯, äžã®ãã ãªæ å ±ã ãšããäºãèŠå€±ããªãããã«, è¡šé¢äžã®ãããããã¯ããçšåºŠåãå ¥ããŠããããããªãã®ã ã, ãªããããªäº ã«ãªã£ãŠããã®ããšããäºæ 説æãå°ãããŠãã. ããœã±ãããã¯ããã»ã¹éã§éä¿¡ãè¡ãããã®æ±çšçãªã€ã³ã¿ãã§ãŒ ã¹ãšããŠèšèšãããŠãã. IP éä¿¡ã ãã察象ãšããŠããã®ã§ã¯ãªã. äŸãã°åäžãã¹ãå ã®è€æ°ããã»ã¹éã§éä¿¡ãè¡
ãããã®, UNIX ãã¡ã€ã³ãœã±ãããšããç©ããã. IP éä¿¡ã«ããŠã IPv4 ãš IPv6 ããã. ãœã±ãã API ã¯, ããã ãã¹ãŠãã»ãŒåäžã®ã€ã³ã¿ãã§ãŒã¹ã§äœ¿ããããã«èšèšãããŠãã.
⢠ãã®ããäžã , ãœã±ãã API ã®åŒæ°ã«ãç§ã¯ã©ã®äœç³» (IPv4, IPv6, UNIX ãã¡ã€ã³ etc.) ã§éä¿¡ããããã§ãã ãšããäºãæ瀺çã«æå®ããå¿ èŠããã â äœåãªåŒæ°ãå¢ãã.
⢠TCP, UDP ãšãããããª, IP ã«ã®ã¿éçšããåºæåè©ã API ã®è¡šé¢ã«ãããããŸã«çŸããäºã¯ãªã. ã ãã, TCP ã䜿ã£ãŠéä¿¡ããæã«, socket(TCP) ãšã§ãæžããã°ãŸã ããç©ã, socket(. . . , SOCK STREAM) ãªã©ãš ãã, éæ¥çãªç©ã®èšãæ¹ã«ãªã. â åŒæ°ã®æå³ãåããã«ãã.
⢠éä¿¡æ段ãç°ãªãã°ã¢ãã¬ã¹ã®è¡šçŸãéãã®ã§, ãœã±ããã® API ã«ã¯, IP ã¢ãã¬ã¹ãè¡šããããªãããããŸãªåŒæ° ã¯çŽæ¥çŸããªã. äŸãã° IP éä¿¡ã§ã¯, éä¿¡ã®å®å ã¯, IP ã¢ãã¬ã¹ãšããŒãã§æå®ããã, UNIX ãã¡ã€ã³éä¿¡ã§ã¯, ãã¡ã€ã«ã®ãã¹å (â/tmp/fooâ ãªã©ã®åå) ã§æå®ãã. ã ãã connect ã®åŒæ°ã, connect(â192.168.1.100â,
50000) ãšããããã«ã¯è¡ããªã. ããã§ãã¹ãŠã®éä¿¡æ段ã®ã¢ãã¬ã¹ãå å«ãããããªããŒã¿å (sockaddr) ã, API ã®è¡šé¢ã«ã¯çŸã, ããã«ç¡çãã, IP ã¢ãã¬ã¹ãæž¡ããããªä»çµã¿ãçšãããã. â åŒæ°ã®æž¡ãæ¹ãåãã ã«ãã, C èšèªã«ç¿çããŠããªã人ã«ã¯é£è§£ã«æãããã.
⢠åãçç±ã§, man ããŒãžã§ socket ã® API ãèŠãŠã, IP éä¿¡ããããšãã®åºæã®ããæ¹ãŸã§ã¯æžããŠããªã. äŸ ãã° man connect ãèŠãŠã, IP ã¢ãã¬ã¹ 192.168.1.100 ã®ããŒã 50000 ã«ã€ãªãæ¹æ³ãæžããŠããªã. 以äžã®å¿ã®æºåãå ã«, å®éã® API ã解説ãã.
2. API 説 æ 2.1 #include ãã¡ã€ã« IP éä¿¡ãããã«ããã£ãŠå¿ èŠãªããããã¡ã€ã«ããã. æªãããšã«ãããã¯ä»¥äžã§èª¬æãã API é¢æ°ã®ããã¥ã¢ã« ããŒãžã«ã¯åºãŠããªã. çç±ã¯äžèšã§è¿°ã¹ããšããã§, ãœã±ããã¯ãããŸã§ãæ±çšçãªãããã»ã¹ééä¿¡ã§ãããã, åã ã®éä¿¡ãããã³ã«ã«äŸåããæ å ±ã¯èŒãåããªããã (å®éæ¬åœã«èŒããããªããã©ããã¯æªãã. ããã¥ã¡ã³ãã®ä¿å® æ§ãšããçš®ã®çŸçæèŠã«ããèŒããŠããªã, ãšããã®ãæ¬åœã®ãšããã) ã§ãã. çµè«ãèšããš, 以äžã® API ã® man ããŒãžã«æå®ãããŠããããããã¡ã€ã«ã«å ã, IP ã§ã¯ä»¥äžã#include ããŠãã ã°ããã ãã.
#include <netinet/in.h> #include <netinet/ip.h> #include <netinet/tcp.h> ãªããããã®æ å ±æºã¯,
$ man 7 ip $ man 7 tcp $ man 7 udp ã§ãã. ãã®ä»é©å®, TCP/IP ããã°ã©ãã³ã°ã«é¢ããæžç±ãåç §ãããšãã.
2.2 socket ãœã±ãããäœã.
int s = socket(PF INET, SOCK STREAM, 0); ãã¡ã€ã«ã® open ã«çžåœããç©ã ãšæãã°ãã. è¿ãå€ã¯ãã¡ã€ã«ãã£ã¹ã¯ãªãã¿ã§ãã (ãã€ããããã§ã, man socket ã§, æåã®ç¢ºèªæ¹æ³ãš#include ãã¹ãããããã¡ã€ã«ã調ã¹ã, ãšèšã£ãŠãã). 以éã§äœ¿ãé¢æ°ã«, ããã§è¿ãããå€ ãæž¡ã. ããã open ãš, read/write/close ãšã®é¢ä¿ã«äŒŒãŠãã. åŒæ°ã®,
⢠PF INET ã¯, IPv4 ãšããéä¿¡äœç³» (ãã¡ã€ã³) ãçšããäºãæå®ããŠããã¡ãªã¿ã« IPv6 㯠PF INET6, UNIX ãã¡ã€ã³ã¯, PF UNIX.
⢠SOCK STREAM ã¯, TCP ãçšããéä¿¡ãæå®ããŠãã. ã¡ãªã¿ã« UDP ã¯, SOCK DGRAM. ã€ã¡ãŒãžãšããŠã¯, éä¿¡çžæãšã®éã«æ¥ç¶ã確ç«ããã®ã¯, äž¡è ã®éã«ç³žé»è©±ãåŒã£åŒµã£ãŠçµã¶ãããªç©ã ã, ãœã±ãã ã¯ãã®ç«¯ã£ã, ã€ãŸã糞é»è©±ã®çŽã³ããéšåã§ãã.
2.3 connect æå®ãã IP ã¢ãã¬ã¹ãšããŒãçªå·ã«æ¥ç¶ãã.
connect ãåŒã³åºãããã«, IP ã¢ãã¬ã¹ãšããŒãçªå·ãã©ãã«ãããŠæž¡ãå¿ èŠããã. connect(s, â192.168.1.100â, 50000) ãšã§ãæžããã°ç°¡åãªã®ã ã, åè¿°ããéã, IP 以å€ã®äºãèã㊠API ãèšèšãããŠãããã, æž¡ãæ¹ãåãã ã©ã. 以äžã¯, IP ã¢ãã¬ã¹ 192.168.1.100 ã®ããŒã 50000 ã«æ¥ç¶ããããã®åºæ¬ãã©ãŒã ã§ãã.
struct sockaddr in addr; addr.sin family = AF INET;
# ãã㯠IPv4 ã®ã¢ãã¬ã¹ã§ã
addr.sin addr.s addr = inet addr(â192.168.1.100â); addr.sin port = htons(50000);
# IP ã¢ãã¬ã¹ã¯. . . ã§ã # ããŒãã¯. . . ã§ã
int ret = connect(s, (struct sockaddr *)&addr, sizeof(addr));
# éã« connect
ãã£ãŠããäºã¯, æçµçã« connect ã« addr ãšããæ§é äœã®ã¢ãã¬ã¹ (&addr) ã, ãã®ãµã€ãº (sizeof(addr)) ãšãšãã«æž¡ ããŠãã. addr ã®ããŒã¿åã¯, sockaddr in ãšããç©ã§, ãã㯠IPv4 ã¢ãã¬ã¹ãè¡šããŠãã. ããã«å ç«ã€ 3 è¡ã§, ã ã®æ§é äœã®èŠçŽ ãåããŠãã.
⢠sin family ãšããèŠçŽ ã«ã¯, ãã®ã¢ãã¬ã¹ãã©ã®ãããªéä¿¡äœç³»ã®ã¢ãã¬ã¹ã§ããããæ ŒçŽãã. addr.sin family = AF INET; ã¯ããã, IPv4 ã®ã¢ãã¬ã¹ã§ããäºã瀺ããŠãã. ããã¯, connect ãåãåã£ãåŒæ°ãèŠãŠ, 確 ãã«ãã®äººã¯ IP éä¿¡ã®ããã®ã¢ãã¬ã¹ãæž¡ããŠããŠãã, ãšããäºãç解ããã®ã«çšãããã.
⢠sin addr.s addr ãšããèŠçŽ ã«å®å IP ã¢ãã¬ã¹ãæ ŒçŽãã. ãã®ããã«, â192.168.1.100â ã®ãããª, æååã«ã ã IP ã¢ãã¬ã¹ã®è¡šèšã, 32 bit ã®åœ¢åŒã«å€æããé¢æ° inet addr ãåŒãã§ãã.
⢠sin port ãšããèŠçŽ ã«ã¯, ããŒãçªå·ãæ ŒçŽãã. addr.sin port = 50000 ãšãã®ãŸãŸä»£å ¥ããã°è¯ããããªç©ã ã, 现ããäºæ ã§ããã¯è¡ãã, htons ãšããé¢æ°ãåŒãã§, å€æããŠããå¿ èŠããã. äºæ ã¯åŸã«èª¬æãã. ãã€ããèšããäžã®ã³ãŒãã䜿ãå Žåã«, connect ãæåããäºã確èªããªãã§å ãžé²ãäºã¯ããããããªãããã«. é åžžã«ééãããããããšããã§ãã. ãŸãäžèšã䜿ãã«ã¯è²ã #include ãå¿ èŠãªã®ã§ããããå¿ããªã. 泚: inet addr vs. inet aton
ããã¥ã¢ã«ã«ãããš inet addr ã¯äœ¿ããã«, inet aton ãã€ãããšãã. ã ãã,
addr.sin addr.s addr = inet addr(â192.168.1.100â); ã¯,
inet aton(â192.168.1.100â, &addr.sin addr); ãšæžãäºãæšå¥šãããŠãã. çç±ã¯ inet addr ã«ã¯ãšã©ãŒãæ€æ»ããæ¹æ³ããªããã. inet aton ã¯è¿ãå€ã§ãããåºå¥ ã§ã, IP ã¢ãã¬ã¹ãšããŠäžæ£ãªæååãæž¡ããš, 0 ãè¿ã. ããã§ã¯èª¬æã®ãã, èŠãç®ã®ãããããã inet addr ã䜿㣠ãŠèª¬æãã. ãããããšã©ãŒæ€æ»ãããŠãããšãã£ãŠããã®ã§, ãã¡ããæ¬åœã¯ inet aton ãæšå¥šã§ãã.
2.4 send/recv (ãŸã㯠write/read) ç¡äºæ¥ç¶ãæåãããããŒã¿ã®éåä¿¡ãã§ãã. send â write, recv â read ãšæã£ãŠãã, å®éåŸè ã䜿ã£ãŠãè¯ã. äž¡è ã®éãã¯, send/recv ã¯, write/read ãããã²ãšã€åŒæ°ãå€ã, ãã®åŒæ°ã§ããã€ããªãã·ã§ã³ãæå®ããäºãã§ã ãäºã§ãã. ã, ãã®å®éšã«ãããŠã¯ããããã䜿ãå¿ èŠã¯ãªã (ãã㧠send/recv ã«èšåããã®ã¯äž»ã«, ãã¡ãã®æ¹ã
Windows ç°å¢ãªã©ãå«ããŠ, ãæ®éããšã¿ãªãããŠãããã, ãšããã ãã®çç±). n = send(s, data, N, 0); ãŸãã¯
n = write(s, data, N);
n = recv(s, data, N, 0); ãŸãã¯
n = read(s, data, N); åäœã«ã€ããŠã¯ read, write ãšåãã ãã説æãããŸã§ããªãã ãã.
2.5 close/shutdown close(s); open ãããã¡ã€ã«ãéããã®ãšå šãåã API ãçšãã. ãã以éã¯, ãã®ãœã±ãããçšããäºã¯ã§ããªã. ãŸã, read/recv ã¯, çžæã close ãåŒã³åºã, ãã€çžæããã以åã«éã£ãããŒã¿ããã¹ãŠåãåã£ãåŸ, 0 ãè¿ã
(ãã¡ã€ã«ãæåŸãŸã§èªã¿çµãã£ãåŸãšåãæåããã). ããã§ãã®å Žåã, ãœã±ãããããEOF ãèªãã ããEOF ã åãåã£ãããªã©ãšããè¡šçŸãããäºããã. å®éã«ã¯ãã¡ã€ã«ãèªãã§ããããã§ã¯ãªãã®ã ã, æ £ç¿ãšããŠãã®ãã ãªèšãæ¹ããã.
close ããããš, 以éããŒã¿ã®éä¿¡ (write)ã»åä¿¡ (read) ãšãã«ã§ããªããªãã, ãèªåã¯ããããŒã¿ãéãçµãã£ãã ãšããäºãçžæã«æãã€ã€, ãŸã ãã£ãŠããããŒã¿ãåããšãäºã ãã¯ããã, ãšããç¶æ³ããããã. ãã®æ§ãªæ, èª åã¯ããããŒã¿ãéãçµãã£ãäºãéç¥ããããã« close ãåŒãã§ããŸããš, ããããŒã¿ãåãåãäºãã§ãã, ããŸã äºã«ãªã. ãã®ãããªæã«çšããã®ã shutdown ãšãã API ã§ãã.
shutdown(s, SHUT WR); ãåŒã¶ãš, çžæ㯠(ãã¡ãã send ãããã¹ãŠã®ããŒã¿ãèªã¿çµãã£ãåŸ)EOF ãåãåã. ããã, ãã¡ãã¯äŸç¶ãšããŠ
read ã¯å¯èœã§ãã.
æ¬èª²é¡ 6.1 以äžã®ãããªåäœããã C ããã°ã©ã client recv.c ããœã±ãã API ãçšããŠäœã.
⢠ã³ãã³ãã©ã€ã³ã§æå®ãã IP ã¢ãã¬ã¹ãšããŒãã«æ¥ç¶ãã ⢠æ¥ç¶ãããµãŒããããŒã¿ãéã£ãŠãããšããåæã§, ããŒã¿ã EOF ã«å°éãããŸã§èªãã§èªãã ããŒã¿ãæšæº åºåã«æžã
ã§ããã, nc ã³ãã³ãã§ãµãŒããç«ãŠ, client recv ã§ããã«ã€ãªãã§ããŒã¿ãéåä¿¡ããŠã¿ã. ãªãã€ã¬ã¯ã·ã§ã³ã å©çšããŠ, nc ã³ãã³ãã«å€§ããã®ãã¡ã€ã«ãéãã, åãåã£ãæ¹ããã¡ã€ã«ã«ãããä¿åãã. äž¡è ã¯å šãåãå 容㚠ãªãã¯ãã§ãã. ãã®äºã確ããã. ããã«ã¯, nc ã³ãã³ããçšããŠåãåã£ãããŒã¿ãå ã®ãã·ã³ã«éãè¿ããŠ, diï¬ ã³ãã³ããçšããŠæ¯èŒãããšãããããããªã. ãŸã, ãã¡ã€ã«ãµã€ãºãäžèŽããŠããäº, md5sum ãšããã³ãã³ãã§è¡š 瀺ãããããã·ã¥å€ãäžèŽããŠããäºãèŠãäºãããŠèŠããšè¯ã.
$ md5sum filename 1a24874fc4ea61095d0cf16da5ee8516 filename
æ¬èª²é¡ 6.2 æ°ç§ã®é³ããŒã¿ãè¿ããŠæ¥ç¶ãåããµãŒãããã¡ãã§çšæãã. ããã«æ¥ç¶ããŠ, åºåã/dev/dsp ã«ãªã ã€ã¬ã¯ãããäºã§, é³ããªãããŠã¿ã.
$ ./client recv 133.11.238.11 50000 > /dev/dsp
ããŒã¿ãåããšãã ãã§ãªã, éã£ãŠããåãåãããã°ã©ã ãæžããŠã¿ãã.
æ¬èª²é¡ 6.3 以äžã®ãããªåäœããã C ããã°ã©ã client send recv.c ããœã±ãã API ãçšããŠäœã.
⢠ã³ãã³ãã©ã€ã³ã§æå®ãã IP ã¢ãã¬ã¹ãšããŒãã«æ¥ç¶ãã ⢠æšæºå ¥åã EOF ãè¿ããŸã§, æšæºå ¥åããããŒã¿ãèªãã§ã¯ãããæ¥ç¶å ã«éãäºãç¹°ãè¿ã ⢠ããŒã¿ãéãçµãã£ãã shutdown(s, SHUT WR) ã§, éä¿¡ããŒã¿ã®çµãããæ¥ç¶å ã«éç¥ãã ⢠ãã®åŸ, æ¥ç¶å ããããŒã¿ã EOF ãŸã§åãåã
èŠããã«ããŒã¿ãéãã ãéã£ãŠ, ããšã¯åãåããšããã¯ã©ã€ã¢ã³ãã§ãã. åãåã£ãããŒã¿ããã®ãŸãŸéãè¿ãã ãã®ãµãŒãããã¡ãã§çšæãã. æ¬ããã°ã©ã ãããã«æ¥ç¶ããŠéã£ãã®ãš åãããŒã¿ãè¿ã£ãŠããäºã確ããã.
$ ./client send recv 133.11.238.11 50001 < orig ï¬le > output ï¬le ããã§, orig ï¬le ãš output ï¬le ã¯åäžã®ãã¡ã€ã«ãšãªãã¯ãã§ãã. diï¬ ã³ãã³ãã§æ¯èŒããŠã¿ã.
$ diï¬ orig ï¬le output ï¬le ãããã¯: ãªããããªã«æ±ãã€ã³ã¿ãã§ãŒã¹?
è¥å¹²æ¬é¡ãšãããã, C èšèªã®æ±ããšãããšããã¹ãã¬ã¹ãªãä»ãåã
ãããã«ãªãããã®éåŠ.
connect ã®åŒæ°ã®æž¡ãæ¹ã¯ã©ãèŠãŠãããããªç©ã§ã¯ãªã. struct sockaddr in addr; addr.sin family = AF INET; addr.sin addr.s addr = inet addr(â192.168.1.100â); addr.sin port = htons(50000); int ret = connect(s, (struct sockaddr *)&addr, sizeof(addr)); 倧å ã®çç±ã¯äœåºŠãè¿°ã¹ãŠããéã, ãœã±ããã IP 以å€ã®éä¿¡ã«ã䜿ããããã« (ã¢ãã¬ã¹ã®è¡šçŸåœ¢åŒãªã©ãç°ãªã£ãŠ ããŠã䜿ããããã«) èšèšãããŠããããã§ãã. ãªããããç®æšã«èšèšãããšãããæ±ãäºã«ãªã£ãŠããŸãã®ãã説æ ããŠãã.
C èšèªãã¯ãããšããå€ãã®èšèªã§ã¯, é¢æ°ã®åŒã³åºãåœ¢åŒ (åŒæ°ã®æ°ããã®å) ã¯åºæ¬çã«ã¯é¢æ°ããšã«äžæã§ãªã ãŠã¯ãªããªããšããå¶éããã. äŸãã°ããæ㯠double åã®åŒæ°ã 3 ã€, ããæã¯æåååã®åŒæ°ã 7 ã€åããšã, 㪠ã©ãšããé¢æ° (å¯å€åŒæ°é¢æ°) ãæžããšããäºã¯, åºæ¬çã«ã¯ãªã (å³å¯ã«ã¯å. printf ãªã©ããŸãã«ãã®äŸå€ã«ãªã£ãŠã ãã®ã ã, ãã®ãããªé¢æ°ãæžãã®ã¯é¢åãªäž, ã©ããªããŒã¿åã«å¯ŸããŠã䜿ããããã§ã¯ãªã. ããã§ãã以äžã®æ·±å ¥ ãã¯ããªã). ããã§, connect ãšããäžã€ã®é¢æ°ã«, ã©ããããããå Žå㯠IPv4 ã¢ãã¬ã¹ã, ããå Žåã«ã¯ IPv6 ã¢ãã¬ã¹ã, ãŸã ããå Žåã«ã¯ UNIX ãã¡ã€ã³ãœã±ããã®ã¢ãã¬ã¹ãæž¡ãã®ã, ãšããäºãåé¡ãšãªã. ãã®ããã« C èšèªã§åžžå¥æ段㚠ããŠäœ¿ãããã®ã, æ§é äœ (struct) ã«å¿ èŠãªããŒã¿ãæ ŒçŽã, ãã®ãã€ã³ã¿ãæž¡ã, ãšããææ³ã§ãã. 埩ç¿ã«ãªãã, å¿ èŠãªæ å ±ããã¹ãŠäžã€ã®å€æ°ã«ãŸãšããããã«æ§é äœããã. äŸãã°, 3 次å 空éå ã®ç¹ãè¡šãæ§é äœãšããŠ,
struct point { double x; double y; double z; }; ãšãã, 3 ã€ã® double ãäžã€ã«ãŸãšããæ§é äœãå®çŸ©ããŠããã°,
struct point p;
ã§, p ã¯, p.x, p.y, p.z ãšãã 3 ã€ã® double ã®æ å ±ãä¿æã§ããå€æ°ãšãªã. é¢æ°ã«æž¡ããšãã, p äžã€ãæž¡ãã°, 3 ã€ã®
double ãæž¡ããã®ãšåãå¹æããã. connect ã® API ã§ã¯, éä¿¡äœç³»ããšã«ãã®ã¢ãã¬ã¹ãè¡šãæ§é äœãå®çŸ©ãããŠã ã. IPv4 ã§ããã° sockaddr in, IPv6 ã§ããã° sockaddr in6, UNIX ãã¡ã€ã³éä¿¡ã§ããã°, sockaddr un ã®ããã«. ããšã¯ãã®ããã«å®çŸ©ãããã¢ãã¬ã¹æ§é äœã®å€æ°ã connect ã«æž¡ãã°è¯ããã, ãšããäºã«ãªã.
struct sockaddr in ipv4 addr; struct sockaddr in6 ipv6 addr; struct sockaddr un unix addr; ... connectâ (s1, ipv4 addr, . . . ); connectâ (s2, ipv6 addr, . . . ); connectâ (s3, unix addr, . . . ); ã®ããã«. ãããæ®å¿µãªããäžã€ã®é¢æ° (connect) ã®äžã€ã®åŒæ° (第 2 åŒæ°) ã, ããæ㯠sockaddr in æ§é äœ, ããæã¯
sockaddr in6 æ§é äœ, ãŸãããæ㯠sockaddr un æ§é äœãåããšããªã©ãšããåšçšãªäºã¯ (C èšèªã§ã¯) ã§ããªã. ãããããã, æ§é äœã§ã¯ãªã, æ§é äœãžã®ãã€ã³ã¿ãªãã°èš±ããã. ã ãã, ããæ㯠sockaddr in æ§é äœãžã®ã〠ã³ã¿, ããæ㯠sockaddr in6 æ§é äœãžã®ãã€ã³ã¿, ãŸãããæ㯠sockaddr un æ§é äœãžã®ãã€ã³ã¿ãåããšãåŒæ°, ãš ããç©ã¯äœãäºãã§ãã. ããã connect ã® 2 çªç®ã®åŒæ°ã§ãã. ã€ãŸã,
struct sockaddr in ipv4 addr; struct sockaddr in6 ipv6 addr; struct sockaddr un unix addr; ... connectâ (s1, &ipv4 addr, . . . ); connectâ (s2, &ipv6 addr, . . . ); connectâ (s3, &unix addr, . . . ); ã¯æ©èœãã. 圢åŒäž, ãã®åŒæ°ã®åã¯, sockaddr æ§é äœãžã®ãã€ã³ã¿, ãšããäºã«ãªã£ãŠãããã, æž¡ãéã«ãã£ã¹ãã ãã
struct sockaddr in ipv4 addr; struct sockaddr in6 ipv6 addr; struct sockaddr un unix addr; ... connectâ (s1, (struct sockaddr *)&ipv4 addr, . . . ); connectâ (s2, (struct sockaddr *)&ipv6 addr, . . . ); connectâ (s3, (struct sockaddr *)&unix addr, . . . ); äºã§, åã connect ãæ³å®ããŠããç©ãš (圢åŒçã«) äžèŽããã. ãŸã, ãã®ãããªäºããããšãã¯, åãåã£ãæ¹ã§ã©ã® çš®é¡ã®ããŒã¿ãå®ã¯åãåã£ãã®ã, ãšèšãäºãåããããã«, æ§é äœã®æ±ºãŸã£ãäœçœ®ã«, çš®é¡ãè¡šãã¿ã°ãã€ããŠãã ã®ãæ®éã§ãã. ããã, sin family ãšããèŠçŽ ã§ãã. ãªãæ§é äœãã®ç©ã ãšãã¡ãªã®ã«, ãã€ã³ã¿ãªãè¯ãã®ã? ã€ãŸããªãçãã¯ããã決ãŸãã ãã, ãšããç©ã ã, 㪠ããã®ãããªæ±ºãŸãã«ãªã£ãŠããã®ãã«ã¯, C èšèªåŠçç³»ã®ä»çµã¿ãããçšåºŠç¥ããšçŽåŸã§ããçç±ããã. ããã¯, ãã€ã³ã¿ãšã¯æè©®, ã¢ãã¬ã¹ã®äºã«éããªãã®ã§, å®ã¯äœãšããæ§é äœãžã®ãã€ã³ã¿ã§ããããšãã®ãµã€ãºãå ãã ããã§ãã. äŸãã° 32 bit ã®ãã·ã³ã§ã¯ãã¹ãŠã®ãã€ã³ã¿ã¯ 32 bit ã®æŽæ°äžåã«éããªã. ãããã£ãŠ, sockaddr in æ§é äœãžã®ãã€ã³ã¿ã, sockaddr in6 æ§é äœãžã®ãã€ã³ã¿ã, sockaddr un æ§é äœãžã®ãã€ã³ã¿ã, ãã¹ãŠåãä»çµã¿ã§ æž¡ããã. ã ããããé¢æ°ãžåŒæ°ãæž¡ãã®ã«, ããæ㯠sockaddr in æ§é äœãžã®ãã€ã³ã¿, ããæ㯠sockaddr in6 æ§é äœãžã®ãã€ã³ã¿, ãŸãããæ㯠sockaddr un æ§é äœãžã®ãã€ã³ã¿ãæž¡ããããšããŠã, ååŒæ°ãæž¡ãããå Žæããããã ããªäºã¯ãªã, åãåãæ¹ã«é£ããã¯çºçããªã.
äžæ¹ããã, æ§é äœãã®ç©ãæž¡ã (ãã€ã³ã¿ãæž¡ãã®ãšäœãéãã®ãåãããªããããããªãã, ããã§ã¯æ§é äœã®äž 身ããã¹ãŠæž¡ãäº, ãšæã£ãŠãããã°è¯ã) ãšãªããš, æ§é äœã¯äžèº«ãéãã°ãµã€ãºãç°ãªããã, äžã€ã®åŒæ°ã®ãµã€ãº ãå Žåã«ãã£ãŠéã, ãšããäºã«ãªã. ãã®ãããªåŒæ°ãæž¡ãããŠ, åãåãåŽããããåžžã«æ£ããåãåãäºã¯, éç« ã¡ããŠãã§ããªããšã¯èšããªãã, ããããã (ãã€é ã) åŠçãå¿ èŠã«ãªã. äŸãã°åŒæ°ãåã«ã¡ã¢ãªäžã«ééãªã䞊 ã¹ãŠæž¡ããããªæ¹åŒã§ã¯, ä»ã®åŒæ°ã®æ ŒçŽå Žæãªã©ãçã£ãŠããŠå°ã£ãäºã«ãªã. ããã§ããããééããªãæž¡ãããšæ ããš, ã©ã®åŒæ°ãã©ã®å Žæã«ããããªã©ã®æ å ±ã, åãããŠæž¡ããªã©ã®åŠçã, é¢æ°åŒã³åºãã®åºŠã«å¿ èŠã«ãªã. ãã©ã® åŒæ°ãã©ã®å Žæã«ããããªã©ã®æ å ±ãæž¡ãããšããã®ã¯, ã©ã®åŒæ°ãã©ã®ã¢ãã¬ã¹ã«ããã, ãšããäºã ãã, ãã€ã³ã¿ ãæž¡ããšããã®ãšã»ãšãã©åãäºã§ãã. ãããªäºããã£ãããããããã ã£ãã, å¿ èŠã«å¿ããŠããã°ã©ã ãæžãæ¹ã« ããããŠ, æ®æ®µããé ããªããããªäºã¯ããªã, ãšããã®ã C èšèªã®åºæ¬ã¹ã¿ã³ã¹ã§ãã. 以äžã®è©±ãã, connect ã䜿ãããã®é圢ã,
struct sockaddr in addr; addr.sin family = AF INET; addr.sin addr.s addr = . . . ; addr.sin port = . . . ; int ret = connect(s, (struct sockaddr *)&addr, sizeof(addr)); ã®ããã«ãªãäºãŸã§ã¯çŽåŸã§ããã®ã§ã¯ãªãããšæã. connect ã第 3 åŒæ°ãšã㊠sizeof(addr)â第 2 åŒæ°ã§æž¡ãããæ§ é äœã®å€§ããâ ãåãåã£ãŠããã®ã¯, çµ¶å¯Ÿå¿ èŠãšããåãã§ã¯ãªããããããªãã, äŸãã°ã¢ãã¬ã¹ã®äœç³»ã«ãã£ãŠ ã¯å¿ èŠãªãµã€ãºãå¯å€ãšããäºããããããã, ãã®æ§ã«ãªã£ãŠããç©ãšçŽåŸããã (IPv4 ã®å Žå, IP ã¢ãã¬ã¹ 32 bit, ããŒãçªå· 16 bit ãšæ±ºãŸã£ãŠãã, ãµã€ãºã¯èªããšåãã). ãŸã, åãåã£ãåŽã§ç¬¬ 2 åŒæ°ãã³ããŒãã, ãªã©ã®åŠç ãç°¡åã«è¡ãããã«ã, æž¡ãããŠããæ¹ã䟿å©ã§ããã.
sin addr.s addr ã«ã€ããŠã¯, â192.168.1.100â ãšããã¢ãã¬ã¹ã 13 æåã®æååãšããŠè¡šçŸããã®ã§ã¯ãªã, 8 bit Ã4 ã® 32 bit ã§è¡šããšããæ¹æ³ãæ¡çšããŠããã®ã§, inet addr ãšããé¢æ°ã§ãã®å€æãè¡ã£ãŠãã. sin port ã«ã€ããŠã¯, 㪠ãæŽæ°ããã®ãŸãŸä»£å ¥ããã ãã§ã¯ãã¡ã§, htons ãªã©ãšããé¢æ°ãåŒãã§ããã®ã? htons ã¯, host-to-network-short ã®ç¥ã§, short (16 bit) æŽæ°ã®, 1 ãã€ãç®ãš 2 ãã€ãç®ã®äžŠã³æ¹ (ã©ã¡ãã MSB åŽã§ã©ã¡ãã LSB åŽã) ã«ã€ããŠ, ã ããããããã¯ãŒã¯ãã€ãé åºããªãç©ã«ããé¢æ°ã§ãã. äžè¬ã« CPU ã§ã¯, 8 bit ãäžã€ã®æŽæ°ãšã¿ãªããæŒç®, 16 bit ãäžã€ã®æŽæ°ãšã¿ãªããæŒç®, 32 bit ãäžã€ã®æŽæ°ãš ã¿ãªããæŒç®, . . . ãªã©ãåœä»€ãšããŠæäŸãããŠãã. ããã«å¯Ÿå¿ããŠ, ã¡ã¢ãªã®ããçªå° (X) ãã 8 bit ãèªã¿èŸŒãåœ ä»€, ã¡ã¢ãªã®é£ç¶ããäºã€ã®çªå° (X, X+1) ãã 16 bit ãèªã¿èŸŒãåœä»€, ã¡ã¢ãªã®é£ç¶ããåã€ã®çªå° (X, X+1, X+2,
X+3) ãã 32 bit ãèªã¿èŸŒãåœä»€, ãªã©ãæäŸãããŠãã. ãã CPU ã®ããã€ãé åºããšããã®ã¯, äŸãã° X, X+1 ã® äºã€ã®çªå°ãã 16 bit ãèªã¿èŸŒãåœä»€ãçºè¡ããæã«, ã©ã¡ãã®ã¢ãã¬ã¹ (X or X+1) ããåºãŠãã 8 bit ã, èªã¿èŸŒãŸ ãã 16 bit ã® MSB (Most Signiï¬cant Byte; 16 bit äžã®äžäœ 16 bit) ã«ãªãã, ãšããäºãèŠå®ããŠããç©ã§ãã. ã ã㯠CPU ã«ãã£ãŠç°ãªã£ãŠãã, Intel x86 系㯠Little Endian ãšãã£ãŠ, X+1 çªå°ã®æ¹ã MSB ã«ãªã. ä»ã®å€ãã®ã ã·ã³ã§ã¯, Big Endian ãšãã£ãŠ, X çªå°ã®æ¹ã MSB ã«ãªã. ãããã¯ãŒã¯ãã€ãé åºã Big Endian ã§ãã. ã ãã,
htons ã®æ£äœã¯, Little Endian ã® CPU äžã§ã¯ 16 bit ã® MSB ãš LSB ãå ¥ãæ¿ãã (Big Endian ãªããªã«ãããªã), ãšããäºã§ãã. éä¿¡ãå®çŸãããã±ããã®äžã«ã¯, éä¿¡å ã¢ãã¬ã¹, ããŒããåä¿¡å®ãŠå ã¢ãã¬ã¹, ããŒããªã©ãå«ãŸããŠãã. ãã® è¡šçŸ (ããã§åé¡ãšãªãã®ã¯ããŒãçªå·) ããã¹ãããšã«ç°ãªã£ãŠããã®ã¯å°ããã, éä¿¡ãããéã«ã¯å šäžçã®ãã·ã³ ã§å ±éã®é åºã決ããŠãããã. ããããããã¯ãŒã¯ãã€ãé åºã§ãã. ãã¡ãããããªç©ã¯ connect é¢æ°ã®äžã§ã㣠ãŠãããŠ, äœãæž¡ãæ¹ãããã«çµ±äžããŠãããªããŠããã, ãšããæ°ãããã, sockaddr in ãšããæ§é äœã®è¡šçŸã¯, (bit åã®ã¬ãã«ã§)CPU ã®ãã€ãé åºã«ãããªãç©ãšãããã£ã, ãšããäºã§ã¯ãªãããšæããã.
第7æ¥ å šæéå®ç¿ãšãã. é ããŠãã人ã¯ãã®æéã§è¿œãã€ã. äœè£ã®ãã人ã¯, 次åãäºç¿ãã, çºå±èª²é¡ã®æ§æ³ãç·Žã£ãŠè° è«ãã, ãªã©ã®æéãšããŠäœ¿ã.
第 8 æ¥ ãœã±ããããã°ã©ãã³ã° (ãµãŒã) 1. æŠ
èŠ
ä»åã¯ãœã±ããã®ãµãŒãåŽã® API ã説æãã. ããã§, ã¯ã©ã€ã¢ã³ãã»ãµãŒããšãèªåã®ããã°ã©ã ã§éä¿¡ãã§ãã äºã«ãªã. ãœã±ããã®ãµãŒãã¯, ããããŒãäžã§ãåŸ ã¡åããç¶æ ã«å ¥ã, ã¯ã©ã€ã¢ã³ãããã®æ¥ç¶ (connect) ãåãä» ãã. ãåŸ ã¡åããé¢æ°ããè¿ããš, ãã®æç¹ã§ã¯ã©ã€ã¢ã³ããšã®æ¥ç¶ã確ç«ããŠãã, ããŒã¿ã®éåä¿¡ãããäºãã§ã ã. æ¥ç¶ã確ç«ãããŸã§ã®æé ãã¯ã©ã€ã¢ã³ãã«æ¯ã¹ããšããã«ãããããã, äžæŠæ¥ç¶ã確ç«ããåŸã®ããæ¹ã¯ã¯ã©ã€ ã¢ã³ããšãµãŒãã§å šãåãã§ãã. ã¹ããã 1: ãœã±ãããäœã (socket) ã¹ããã 2: ã©ã®ããŒãã§åŸ ã¡åããã決ãã (bind) ã¹ããã 3: åŸ ã¡åãå¯èœå®£èš (listen) ã¹ããã 4: ã¯ã©ã€ã¢ã³ãã connect ãããŸã§åŸ 〠(accept) ã¹ããã 5: ããŒã¿ã®éä¿¡ (send ãŸã㯠write), åä¿¡ (recv ãŸã㯠read) ãè¡ã ã¹ããã 6: éä¿¡çµäºåŸ, ãœã±ãããéãã (close) ããå°ãå®éã®ããã°ã©ã 颚ã«æžãã°ä»¥äžã®ãããªæé ã«ãªã.
unsigned char data[N]; int ss = socketâ (); bindâ (ss, 50000); â
listen (ss);
# åŸ ã¡åãçªå·ã¯ 50000 ã«èšå® # åŸ ã¡åãå¯èœå®£èš
â
s = accept (ss); close(ss);
# æ¥ç¶ãæ¥ããŸã§åŸ æ© # ãã以äžæ¥ç¶ãåãä»ããªãå Žå
read(s, data, N); data[0] = . . .; data[1] = . . .; . . .; write(s, data, N); close(s); ãã¡ãã write, read ã¯ç¹°ãè¿ãçšããŠã, ã©ã®ãããªé çªã§çšããŠãè¯ã. close(ss) ã¯, ãã以äžæ¥ç¶ãåãä»ã㪠ãâã€ãŸããã以é accept ãåŒã¶ã€ããããªãâäœçœ®ã§åŒã³åºã.
2. API 説 æ bind, listen, accept ãšãã 3 ã€ã®ã¹ããã以å€ã¯ã¯ã©ã€ã¢ã³ããšå ±éã§ãã. 以äžã§ã¯, ss ã socket ããè¿ãããå€ ãæ ŒçŽããŠãããšãã (ss = socket(. . . )).
2.1 bind bind ã¯, ããœã±ããã«, ããŒãçªå·ãªã©ã®ååãå²ãåœãŠããã·ã¹ãã ã³ãŒã«ã§ãã. æ¬å®éšã®æèã«åã£ã圢ã§èšã ãš, ãå°æ¥ã©ã®ããŒãã§åŸ ã¡åããããæå®ãããã·ã¹ãã ã³ãŒã«ã§ãã. ããã§ã, ãœã±ãããæ±çšç㪠(IP éä¿¡ã«é ããªã) ã€ã³ã¿ãã§ãŒã¹ãšããŠèšèšãããŠãããã, ãã®æž¡ããããåããã©ã (bind(ss, 50000) ã§ã¯æžãŸãªã). 以äžãåºæ¬ãã©ãŒã ã§ãã.
struct sockaddr in addr; addr.sin family = AF INET;
# æçµçã« bind ã«æž¡ãã¢ãã¬ã¹æ å ± # ãã®ã¢ãã¬ã¹ã¯ IPv4 ã¢ãã¬ã¹ã§ã
addr.sin port = htons(50000);
# ããŒã. . . ã§åŸ ã¡åããããã§ã
addr.sin addr.s addr = INADDR ANY;
# ã©ã® IP ã¢ãã¬ã¹ã§ãåŸ ã¡åããããã§ã
bind(ss, (struct sockaddr *)&addr, sizeof(addr)); å šäœãšããŠãã£ãŠããäºã¯, èªåãã©ã®ããŒããš, ã©ã® IP ã¢ãã¬ã¹ã§åŸ ã¡åããããã€ãããªã®ãã, addr ãšããæ§é äœå€æ° (ã®ã¢ãã¬ã¹) ãæž¡ãäºã§, bind ã·ã¹ãã ã³ãŒã«ã«æããäºã§ãã. ãã®æž¡ãæ¹èªèº«ã¯ connect ãšäŒŒãŠããã®ã§ä» 床ã¯é·ã説æã®å¿ èŠã¯ãªãã ãã. ããã«å ç«ã¡ addr ãšããæ§é äœã®èŠçŽ ãåããŠããã®ããã®äžã® 3 è¡ã§ãã. ãã©ã® IP ã¢ãã¬ã¹ã§åŸ ã¡åããããã€ãããªã®ããã«ã€ããŠ, ãããªãã®èªåã® IP ã¢ãã¬ã¹ã«æ±ºãŸã£ãŠããã ãã ãšããçåãããã ãã. ãããŠå®é, äžèšã§ã¯ããã INADDR ANY ãšæå®ããŠ, ãã©ãã§ããã (èªåã®æã€ãã¹ ãŠã®ã¢ãã¬ã¹)ããšèšã£ãŠãã. è€æ°ã® IP ã¢ãã¬ã¹ãæã£ãŠããŠãã®ãã¡ã®äžéšã® IP ã¢ãã¬ã¹ã«å¯Ÿããæ¥ç¶ã®ã¿åãä» ãã, ãšããå Žåã«ã¯ããã«ãã® IP ã¢ãã¬ã¹ãæå®ããäºã«ãªã.
bind ã§ããçºçãããšã©ãŒ: âAddress already in useâ (ãã€ãã!) bind ã«éãããã¹ãŠã®ã·ã¹ãã ã³ãŒã«ã®æ å確èªãããäº. ãããŠ, bind ãçšããŠãããšéåžžã«ããç®ã«ãããšã©ãŒãããã§ãã. ããã¯, ãèŠæ±ããããŒãçªå·ããã§ã«äœ¿ãããŠããããšããäºã§ãã. èªåã®è»ã®ãã³ããŒãã¬ãŒãã, æšªæµ 500 ã
11-11 ã«ããããšæã£ãã, ãã§ã«ç»é²æžã¿ã ã£ã, ãšããã®ãšåãã§ãã. ãããŠ, èªåã§é©åœãªããŒãçªå·ã決ã㊠ããã°ã©ã ãæžããŠãããš, ãã®ããã°ã©ã ãééããŠç«ã¡äžãã£ã±ãªãã§ããäžåç«ã¡äžããããšãããšããªã©ã«ã ããã¡ã§ãã. åºæ¬çã«ã¯, ãã®ãœã±ããã close ããã°ãã®ããŒãçªå·ã¯åå©çšå¯èœã«ãªã. ãããŠãã®ãœã±ããã䜿ã£ãŠãããã ã°ã©ã ãçµäºããã°èªåçã«ãœã±ãã㯠close ãããã®ã§, ããã°ã©ã çµäºã«ãã£ãŠãã®ããŒãçªå·ã¯åå©çšå¯èœã«ãªã ãšèããŠãã. ãã ã, close ããŠããå®éã«åå©çšã§ããããã«ãªããŸã§ã«å°ãæéãããã. ããã¯, äžåºŠãã®ããŒã ã䜿ã£ãããã«ã¯, ãã®ããŒããããããŠå€ãããã±ãããé£ãã§ããå¯èœæ§ãããããã§ãã.
2.2 listen listen ã¯, ãæ¥ç¶åä»éå§å®£èšãã§ãã. ããããµãŒããè¡ã£ãæãã, ã¯ã©ã€ã¢ã³ãã®æ¥ç¶èŠæ± (connect ã·ã¹ãã ã³ãŒã«) ã¯æåããããã«ãªã. ãŸã, ãã®åŸãµãŒãã¯å®éã«æ¥ç¶èŠæ±ãããã®ãåŸ ã€ (accept ã·ã¹ãã ã³ãŒã«ãçºè¡ã ã) äºãã§ããããã«ãªã. åºæ¬ãã©ãŒã ã¯ä»¥äžã®éã.
listen(ss, 10); 第 2 åŒæ° (ããã§ã¯ããå æžã« 10 ãšããŠãã) ã¯, è€æ°ã® connect èŠæ±ãã»ãŒåæã«æ®ºå°ããæã«, ã©ã®ãããã®èŠæ±ã èœãšããã«åŠçããã, ãšããäºãå¶åŸ¡ãããã©ã¡ãŒã¿ã§ãã. ãã®å€ãè¶ãã connect èŠæ±ãã»ãŒåæã«æ®ºå°ãããš, ãã®ãã¡ã®ããã€ãã¯ãããæéãããã£ãã, ææªã®å Žåã¿ã€ã ã¢ãŠãããŠå€±æãããããããã«ãªã. ãã®å®éšã§äœ ãããã°ã©ã ã§ã¯, 10 ãšã§ãããŠããã°ååã ãã.
2.3 accept accept ã¯, éã«ã¯ã©ã€ã¢ã³ãããã®æ¥ç¶ãåŸ ã€æäœã§ãã. listen ãšã®éããåããã«ãããããããªãã, äŸããŠèš ãã° listen ã¯, é»è©±ç·ããžã£ãã¯ã«å·®ã蟌ãæäœ, accept ã¯é»è©±ã®åã§é»è©±ã鳎ãã®ãã²ãããåŸ ã€æäœã§ãã.
accept ã®çµæ, ã¯ã©ã€ã¢ã³ããšéä¿¡ãããããã®æ°ããªãœã±ãããè¿ãå€ãšããŠè¿ããã. accept ã«æž¡ãããœã±ãã ã§éä¿¡ãããã®ã§ã¯ãªãäºã«æ³šæ. å®é accept ã¯ãã以éãæ°ããæ¥ç¶ãåãä»ããäºãã§ãã (ã, ãããã£ãŠã»ã ã) ã®ã§, ããã¯èªç¶ãª API ãšèšããã ãã. ãŸã accept ã®çµæ, ãµãŒãã«äœãšããã¢ãã¬ã¹ã®ã¯ã©ã€ã¢ã³ããæ¥ç¶ã ããŠããã®ããè¿ããã. ããã¯å¿ èŠããªããã°ç¡èŠããŠæ§ããªã. åºæ¬ãã©ãŒã ã¯ä»¥äžã®éã.
struct sockaddr in client addr; socklen t len = sizeof(struct sockaddr in); int s = accept(ss, (struct sockaddr *)&client addr, &len); client addr ã¯, æ å ±ã accept ã«æž¡ãããã®ãã©ã¡ãŒã¿ã§ã¯ãªã, accept ãã, æ¥ç¶ããŠããã¯ã©ã€ã¢ã³ãã«é¢ããæ å ± ãåããšãããã®ãã©ã¡ãŒã¿ã§ãã. accept ããè¿ã£ãæã«, client addr ã®èŠçŽ sin addr.s addr, sin port ãåããã
ãŠãã, ãšããä»çµã¿ã§ãã. ããã«äŒŽã£ãŠ, 第 3 åŒæ°ãæž¡ããæ§é äœã®ãµã€ãºãã®ç©ã§ã¯ãªã, è¿ãããæ§é äœã®ãµã€ ãºãåãåãå€æ° (ã®ã¢ãã¬ã¹) ãšãªã£ãŠãã (ãã ãæž¡ãéã«, 第 2 åŒæ°ã§æž¡ããæ§é äœã®ãµã€ãºãå ¥ããŠããå¿ èŠã ããã®ã§æ³šæ. ããã¯, äœãã€ãã®å ¥ãç©ãçšæããŠåŸ ã£ãŠããããã·ã¹ãã ã«æããããã«å¿ èŠã§ãã). ãŸã, è¿ãå€ ã¯ (æåããŠããã°) æ°ãããœã±ããã§, æ¥ç¶ããŠããã¯ã©ã€ã¢ã³ããšã®éåä¿¡ (send/recv) ãããã®ã¯ãã®ãœã±ããã 䜿ã£ãŠè¡ã.
æ¬èª²é¡ 8.1 以äžã®ãããªåäœããã C ããã°ã©ã , serv send.c ãæžã.
$ ./serv send h ããŒãçªå· i h ãã¡ã€ã«å i ãšããŠèµ·åãããš, ããŒãçªå·ã§æ¥ç¶åŸ ã¡ã«å ¥ã. æ¥ç¶ããŠããã¯ã©ã€ã¢ã³ãã«, h ãã¡ã€ã«å i ã®äžèº«ãéãã€ãã.
ã€ãŸã, èª²é¡ 6.2 㧠client recv ã®çžæããããµãŒãã®åäœã§ãã. client recv ãšæ¥ç¶ããŠã¿ãŠåäœã確èªãã. åœç¶ ãªãã, h ãã¡ã€ã«å i ãšããŠ, /dev/dsp ãéžã³, ã¯ã©ã€ã¢ã³ãåŽã§/dev/dsp ãžåºåããã°, ãµãŒãããå ¥åããé³ã㯠ã©ã€ã¢ã³ãã§é³Žããäºãã§ãã.
3. ãããã¯ãŒã¯ã®é å»¶æž¬å® ä»¥åã« iperf ã§ãããã¯ãŒã¯ã®è»¢éé床 (ãã³ãå¹ ) ã枬å®ããã, ä»åºŠã¯é 延ã枬ã£ãŠã¿ãã. é 延ãšããã®ã¯, ãã
1 ãã€ããéä¿¡å ãé¢ããŠãã, ç®çå°ãžå°çãããŸã§ã®æéã§ãã. ãã ã, çéã®æéã枬ãã®ã¯é£ããã®ã§, åŸåŸ© æé (Round Trip Time; RTT) ã枬ã. ããã«å¯Ÿã, æ§èœã®ææšãšããŠãã䜿ãããã®ã¯è»¢éé床 (1 ç§ãããäœãã€ãéããã) ã§ãã. äž¡è ã¯äŒŒãŠããã ç°ãªãææšã§ãã. éã«äŸãããš, 転éé床ã¯éã®å€ªã (äœè»ç·ããã) ã«çžåœãã. é 延ã¯ç®çå°ãŸã§ã®è·é¢ã§ãã. äž¡è ãç°ãªããšããäºãçŽåŸããããšã話ããããš, äžæ±ããç³æ²¹ãéã¶ã®ã«, é£è¡æ©ã§ã¯ãªããªãé ãã¿ã³ã«ãŒã䜿 ãã®ã? ããã¯èšããŸã§ããªãã¿ã³ã«ãŒã®æ¹ãäžåºŠã«ç©ããéãå€ãããã§ãã. ãã¡ããããæ¥äžæ±ãåºçºããç³æ²¹ äžæ»Žãæ¥æ¬ã«å±ããŸã§ã®æé (é 延) ã¯, ã¿ã³ã«ãŒã®æ¹ãå§åçã«é ãã®ã ã, ããã¯ç³æ²¹ãæ¯æ¥å¥ã®ã¿ã³ã«ãŒã§éã³ã€ ã¥ããäºã§ã«ããŒã§ãã. ã€ãŸã, äžæ¥äžé»ã®ã¿ã³ã«ãŒãåºãã°, æ¥æ¬ã«ã¯äžæ¥äžã¿ã³ã«ãŒåã®é (ãã³ãå¹ ) ã§ç³æ²¹ãå± ãäºã«ãªã. é£è¡æ©ã§åãã ãã®ãã³ãå¹ ãåºãã®ã¯é£ããäºã ãã. ã ãã, é 延ã倧ãããŠããã³ãå¹ ã倧ãããã ãã¯ãŒã¯ã, ãã®éãšããã®ãååšãã. ãã®è©±ãããåããéã, 転éé床ã¯å€§ããªããŒã¿ãéãã®ã«ãããæéãæ¯é ãã. é 延ã¯å°ããªããŒã¿ãéãã®ã« ãããæéãæ¯é ãã. éã«æž¬å®ããã®ããã«ããã°è¯ããšããäºã«ãªãã ãã.
æ¬èª²é¡ 8.2 以äžã®ãããªåäœãããããã°ã©ã pingpong s.c ãš pingpong c.c ãæžã.
â¢
$ ./pingpong s SZ N ã¯, ã¯ã©ã€ã¢ã³ãããã®æ¥ç¶ãåŸ ã€. æ¥ç¶ããŠããã 1 ãã€ãã®ã¡ãã»ãŒãžãéä¿¡ãã. 以éã¯, SZ ãã€ãã® ã¡ãã»ãŒãžãåãåã£ããããã㟠1 ãã€ãã®ã¡ãã»ãŒãžãéä¿¡ãã, ã N åç¹°ãè¿ã.
â¢
$ ./pingpong c SZ N ã¯, ãµãŒããžæ¥ç¶ã, 1 ãã€ãã®ã¡ãã»ãŒãžãåãåã. 以éã¯, SZ ãã€ãã®ã¡ãã»ãŒãžãéã, ããã㟠1 ã ã€ãã®ã¡ãã»ãŒãžãåä¿¡ãã, ã N åç¹°ãè¿ã. ãã® N åã«ãããæéã枬å®ã, 1 åŸåŸ©ãããã®å¹³åæé tÌ ã èšç®ããŠè¡šç€ºãã. ãããšãšãã«, 転éãã³ãå¹ (N / tÌ) ã衚瀺ãã.
äž¡è ãçµã¿åãããã°, ãããã¯ãŒã¯æ§èœã枬å®ã§ããã ãã. ã¡ãã»ãŒãžãæå°ã®ãšãã®åŸåŸ©æéã¯ã©ãã»ã©ã (N ãå¢ãããŠæž¬å®ããäº). ãããã㪠SZ ã«å¯ŸããŠè»¢éé床ã枬ã, gnuplot ã§å¯èŠåãã. SZ 㯠1 ãã€ããã 10MB
çšåºŠãŸã§, çæ¯çŽæ°çã«å»ã¿ãå ¥ããŠããŒã¿ãåãäº. SZ ãåå倧ãããããšãã®è»¢éé床㯠iperf ãšåããããåº ãŠããã?
ãµãŒãã®æ¬äŒŒã³ãŒãã¯ä»¥äžã®ãããªæã.
... s = accept(ss, . . . ); 1 ãã€ãéã; for (i = 0; i < N; i++) { SZ ãã€ãåãåã; 1 ãã€ãéã; } ããã¯ã¯ã©ã€ã¢ã³ã
... connect(s, . . . ); 1 ãã€ãåãåã; t0 = çŸåšæå»; for (i = 0; i < N; i++) { SZ ãã€ãéã; 1 ãã€ãåãåã; } t1 = çŸåšæå»; 1 åŸåŸ©ãããã®æéãšè»¢éé床ã衚瀺; äžèšã§çŸãããçŸåšæå»ããåŸãæ¹æ³ã«ã€ããŠ. gettimeofday ãšããã·ã¹ãã ã³ãŒã«ãçšãã. äŸã«ãã£ãŠ man ã§èª¿ ã¹ãäº. 以äžã®ãããªé¢æ°ãäœã£ãŠããŸããšè¯ã.
/* çŸåšæå» (åäœ: ç§) ãæµ®åå°æ°ç¹æ°ã§è¿ã */ double current time() { struct timeval tp; gettimeofday(&tp, NULL); return tp.tv sec + tp.tv usec * 1.0E-6; }
4. åºæ¬çãªã€ã³ã¿ãŒãããé»è©±ã®å®æ
æ¬èª²é¡ 8.3 2 ã€ã®ãã¹ãéã§äŒè©±ãã§ãã, åºæ¬çãªã€ã³ã¿ãŒãããé»è©±æ©èœãå®çŸãã. ã€ãŸã, çæ¹ã®ãã¹ãã®ã ã€ã¯ã«åãã£ãŠåããšããçæ¹ã®ã¹ããŒã«ã«é³ã鳎ã. ããã飜ãããŸã§ç¶ããŠãããããããªç©ã§ãã. ãµãŒããšã¯ ã©ã€ã¢ã³ããã©ã®ãããªæé ãå®ã£ãŠããŒã¿ãéãåãã°è¯ãããèããŠ, ããããã®åäœãå®çŸãã.
ãããŸã§ãå¿ é 課é¡ãšãã. åŸã¯äœåã«å¿ããŠãã®é»è©±ã«æ©èœ, æ§èœ, èšèšãã®ä»ã®çºå±ãæœããŠããããã. 以äžã¯, åè£ãšããŠèããŠããããããšããã§ãã.
⢠ç¡é³ç¶æ ã§ãããã¯ãŒã¯ãã»ãšãã©æ¶è²»ããªããããª, ãããã«ããããéä¿¡æ¹æ³
⢠ããäžè¬ã«, é³å£°ãéãããã®, å¹çã®è¯ã笊å·å (é³ããŒã¿ã®è¡šçŸ. å§çž®) ⢠çºçããé³ãå±ããŸã§ã®é 延ãå°ãããã ⢠é³è³ªãäžãã. ãããšããŒã¿ãµã€ãºã®äž¡ç« ⢠å€è éé話ãå¯èœã«ãã (äžäººãåã£ã声ã¯æ®ãå šå¡ã«å±ã) ⢠å€è éé話ã§, é話ãå§ãŸã£ãåŸæ°ããåå è ãåãä»ããããããã«ãã 以éã®å 容ã¯, ãããŸã§è©±ããå 容ãåçŽã«çµã¿åãããã ãã§ã¯ç¡çã§, çºå±çãªå 容ã, æ¬ããã¹ãã§èª¬æããŠã ãªã API ãèªç¿ããå¿ èŠãããç©ããã. é©å®æŒç¿ HP äžã§å 容ãè£è¶³ããªããé²ãã.
G3.
æ å ±: 第 3 éš
第9æ¥ å šæéå®ç¿ãšãã. é ããŠãã人ã¯ãã®æéã§è¿œãã€ã. äœè£ã®ãã人ã¯çºå±èª²é¡ã«åãçµãæéãšããŠäœ¿ã.
第 10 æ¥ å šæéå®ç¿ãšãã. é ããŠãã人ã¯ãã®æéã§è¿œãã€ã. äœè£ã®ãã人ã¯çºå±èª²é¡ã«åãçµãæéãšããŠäœ¿ã.
第 11 æ¥ çºè¡šã®æé. ãã®æ¥ãŸã§ã«èª²é¡ãåãã, ãã®ææãã¹ã©ã€ãã«æžããŠçºè¡šã«ãŸãšããäºãç®æã. åãããœããã®ã㢠ã³ã¹ãã¬ãŒã·ã§ã³ãè¡ãããš. ã¹ã©ã€ããäœãã«ã¯, OpenOï¬ce.org, Microsoft PowerPoint, TEX ãªã©ã®ãœãããçšã ã. 詳现ã«ãŒã«ã¯å®éšæéå ããã³æŒç¿ HP äžã§çºè¡šãã.
第 12 æ¥ çºè¡šã®æé. ãã®æ¥ãŸã§ã«èª²é¡ãåãã, ãã®ææãã¹ã©ã€ãã«æžããŠçºè¡šã«ãŸãšããäºãç®æã. åãããœããã®ã㢠ã³ã¹ãã¬ãŒã·ã§ã³ãè¡ãããš. ã¹ã©ã€ããäœãã«ã¯, OpenOï¬ce.org, Microsoft PowerPoint, TEX ãªã©ã®ãœãããçšã ã. 詳现ã«ãŒã«ã¯å®éšæéå ããã³æŒç¿ HP äžã§çºè¡šãã.