¡iͦW¡j¯«©_¼Æ¦r¡BÅ]³N¼Æ¦r¡BÅ]³N¸¹½X
¡i»¡©ú¡jÅ]³N¼Æ¦r¦WºÙÅ¥¨Ó¦ü¥G³Õ¤jºë²`¡A¨ä¹ê«o¬OÓ«Ü¥¹êªºªF¦è¡A¥¦©Ò°O¿ýªº¸ê®Æ¦³¨â¶µ¡A¨ä¤@¬O¥i°õ¦æÀɪº«¬ºA¡C¬Ý©xÀ³¸Ó¤F¸Ñ
UNIX ªº°õ¦æÀɦ³¨âºØ¡]©Mªv·P«_ªº´µ´µ¤@¼Ë¡^¡A¤@¬O¤G¶i¦ìÀÉ¡A³o¬O¥i¥Hª½±µ°õ¦æªº¡A¥t¤@ºØ¬O©R¥OÀÉ¡]script¡^¡A¥¦n¸g¥Ñ shell ¸ÑĶ«á¤~¯à°õ¦æªº¡CÅ]³N¼Æ¦rªº²Ä¤@¶µ¥\¯à«K¬O»¡©ú³oÓ¥i°õ¦æªºÀɮ׬OÄݩ󨺤@Ãþ¡C¦pªG¬O©R¥OÀÉ¡A«h¥¦ªºÅ]³N¼Æ¦r¬O¥Ñ "#!" ¶}©l¡A«á±±µµÛ¤@Ó¦r¦ê¡A¦r¦êªº¤º®e¬O¸Ñͦ¹©R¥OÀɪºµ{¦¡¤§¸ô®|¦W¡C°²Y¬O¤G¶i¦ìÀÉ¡A«hÅ]¼Æ¼Æ¦r°O¿ýªº¬O¸Óµ{¦¡¤§¥»¤å¸`°Ï¯à§_¤À¨Éµ¹¦hÓ³B²zµ{§Ç¡CÅ]³N¼Æ¦r©Ò°O¿ýªº²Ä¤GºØ¸ê®Æ¬O¥i°õ¦æÀÉ©Òn°õ¦æªº¥Øªº¾÷ºØ¡]
target machine¡^¬°¦ó¡H±z¤]³\·|·Q³o²ª½¬O¼o¸Ü¹À¡I¦b³o¥x¾÷¾¹¤W½sĶªºµ{¦¡¤£¦b³oùذõ¦æ¡AÁÙ·|¦b¨ºùØ¡H³oºØ»¡ªk´NÅã±o±z¦³¤@¨Ç...¡I¬O³o¼Ëªº¡A¦³¤@ºØ½s͵{¦¡¥s°µ¸ó¾÷ºØ½s͵{¦¡¡]cross-compilers¡^¡A¥¦¯à°÷¦b¥Ò¾÷ºØ½sĶ¥i¦b¤A¾÷ºØ°õ¦æªº¤G¶i¦ì½X¡A¦p¦¹Å]³N¼Æ¦r©Ò°O¿ýªº¸ê°T´N¦³¥Î°Õ¡C±z¥i¥H°µ¤@Ó¹êÅç¡A§â¦b XENIX ¤W²£¥Íªº¤G¶i¦ìÀÉ¡A®³¨ì USL ªº SVR4.2 ¨Ó°õ¦æ¡A³o®É¨t²Î·|§i¶D±z¥¦¤£¯à°õ¦æ XENIX ªº¤G¶i¦ìÀÉ¡A°£«D±z¦w¸Ë¤F XENIX ¬Û®e®M¥ó¡]XENIX compatibility packages¡^¡CSVR4.2 ´N¬O¾aÀˬdÅ]³N¼Æ¦r¨Ó»{©w³oÓ¤G¶i¦ì½X¬O¨Ó¦Û XENIX¡C¡iͦW¡j¥Dn³]³Æ
¡i»¡©ú¡j«ü¦b¶i¦æ¿é¥X¿é¤J®É³]³ÆÀɩҹïÀ³ªº³]³ÆÅX°Êµ{¦¡¡]
device driver¡^¡C¡i°Ñ¦Ò¡j
device driver¡C¡iͦW¡j±j¨îÂê
¡i»¡©ú¡j
UNIX ©Ò´£¨ÑªºÂê©w¼Ò¦¡¤§¤@¡C¸T¤î«D¨ó¦P§@·~¡]non cooperative¡^ªº³B²zµ{§Ç¨ú¥Î³QÂê©wªº¸ê®Æ¡C±j¨îÂê»P¿é¥X¿é¤J¦¸¨t²Îµ²¦X¡A·í¤@ÓÀɮשΰO¿ý¥H±j¨îªº¤è¦¡¤WÂê®É¡A©Ò¦³¹HIÂê©w¤è¦¡ªºÅª¼g§@·~³£·|³Q®Ö¤ß¥D°ÊÀÁ¸mª½¨ìÂê©w¸Ñ°£¡C¥Ñ©ó¤WÂê»P¸ÑÂꪺ°Ê§@³£¤£¶·¸g¥Ñ³B²zµ{§Ç¥s¥Î fcntl() ©Î lockf() ªºµ{§Ç¡A©Ò¥H¤SºÙ¬°·tÂê¡]implicit locking¡^¡C¡i°Ñ¦Ò¡j
advisory locking¡C¡iͦW¡jµL
¡i»¡©ú¡j³o¬O¤@ºØ¥Ñ
DEC °w¹ï°ª³t«×¡B¤j¶qÀx¦s¯à¤Oªº¶gÃä³]³Æ©Ò³]p¥X¨Óªº¿é¥X¤J¶×¬y±Æ¡A¦P®É¤]¥i¥H³Q UNIBUS ©Ò¤ä´©À³¥Î¡C¡iͦW¡j°T®§
¡i»¡©ú¡j©Ò¿×ªº¡u°T®§¡v¬O«ü¤@¨Ç¤Ö¶qªº¸ê®Æ¡]¨Ò¦p
512 Ӧ줸²Õ¡^¡C¥¦¯à¥Ñ³B²zµ{§Ç¡]process¡^²£¥Í¡A¦Ó«á°e¨ì¤@ÓºÙ¬°¡u°T®§¦î¦C¡v¡]message queue¡^ªº¦a¤èÀx¦s¡C¥Ñ©ó¦¹¦î¦C¬O«Å§i¬°¥þ¨t²Î¦@¥Îªº¡A¦]¦¹¥un¯à²Å¦X¨ä¦s¨ú±ø¥óªÌ¡A«K¥i¥HÅý¥ô¦ó³B²zµ{§Ç¨ÓŪ¨úùرªº°T®§¡C¡iͦW¡j¸U¥Î¢A®í¦r¤¸
¡i»¡©ú¡j¦b
UNIX ¨t²Î¤¤¦³¬Y¨Ç³q¥Îªº¦r¤¸¾Ö¦³¯S®íªº·N¸q¡A¥¦¯à¥Î¨Ó¨ú¥N©Î¬O³B²z¤@¯ëªº¦r¤¸¡A¦³®É¤]¥iºÙ¬° wild cards¡A±`¨£ªº¦³¡G¸U¥Î¦r¤¸ |
¥Î ³~ |
* |
¹ïÀ³©óÀɮפ¤¥ô¦ó¦r¦ê©Î¬OªÅ¦r¤¸¡C |
? |
¹ïÀ³©óÀɮפ¤¥ô¦ó³æ¤@¦r¤¸¡C |
[ccc] |
¹ïÀ³©ó¥ô¦ó¤¤¬A¸¹¤ºªº¦r¤¸¡C |
& |
±N«ü¥O¥H¹õ«áªº¤è¦¡°õ¦æ¡C |
\ |
¸õ²æ²Å¸¹¥Î¥H¸Ñ°£¯S®í¦r¤¸ªº¯S®í·N¸q¡C |
; |
¤À¹j²Å¸¹¥Î¥H°Ï¤À©R¥O¦æ¤¤¦hÓ«ü¥O¡C |
> |
±N«ü¥Oªº¿é¥X¬y«¾É¤JÀɮפ¤¡C |
< |
±N«ü¥Oªº¿é¤J¬y«ü©w¬°¥ÑÀɮפ¤¸ü¤J¡C |
>> |
±N«ü¥Oªº¿é¥X¬y¥[¦b¤@Ó¤v¦s¦b¤§Àɮתº«á±¡C |
| |
«Ø¥ß¤@ÓºÞ½u¨Ï¤@Ó«ü¥Oªº¿é¥X¬°¥t¤@«ü¥Oªº¿é¤J¡C |
$ |
Bourne Shell ªº´£¥Ü²Å¸¹¡A¦P®É¤]¬O shell »y¨¥ªº¦ì¸m°Ñ¼Æ¡]position parameters¡^¡C |
# |
µù¸Ñ |
&& |
AND¡C |
|| |
OR¡C |
'...' |
³æ¤Þ¸¹¥i±N¤Þ¸¹¤º¤¤ªÅ®æ©Î¬O¯S®í·N¸qªº¦r¤¸ÂàÅܬ°¤@¯ëªº·N¸q¡C |
"..." |
Âù¤Þ¸¹¥i±N¤Þ¸¹¤º¤¤ªÅ®æ©Î¬O¯S®í·N¸qªº¦r¤¸°£¤F $ ¸¹¤Î ` ¸¹¥H¥~ÂàÅܬ°¤@¯ëªº·N¸q¡C |
>&n |
±N¿é¥X¼g¨ìÀÉ®×´yzµü¡] file descriptor¡^¬° n ªºÀÉ®× |
<&n |
±N쥻¥ÑÁä½L©Ò²£¥Íªº¿é¤J§ï¬°±qÀÉ®×´yzµü¬O n ªºÀÉŪ¨ú¡C |
>&- |
Ãö³¬¼Ð·Ç¿é¥XÀÉ¡C |
<&- |
Ãö³¬¼Ð·Ç¿é¤JÀÉ¡C |
¡i°Ñ¦Ò¡j
file descriptor¡C¡iͦW¡j¦¸n³]³Æ
¡i»¡©ú¡j¡u¦¸n³]³Æ¡v´N¬O«ü¹ê»Úªº¿é¥X¿é¤J³]³Æ¥»¨¡C
¡i°Ñ¦Ò¡j
major device, device driver, device number¡CMNLS (Multi-National Language Supplement)
¡iͦW¡j¦h°ê»y¨¥¤ä´©µ{¦¡®w
¡i»¡©ú¡j¦h°ê»y¨¥¤ä´©µ{¦¡®w¬°
AT&T ©Ò±À¥Xªº¤@²Õµ{¦¡®w¡A¥Î¨ÓÀ±¸É¥H ANSI C µo®i°ê»Ú©Ê³nÅé¤Wªº¯Ê³´¡C¥Ø«e³Ì·sªº¦h°ê»y¨¥¤ä´©µ{¦¡®w¤§ª©¥»¬° 4.2 ª©¡C¦h°ê»y¨¥¤ä´©µ{¦¡®w 4.2 ¬O»ù¦b UNIX SVR4.2 ¤§¤W¡M¥i¨Ï UNIX ¨t²Î¨ã¦³µo®i°ê»Ú¤Æ³nÅ骺¯à¤O¡A¨ä¬[ºc¦p¤U¹Ï¡G¦h°ê»y¨¥¤ä´©µ{¦¡®w´£¨Ñ¦p¤Uªº¥\¯à¡G
1. ¤ä´© EUC¡]Extended UNIX Code¡^¤º½X¥H¾AÀ³¤£¦P¦a°Ï¤£¦P»y¨¥ªº¤º½X¡C
2. ¨ã³Æ³B²z¼e¦r¤¸ªº¯à¤O¡C
3. ©w¸q¤F libw ¨ç¦¡À]¡A°w¹ï¦ì¤¸²Õ©Ò§Î¦¨ªº¦r¤¸°µ¯S®í³B²z¡C
4. ´£¨Ñ³]©w°Ï°ì©Ê±MÄÝ¥\¯àÅܼƪº¨ç¦¡¡A¦p setlocale()¡C
5. ¦h°ê»y¨¥¤ä«ùµ{¦¡®w¥i¨Ì LC_MESSAGES Àɪº³]©w¡A¥H¨t²Î©Ò¦b°Ï°ì©Ò³q¥Îªº¤è¦¡¨ÓÅã¥Ü¦X¥G·í¦a»y¨¥ºD¨Òªº°T®§¡C¨Ò¦p¡G¦bµØ¤å¦a°Ï®É¶¡¤§Åã¥Ü¬O¨Ì¦~¡B¤ë¡B¤éªº¦¸§Ç¡A»P¦è¤èªÀ·|¤£¦P¡C
6. ¥H STREAMS ¬°°ò¦«·s¼¶¼g¤@¤Á¿é¥X¿é¤J¤¶±¡C¨Ï¦U¶µ¶gÃä³]³Æªº¥\¯à¨ã¦³¸û¤jªº¼u©Ê¡C¦]¦¹¦b¶i¦æ°ê»Ú¤Æªº¤u§@®É¡A¥i©ö©ó¥[¤J·sªº¿é¥X¿é¤J¼Ò²Õ¡C
¡i°Ñ¦Ò¡jSTREAMS¡C
MOTIS (Message-Oriented Text Interchange System)
¡iͦW¡jµL
¡i»¡©ú¡jÀ³¥Î¼hªº³q°T¨ó©w¡]protocol¡^¡C¥Î©ó¹q¤l¶l¥ó¶Ç»¼¡AÃþ¦ü©ó CCITT ªº
X400 «ØÄ³®Ñ¡C
¡i°Ñ¦Ò¡jprotocol, CCITT, X.400¡C
¡iͦW¡j¦h¤u¾¹
¡i»¡©ú¡j¦b UNIX ¨t²Î¤¤¡A¡u¦h¤u¾¹¡vÄÝ©ó¤@ºØ¡uµêÀÀÅX°Êµ{¦¡¡v¡]pseudo driver¡^¡A¥¦¤¹³\²³¦h¥Î¤á³B²zµ{§Çªº¸ê®Æ¬y¡]streams¡^ ³s¨ì³æ¤@ªºÅX°Êµ{¦¡¡]driver¡^¡A©Î¬O¦hÓÅX°Êµ{¦¡³s¨ì³æ¤@¥Î¤áªº³B²zµ{§Ç¡C
¡i°Ñ¦Ò¡jpseudo driver¡C
¡iͦW¡j¦h¤u¨t²Î
¡i»¡©ú¡j©Ò¿×ªº¡u¦h¤u¨t²Î¡v¬O«ü¤@Ó¨t²Î¤¹³\¦hÓµ{¦¡¦P®ÉÀx¦s¦b°O¾ÐÅ餺¡AµM«á§Q¥Î§@·~¨t²Îªº¯S®íºÞ²zµ{¦¡±N CPU ªº®É¶¡¾A·íªº¤À°tµ¹¨CÓµ{¦¡¨Ï¥Î¡C
¡iͦW¡j¦h½u³B²z
¡i»¡©ú¡j·í¤@Ó³B²zµ{§Ç±N¨ä³¡¥÷ªºµ{¦¡¦P®É°õ¦æ®É¡A¨C¤@³¡¥÷«KºÙ¬°¬O¤@Ó thread¡A³B²zµ{§Ç¤¤©Ò¦³¸ê®Æ³£¥i³Q¥ô¦óªº thread ¦@¥Î¡AÁöµM¨C¤@Ó thread ¤º³£¦³¦Û¤vªº°ïÅ|¡A¦Û¤vªºµ{¦¡p¼Æ¾¹¡]program counter¡^©M°Ï°ìÅܼÆ(local variables)¡A¦ý¬O³B²zµ{§Ç¥»¨¦³´£¨Ñ«OÅ@ªº¤èªk¡A©Ò¥H¥ô¦óªº thread ¥i¥H¨Ï¥Îªº thread ªº°ïÅ|¦Ó³y¦¨¤Ñ¤U¤j¶Ã¡A©Ò¥Hµ{¦¡³]p®v¥²¶·¯S§O¤p¤ß³B²z¡C¦b UNIX ¤W¡A·Qn³B²z¥t¥~¤@Ó¥ô°È©¹©¹«Kl¥Í¡]fork¡^¤F¥t¤@Ó³B²zµ{§Ç¡A¦ý¬O¹ï®Ö¤ß¦Ó¨¥¡Al¥Í¬O¤@ӫܽÆÂøªº¨BÆJ¡A°£¤Fn¦b³B²zµ{§Çªí (process table) ¤º¥[¤J·sªº°O¿ý¥~¡AÁÙn¦³·sªº¨Ï¥ÎªÌ°Ï°ì¡AÁöµM¤j¦h¼Æªº¨t²Î´£¨Ñ¤F" n¼g®É¤~«þ¨©(copy-on-write) " ªº¤èªk¡A¦ý®Ö¤ß¤´±o§ó§ï¦b¤À¶ªí¡]page table¡^¤º©Ò¦³¬ÛÃöªº¤À¶¡]page¡^°O¿ý¡]¨Ò¦p counter µ¥)¡A¦Ó¥B©¹©¹³B²zµ{§Çl¥Í¤F¥t¤@Ó³B²zµ{§Ç¡A¥u¬On¥Î¨Ó©I¥s execv() ¨Ó°õ¦æ¬YÓ«ü¥O½}¤F¡A¦p¦¹¨Ï®Ö¤ß«·s¦h°µ¤F¤@¦¸«Ø¥ß·s³B²zµ{§Çªº¤u§@¡C©Ml¥Í¤ñ¸û¤U¡Athread §¹¥þ¤£n®Ö¤ß°µ¥H¤Wªº¤u§@¡A³q±`±Ò°Ê¤@Ó·sªº³B²zµ{§Çn¤ñ²£¥Í¤@Ó·sªº thread n¦h°õ¦æ¤Q¿ªº®Ö¤ß«ü¥O¡A¦]¦¹ thread ¤S³QºÙ¬° Light Weight Process (LWP¡^¡C
¡iͦW¡j¦h¥Î¤á¨t²Î
¡i»¡©ú¡j©Ò¿×ªº¡u¦h¥Î¤á¨t²Î¡v¬O«ü¤@Ó¨t²Î¯à³s±µ¦h³¡²×ºÝ¾÷¡A¦Ó¥B¥\¯à¿W¥ß¡C¥i¨Ñ¤@Ó¥H¤Wªº¥Î¤á¨Ó¦P®É¨Ï¥Î¦¹®M¨t²Î¡AÅý¨Ï¥ÎªÌ¦³³æ¿W¾Ö¦³¸Ópºâ¾÷ªº·Pı¡C