锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 褰?/SPAN>UNIX緋葷粺鍑芥暟鍙戠敓閿欒鏃訛紝閫氬父榪斿洖涓涓礋鍊鹼紝騫朵笖鏁存暟errno琚緗負涓涓彲浠ョ粰鍑洪澶栦俊鎭殑鍊箋備緥濡傦紝open鍑芥暟鎴栬呰繑鍥炰竴涓潪璐熺殑鏂囦歡鎻忚堪絎︼紙褰撲竴鍒囨甯告椂錛夛紝鎴栬呬駭鐢熶竴涓敊璇備竴涓?/SPAN>open鐨勯敊璇兘浜х敓15涓彲鑳界殑errno鍊鹼紝渚嬪鏂囦歡涓嶅瓨鍦紝鏉冮檺闂錛岀瓑絳夈備竴浜涘嚱鏁頒笉榪斿洖璐熷鹼紝鑰屾槸浣跨敤涔犳儻鏂規硶鏉ヨ〃紺洪敊璇備緥濡傦紝澶氭暟鍑芥暟榪斿洖涓涓璞$殑鎸囬拡錛岃岃繑鍥炰竴涓?/SPAN>null錛堢┖錛夋寚閽堟潵琛ㄧず涓涓敊璇?/SPAN> 澶存枃浠?/SPAN><errno.h>瀹氫箟浜嗘爣璇嗙errno鍜?/SPAN>errno鐨勬瘡涓彲鑳界殑甯擱噺鍊箋傝繖涔嬩腑鐨勬瘡涓父閲忓奸兘浠ュ瓧絎?/SPAN>E寮澶淬傚湪UNIX緋葷粺鎵嬪唽絎簩鑺傜殑絎竴欏碉紝鍚嶄負intro(2)鐨勯〉闈腑錛屽悓鏍峰垪鍑轟簡榪欎箣涓墍鏈夌殑閿欒甯擱噺銆備緥濡傦紝濡傛灉errno絳変簬甯擱噺EACCES錛岃繖灝辨樉紺轟簡涓涓潈闄愰敊璇紝姣斿娌℃湁瓚沖鐨勬潈闄愭潵鎵撳紑鎵璇鋒眰鐨勬枃浠躲?/SPAN> 鍦?/SPAN>Linux涓紝閿欒甯擱噺琚垪涓懼湪鎵嬪唽errno(3)涓?/SPAN> POSIX鍜?/SPAN>ISO C鎶?/SPAN>errno鎵╁睍瀹氫箟涓哄彲鍙樼殑鏁村瀷宸﹀箋傚畠鏃㈠彲浠ユ槸涓涓寘鍚簡閿欒浠g爜鐨勬暣鏁幫紝涔熷彲浠ユ槸涓涓嚱鏁幫紝璇ュ嚱鏁拌繑鍥炴寚鍚戦敊璇唬鐮佺殑鎸囬拡銆備互鍓嶇殑瀹氫箟鏄?/SPAN> extern int errno; 鐒惰屽湪涓涓敮鎸佺嚎紼嬬殑鐜涓紝榪涚▼鍦板潃絀洪棿鍦ㄥ涓嚎紼嬩腑鍏變韓錛屽悓鏃舵瘡涓嚎紼嬮兘闇瑕?/SPAN>errno鐨勬湰鍦版嫹璐濇潵闃叉綰跨▼闂翠簰鐩稿獎鍝嶃備緥濡傦紝Linux閫氳繃浠ヤ笅瀹氫箟鏉ユ敮鎸佸綰跨▼璁塊棶errno錛?/SPAN> extern int *_ _errno_location(void); #define errno (*_ _errno_location()) errno鏈変袱鏉¤鍒欍傜涓錛屽鏋滀笉鍙戠敓閿欒錛?/SPAN>errno鐨勫煎喅涓嶄細琚▼搴忔竻闄ゃ傚洜姝わ紝鍙湁鍦ㄥ嚱鏁扮殑榪斿洖鍊艱〃紺洪敊璇彂鐢熸椂錛屾墠闇瑕佹鏌?/SPAN>errno鐨勫箋傜浜岋紝浠諱綍鍑芥暟閮戒笉浼氭妸errno鐨勫艱緗負0錛屽悓鏃跺湪<errno.h>涓篃娌℃湁瀹氫箟浠諱綍甯擱噺鍊間負0銆?/SPAN> 鏍囧噯C涓畾涔変簡涓や釜鍑芥暟鏉ュ府鍔╂墦鍗伴敊璇秷鎭?/SPAN> #include <string.h> char *strerror(int errnum); 榪斿洖鍊鹼細鎸囧悜娑堟伅瀛楃涓茬殑鎸囬拡 璇ュ嚱鏁版妸errno鐨勫吀鍨嬪?/SPAN>errnum鏄犲皠鍒頒竴涓敊璇秷鎭瓧絎︿覆錛屽茍榪斿洖涓涓寚鍚戝瓧絎︿覆鐨勬寚閽堛?/SPAN> perror鍑芥暟鍦ㄦ爣鍑嗛敊璇駭鐢熷茍榪斿洖涓涓敊璇秷鎭紝璇ユ秷鎭熀浜?/SPAN>errno鐨勫綋鍓嶅箋?/SPAN> #include <stdio.h> void perror(const char *msg); 瀹冭緭鍑?/SPAN>msg鎸囧悜鐨勫瓧絎︿覆錛屾帴鐫鏄竴涓垎鍙峰拰涓涓┖鏍鹼紝鐒跺悗鏄笌errno鍊煎搴旂殑閿欒娑堟伅錛屾渶鍚庢槸涓涓柊琛屻?/SPAN> 鍥?/SPAN>1.8灞曠ず浜嗚繖涓や釜鍑芥暟鐨勫簲鐢ㄣ?/SPAN> 濡傛灉璇ョ▼搴忚緙栬瘧涓烘枃浠?/SPAN>a.out錛屾垜浠皢鐪嬪埌 $ ./a.out EACCES: Permission denied ./a.out: No such file or directory 娉ㄦ剰鎴戜滑鎶婄▼搴忓悕瀛?/SPAN>argv[0]浣滀負鍙傛暟浼犻掔粰perror錛?/SPAN>argv[0]鐨勫兼槸./a.out銆傝繖鏄?/SPAN>UNIX緋葷粺鐨勪竴涓爣鍑嗘儻渚嬨傞氳繃榪欐牱鍋氾紝濡傛灉紼嬪簭鏄綔涓虹閬撶殑涓閮ㄥ垎鎵ц錛屽氨鍍忓湪 prog1 < inputfile | prog2 | prog3 > outputfile 鎴戜滑灝辮兘澶熷垎娓呮槸涓変釜紼嬪簭涓槸鍝釜浜х敓浜嗛敊璇秷鎭?BR>
鍥?/SPAN> 1.8 strerror鍜?/SPAN>perror鐨勭ず鑼?BR> 鏈功涓殑鎵鏈夌殑渚嬪瓙閮戒嬌鐢ㄩ檮褰?/SPAN>B涓殑閿欒鍑芥暟錛屾潵浠f浛鐩存帴璋冪敤strerror鎴栬?/SPAN>perror銆傞檮褰曚腑鐨勯敊璇嚱鏁頒嬌鐢ㄤ簡ISO C鐨勫彲鍙樺弬鏁板垪琛紝鍙互鍙敤鍗曚釜C璇彞鏉ュ鐞嗛敊璇儏鍐點?/SPAN> <errno.h>涓畾涔夌殑閿欒鍙互琚垎涓轟袱綾伙細鑷村懡鐨勫拰闈炶嚧鍛界殑銆備竴涓嚧鍛介敊璇槸涓嶈兘澶熸仮澶嶇殑銆傛渶濂界殑鍔炴硶鏄湪鐢ㄦ埛鐨勫睆騫曚笂鎵撳嵃涓鏉¢敊璇秷鎭紝鎴栬呭湪涓涓棩蹇楁枃浠朵腑鍐欏叆閿欒娑堟伅錛屾帴鐫鍦ㄩ鍑恒傚彟涓鏂歸潰錛岄潪鑷村懡閿欒鍦ㄦ煇浜涙椂鍊欒兘澶熸洿寰椾綋鐨勫鐞嗐傚鏁伴潪鑷村懡閿欒鏄嚜鐒剁殑涓存椂閿欒錛屼緥濡傚綋緋葷粺鐨勬椿鍔ㄧ▼搴忚緝灝戞椂錛岋紙緋葷粺錛夎祫婧愮煭緙虹殑閿欒鍙兘灝變笉浼氬彂鐢熴?/SPAN> 璧勬簮鐩稿叧鐨勯潪鑷村懡閿欒鍖呮嫭EAGAIN錛?/SPAN>ENFILE錛?/SPAN>ENOBUFS錛?/SPAN>ENOLCK錛?/SPAN>ENOSPC錛?/SPAN>ENOSR錛?/SPAN>EWOULDBLOCK錛屽綋ENOMEM錛?/SPAN>EBUSH琛ㄧず涓涓叡浜祫婧愭鍦ㄨ浣跨敤鏃訛紝瀹冧滑涔熷彲浠ヨ浣滀負闈炶嚧鍛介敊璇傛煇浜涙椂鍊欙紝褰?/SPAN>EINTR涓柇浜嗕竴涓紦鎱㈢殑緋葷粺璋冪敤鏃訛紝瀹冧篃鍙互琚湅浣滈潪鑷村懡閿欒錛堣瑙?/SPAN>10.5鑺傦級銆?/SPAN> 璧勬簮鐩稿叧鐨勯潪鑷村懡閿欒鐨勫吀鍨嬫仮澶嶅姩浣滃氨鏄歡榪熶竴浼氬効鍐嶈瘯銆傝繖涓妧宸т篃鑳藉簲鐢ㄥ湪鍏跺畠寰幆涓備緥濡傦紝濡傛灉閿欒琛ㄧず緗戠粶榪炴帴娌℃湁宸ヤ綔錛岄偅涔堢▼搴忓彲鑳戒細寤惰繜涓浼氬効鍐嶉噸鏂板緩绔嬭繛鎺ャ備竴浜涚▼搴忎嬌鐢ㄦ寚鏁板闀跨殑綆楁硶錛屾瘡嬈$瓑寰呮洿闀跨殑鏃墮棿銆?/SPAN> 鏈鍚庯紝鐢卞簲鐢ㄧ▼搴忓紑鍙戣呮潵鍐沖畾鍝簺閿欒鏄彲浠ユ仮澶嶇殑銆傚鏋滀竴涓悎鐞嗙殑絳栫暐鑳藉琚敤鏉ユ仮澶嶉敊璇紝閫氳繃閬垮厤寮傚父閫鍑猴紝鎴戜滑灝卞彲浠ュ寮烘垜浠▼搴忕殑鍋ュ.鎬с?/SPAN> 紼嬪簭鏄瓨鍦ㄤ簬紓佺洏涓婄洰褰曚腑鐨勫彲鎵ц鏂囦歡銆?/SPAN>6涓?/SPAN>exec鍑芥暟涓殑浠繪剰涓涓紝閮藉彲浠ュ皢涓涓▼搴忚鍏ュ唴瀛樹腑騫剁敱鍐呮牳鎵ц錛堟劅瑙夎繖鍙ユ病鏈夌炕璇戝ソ錛屽師鍙ユ槸錛?/SPAN>A program is read into memory and is executed by the kernel as a result of one of the six exec functions.錛夈傛垜浠皢鍦?/SPAN>8.10鑺備腑浠嬬粛榪欎簺鍑芥暟銆?/SPAN> 涓涓鍦ㄦ墽琛屼腑鐨勭▼搴忓疄渚嬭縐頒負榪涚▼錛?/SPAN>process錛夛紝璇ヨ瘝璇紙榪涚▼錛夊嚑涔庝細鍑虹幇鍦ㄦ湰涔︿腑鐨勬瘡涓欏點備竴浜涙搷浣滅郴緇熺敤浠誨姟錛?/SPAN>task錛夋潵縐板懠涓涓鍦ㄨ繍琛屼腑鐨勭▼搴忋?/SPAN> UNIX緋葷粺紜繚姣忎竴涓繘紼嬮兘鎷ユ湁涓涓敮涓鐨勬暟瀛楁爣璇嗙錛岀О涓鴻繘紼?/SPAN>ID銆傝繘紼?/SPAN>ID鎬繪槸闈炶礋鏁存暟銆?/SPAN> 鍥?/SPAN>1.6涓殑紼嬪簭鎵撳嵃鍑哄畠鐨勮繘紼?/SPAN>ID銆?/SPAN> 濡傛灉鎴戜滑鎶婄▼搴忕紪璇戞垚a.out騫舵墽琛屽畠錛屾垜浠細鐪嬪埌 $ ./a.out hello world from process ID 851 $ ./a.out hello world from process ID 854 璇ョ▼搴忚繍琛屾椂璋冪敤getpid鍑芥暟鏉ヨ幏寰楄繘紼?/SPAN>ID銆?BR> 鍥?/SPAN> 1.6 鎵撳嵃榪涚▼ID
渚嬪瓙
#include "apue.h"
2
#include <errno.h>
3
4
int
5
main(int argc, char *argv[])
6

{
7
fprintf(stderr, "EACCES: %s\n", strerror(EACCES));
8
errno = ENOENT;
9
perror(argv[0]);
10
exit(0);
11
}閿欒鎭㈠
]]>紼嬪簭
榪涚▼鍜岃繘紼?/SPAN>ID
渚嬪瓙
2
3 int
4 main(void)
5 {
6 printf("hello world from process ID %d\n", getpid());
7 exit(0);
8 }
榪涚▼鎺у埗涓昏浣跨敤涓変釜鍑芥暟錛?/SPAN>fork錛?/SPAN>exec鍜?/SPAN>waitpid銆傦紙exec鍑芥暟鏈?/SPAN>6涓彉浣擄紝鎴戜滑閫氬父鎶婂畠浠粺縐頒負exec鍑芥暟銆傦級
浣跨敤涓涓畝鍗曠殑紼嬪簭錛堝浘1.7錛夋潵灞曠ずUNIX緋葷粺鐨勮繘紼嬫帶鍒剁壒鎬э紝璇ョ▼搴忎粠鏍囧噯杈撳叆璇誨彇鍛戒護騫朵笖鎵ц榪欎簺鍛戒護銆傝繖鏄竴涓被浼?/SPAN>shell紼嬪簭鐨勬湰璐紙緲昏瘧寰椾笉濂斤紝鍘熷彞鏄細This is a bare-bones implementation of a shell-like program.錛夈傚湪榪欎釜30琛岀殑紼嬪簭涓湁璁稿鐗規у煎緱鎬濊冦?/SPAN>
l 浣跨敤鏍囧噯I/O鍑芥暟fgets錛屼竴嬈′粠鏍囧噯杈撳叆涓鍙栦竴琛屻傚綋杈撳叆鏂囦歡緇堟絎︼紙閫氬父鏄?/SPAN>Control-D錛変綔涓轟竴琛岀殑絎竴涓瓧絎︽椂錛?/SPAN>fgets榪斿洖null鎸囬拡錛屽悓鏃剁粓姝㈠驚鐜紝鎺ョ潃緇堟榪涚▼銆傚湪18绔犱腑錛屾垜浠弿榪版墍鏈夌壒孌婄殑緇堢瀛楃錛堟枃浠剁粓姝㈢錛岄鏍煎瓧絎︼紝鏁磋鎿﹂櫎瀛楃絳夌瓑錛夛紝騫朵笖浠嬬粛鎬庢牱鏀瑰彉瀹冧滑銆?/SPAN>
l fgets榪斿洖鐨勬瘡涓琛岄兘緇堟浜庝竴涓崲琛岀鍜岃窡鍦ㄦ崲琛岀鍚庨潰鐨勪竴涓?/SPAN>null瀛楄妭錛屾垜浠嬌鐢ㄦ爣鍑嗙殑C鍑芥暟strlen鏉ヨ綆楀瓧絎︿覆鐨勯暱搴︼紝鎺ョ潃鎶婃崲琛岀鏇挎崲涓轟竴涓?/SPAN>null瀛楄妭銆傝繖鏍峰仛鏄洜涓?/SPAN>execlp鍑芥暟闇瑕佷竴涓互null緇撴潫鐨勫弬鏁幫紝鑰屼笉鏄互鎹㈣絎︾粨鏉熺殑鍙傛暟銆?/SPAN>
l 璋冪敤fork鍑芥暟鏉ュ緩绔嬩竴涓繘紼嬶紝榪欎釜榪涚▼鏄竴涓皟鐢ㄨ呯殑鎷瘋礉銆傛垜浠妸璋冪敤鑰呯О涓虹埗榪涚▼錛屾妸鏂板緩绔嬬殑榪涚▼縐頒負瀛愯繘紼嬨傞偅涔?/SPAN>fork鍑芥暟榪斿洖瀛愯繘紼嬬殑闈炶礋榪涚▼ID緇欑埗榪涚▼錛屽悓鏃惰繑鍥?/SPAN>0緇欏瓙榪涚▼銆傚洜涓?/SPAN>fork鍒涘緩浜嗕竴涓柊榪涚▼錛屾垜浠fork琚皟鐢ㄤ竴嬈″氨榪斿洖涓ゆ錛屼竴嬈¤繑鍥炵粰鐖惰繘紼嬶紝涓嬈¤繑鍥炵粰瀛愯繘紼嬨?/SPAN>
l 鍦ㄥ瓙榪涚▼涓紝璋冪敤execlp鏉ユ墽琛屼粠鏍囧噯杈撳叆璇誨彇鐨勫懡浠ゃ傝繖灝辨妸瀛愯繘紼嬫浛鎹負涓涓柊鐨勭▼搴忔枃浠躲?/SPAN>fork鍑芥暟鍚庤窡exec鍑芥暟鐨勭粍鍚堬紝灝辨槸涓浜涙搷浣滅郴緇熸墍璋撶殑浜х敓涓涓柊榪涚▼銆傦紙緲昏瘧寰椾笉濂斤紝鍘熷彞鏄細This replaces the child process with the new program file. The combination of a fork, followed by an exec, is what some operating systems call spawning a new process.錛夊湪UNIX緋葷粺涓紝榪欎袱閮ㄥ垎琚垎涓轟簡鐙珛鐨勫嚱鏁般傜鍏珷涓皢浼氫粙緇嶆洿澶氳繖鏂歸潰鐨勫唴瀹廣?/SPAN>
l 鍥犱負瀛愯繘紼嬭皟鐢?/SPAN>execlp鏉ユ墽琛屾柊鐨勭▼搴忔枃浠訛紝鐖惰繘紼嬪氨浼氱瓑寰呯洿鍒板瓙榪涚▼緇撴潫銆傝繖浜涘伐浣滅敱waitpid鍑芥暟瀹屾垚銆?/SPAN>waitpid鍑芥暟涓殑pid鍙傛暟浠h〃浜嗗瓙榪涚▼鐨勮繘紼?/SPAN>ID錛岃鍙傛暟鐢ㄦ潵鏍囪瘑鍑洪渶瑕佺瓑寰呯殑榪涚▼銆?/SPAN>waitpid鍑芥暟涔熷彲浠ュ緱鍒板瓙榪涚▼鐨勭粓姝㈢姸鎬併傚湪榪欎釜綆鍗曠▼搴忎腑鐨勭殑status鍙橀噺灝變唬琛ㄤ簡瀛愯繘紼嬬殑緇堟鐘舵侊紝鍦ㄧ▼搴忎腑鎴戜滑娌℃湁浣跨敤榪欎釜鍊鹼紝浣嗘槸鎴戜滑鍙互閫氳繃媯鏌ヨ繖涓兼潵紜畾瀛愯繘紼嬬殑緇堟鐘舵併?/SPAN>
l 榪欎釜紼嬪簭鏈鏍規湰鐨勯檺鍒跺湪浜庢垜浠笉鑳藉儚鎴戜滑鎵鎵ц鐨勫懡浠や紶閫掑弬鏁般備緥濡傦紝涓嶈兘鍒椾婦鐗瑰畾鐨勭洰褰曘傛垜浠彧鍙互鍦ㄥ伐浣滅洰褰曟墽琛?/SPAN>ls鍛戒護銆備負浜嗚兘澶熶紶閫掑弬鏁幫紝鎴戜滑闇瑕佸垎鏋愯緭鍏ヨ錛屾寜鏌愮涔犳儻錛堝彲鑳界殑鎯呭喌鏄嬌鐢ㄧ┖鏍兼垨鑰呭埗琛ㄧ錛夊尯鍒嚭鍙傛暟錛屾帴鐫鎶婃瘡涓涓弬鏁頒綔涓虹嫭绔嬬殑鍙傛暟浼犻掔粰execlp鍑芥暟銆傚敖綆″姝わ紝榪欎釜紼嬪簭浠嶇劧瀵?/SPAN>UNIX緋葷粺榪涚▼鎺у埗鍑芥暟榪涜浜嗘湁鐢ㄨ鏄庛?/SPAN>
榪愯榪欎釜紼嬪簭錛屾垜浠緱鍒頒笅闈㈢殑杈撳嚭銆傛敞鎰忔垜浠殑紼嬪簭鏈変竴涓笉鍚岀殑鎻愮ず絎︼紝浣跨敤鐧懼垎鍙鳳紙%錛夋潵鍖哄埆浜?/SPAN>shell鐨勬彁紺虹銆?/SPAN>
$ ./a.out
% date
Sun Aug 1 03:04:47 EDT 2004
% who
sar :0 Jul 26 22:54
sar pts/0 Jul 26 22:54 (:0)
sar pts/1 Jul 26 22:54 (:0)
sar pts/2 Jul 26 22:54 (:0)
% pwd
/home/sar/bk/apue/2e
% ls
Makefile
a.out
shell1.c
% ^D 杈撳叆鏂囦歡緇堟絎?/SPAN>
$ shell鎻愮ず絎?BR>
鍥?/SPAN> 1.7 浠庢爣鍑嗚緭鍏ヨ鍙栧懡浠ゅ茍鎵ц瀹冧滑
絎﹀彿^D鐢ㄤ唬琛ㄤ竴涓帶鍒跺瓧絎︺傛帶鍒跺瓧絎︽槸涓縐嶇壒孌婄殑鐨勫瓧絎︼紝鍙互閫氳繃鍚屾椂鎸変笅鎺у埗閿紙鍦ㄤ綘鐨勮綆楁満涓婇氬父涓?/SPAN>Control閿垨Ctrl閿級鍜屽彟涓涓敭鏉ヤ駭鐢熷畠銆?/SPAN>Control-D錛屾垨鑰呰^D錛屾槸榛樿鐨勬枃浠剁粓姝㈢銆傚湪18绔犺璁虹粓姝?/SPAN>I/O鐨勬椂鍊欎細鐪嬪埌鏇村鐨勬帶鍒跺瓧絎︺?/SPAN>
閫氬父錛屼竴涓繘紼嬪彧鏈変竴涓嚎紼嬶紙鍘熷彞鏄細Usually, a process has only one thread of control one set of machine instructions executing at a time.涓嶇煡閬撴庝箞緲昏瘧錛岀暀緇欏ぇ铏劇炕璇戯級銆傚綋鏈夊浜庝竴涓殑綰跨▼鏉ユ帶鍒朵笉鍚岄儴鍒嗘椂錛屼竴浜涢棶棰樺氨鍙樺緱寰堝鏄撹В鍐熾傚彟澶栵紝澶氱嚎紼嬪湪澶氬鐞嗗櫒緋葷粺涓婅兘澶熻幏寰楀鉤琛℃э紙鍙堜竴鍙ョ炕璇戝緱涓嶇埥錛?/SPAN>Additionally, multiple threads of control can exploit the parallelism possible on multiprocessor systems.錛夈?/SPAN>
涓涓繘紼嬩腑鐨勬墍鏈夌嚎紼嬪叡浜悓涓涓湴鍧絀洪棿錛屾枃浠舵弿榪扮錛屾爤鍜岃繘紼嬬浉鍏崇殑灞炴с傚洜涓鴻兘澶熻闂浉鍚岀殑鍐呭瓨錛岀嚎紼嬪繀欏誨悓姝ヨ闂畠浠嚜宸辯殑鍏變韓鏁版嵁錛屼互閬垮厤鍐茬獊銆?/SPAN>
鍜岃繘紼嬩竴鏍鳳紝綰跨▼鐢辯嚎紼?/SPAN>ID鏍囪瘑銆傚敖綆″姝わ紝綰跨▼ID瀵逛簬榪涚▼ID鏉ヨ鏄湰鍦扮殑銆備篃灝辨槸璇達紝涓涓繘紼嬩腑鐨勭嚎紼?/SPAN>ID鍦ㄥ彟涓涓繘紼嬩腑鏄病鏈夋剰涔夌殑銆傚綋鎴戜滑鍦ㄨ繘紼嬩腑鎿嶄綔綰跨▼鐨勬椂鍊欙紝浣跨敤綰跨▼ID鏉ユ寚鍑虹壒瀹氱殑綰跨▼銆?/SPAN>
鎺у埗綰跨▼鐨勫嚱鏁板拰鎺у埗榪涚▼鐨勫嚱鏁版槸涓鏍風殑銆傚湪榪涚▼妯″瀷寤虹珛寰堜箙浠ュ悗錛岀嚎紼嬫墠琚姞鍏ュ埌UNIX緋葷粺涓紝鐒惰岋紝綰跨▼妯″瀷鍜岃繘紼嬫ā鍨嬩箣闂存湁涓浜涘鏉傜殑浜や簰錛屽湪12绔犲皢浼氱湅鍒拌繖浜涖?/SPAN>
鏂囦歡鎻忚堪絎﹂氬父鏄皬鐨勪笖闈炶礋鐨勬暣鏁幫紝鍐呮牳浣跨敤瀹冩潵鏍囪瘑鑳借鐗瑰畾榪涚▼璁塊棶鐨勬枃浠躲傚彧瑕佹墦寮鎴栧垱寤轟簡鏂版枃浠訛紝鍐呮牳灝辮繑鍥炰竴涓枃浠舵弿榪扮錛屾垜浠嬌鐢ㄥ畠鏉ヨ鍐欐枃浠躲?/SPAN>
閫氬父錛屼竴鏃︿竴涓柊鐨勭▼搴忚繍琛岋紝鎵鏈夌殑shell灝變負鍏舵墦寮涓変釜鎻忚堪絎︼細鏍囧噯杈撳叆錛屾爣鍑嗚緭鍑哄拰鏍囧噯閿欒銆傚鏋滀笉鍋氫粈涔堢壒鍒殑浜嬶紝灝卞儚涓嬮潰榪欐牱涓鏉$畝鍗曠殑鍛戒護錛?/SPAN>
ls
閭d箞鎵鏈夌殑涓変釜鎻忚堪絎﹂兘榪炴帴鍒扮粓绔傚鏁?/SPAN>shell鎻愪緵浜嗕竴縐嶆柟寮忔潵閲嶅畾鍚戜笁涓弿榪扮鍒版枃浠躲備緥濡傦細
ls > file.list
鎵цls鍛戒護錛屽茍鎶婂畠鐨勬爣鍑嗚緭鍑洪噸瀹氬悜鍒板悕涓?/SPAN>file.list鐨勬枃浠躲?/SPAN>
鏃犵紦鍐?/SPAN>I/O鐢?/SPAN>open鍑芥暟錛?/SPAN>read鍑芥暟錛?/SPAN>write鍑芥暟錛?/SPAN>lseek鍑芥暟鍜?/SPAN>close鍑芥暟鎻愪緵銆傝繖浜涘嚱鏁伴兘闇瑕佹枃浠舵弿榪扮鎵嶈兘宸ヤ綔銆?/SPAN>
濡傛灉鎴戜滑鎯寵浠庢爣鍑嗚緭鍏ヨ鍙栵紝浠庢爣鍑嗚緭鍑哄啓鍏ワ紝閭d箞鍥?/SPAN>1.4涓殑紼嬪簭灝卞彲浠ユ嫹璐?/SPAN>UNIX緋葷粺涓殑甯歌鏂囦歡銆?/SPAN>
apue.h涓寘鍚殑<unistd.h>澶存枃浠訛紝浠ュ強涓や釜甯擱噺STDIN_FILENO鍜?/SPAN>STDOUT_FILENO閮芥槸POSIX鏍囧噯錛堜笅绔犱腑灝嗕細璇︾粏浠嬬粛錛夌殑涓閮ㄥ垎銆傚湪璇ュご鏂囦歡涓湁璁稿UNIX緋葷粺鏈嶅姟鐨勫嚱鏁扮殑鍘熷瀷錛屼緥濡傛垜浠皟鐢ㄧ殑read鍜?/SPAN>write鍑芥暟銆?/SPAN>
甯擱噺STDIN_FILENO鍜?/SPAN>STDOUT_FILENO鍦?/SPAN><unistd.h>涓畾涔夛紝瀹冧滑鎸囧畾浜嗘爣鍑嗚緭鍏ュ拰鏍囧噯杈撳嚭鐨勬枃浠舵弿榪扮銆傞氬父錛?/SPAN>STDIN_FILENO鍜?/SPAN>STDOUT_FILENO鐨勫煎垎鍒負0鍜?/SPAN>1錛岀劧鑰岋紝鍦ㄤ究鎼鴻澶囧紑鍙戜腑錛屾垜浠嬌鐢ㄦ柊鐨勫悕瀛楁潵琛ㄧず瀹冧滑銆?/SPAN>
3.9鑺備腑浼氳緇嗚璁?/SPAN>BUFFSIZE甯擱噺錛屽皢鐪嬪埌瀹冪殑涓嶅悓鍊兼槸濡備綍褰卞搷涓涓▼搴忕殑鏁堢巼鐨勩傚敖綆″姝わ紝鏃犺BUFFSIZE涓轟綍鍊鹼紝鍥?/SPAN>1.4涓殑紼嬪簭閮戒細鎷瘋礉甯歌鏂囦歡銆?/SPAN>
read鍑芥暟榪斿洖璇誨彇鐨勫瓧鑺傛暟錛岃繖涓艱鐢ㄦ潵浣滀負瑕佸啓鍏ョ殑瀛楄妭鏁般傚綋鍒拌揪杈撳叆鏂囦歡鐨勬湯灝炬椂錛?/SPAN>read鍑芥暟榪斿洖0錛岀▼搴忓仠姝€傚鏋滆鍙栨椂鍙戠敓閿欒錛?/SPAN>read鍑芥暟榪斿洖-1銆傚鏁扮郴緇熷嚱鏁板湪鍙戠敓閿欒鏃惰繑鍥?/SPAN>1銆?/SPAN>
濡傛灉鍍忎笅闈㈣繖鏍鋒寜鏍囧噯鍚嶅瓧錛?/SPAN>a.out錛夌紪璇戞垜浠殑紼嬪簭
./a.out > data
鏍囧噯杈撳叆灝辨槸緇堢錛岃屾爣鍑嗚緭鍑鴻閲嶅畾鍚戝埌鏂囦歡data錛屽悓鏃舵爣鍑嗛敊璇篃鏄粓绔傚鏋滆繖涓緭鍑烘枃浠朵笉瀛樺湪錛岄偅涔?/SPAN>shell灝嗛粯璁ゅ垱寤哄畠銆傞櫎闈炶緭鍏ョ粓姝㈢錛堥氬父鏄?/SPAN>Control-D錛夛紝紼嬪簭灝嗘嫹璐濊緭鍏ュ埌鏍囧噯杈撳嚭銆?/SPAN>
濡傛灉鎴戜滑榪愯
./a.out < infile > outfile
閭d箞鏂囦歡finfile灝嗚鎷瘋礉鍒版枃浠?/SPAN>outfile銆?BR>

鍥?/SPAN> 1.4 鍒楀嚭鐩綍涓殑鎵鏈夋枃浠?/SPAN>
絎笁绔犱腑灝嗚緇嗘弿榪版棤緙撳啿I/O鍑芥暟銆?SPAN lang=EN-US>
鏍囧噯I/O鍑芥暟涓烘棤緙撳啿I/O鍑芥暟鎻愪緵浜嗙紦鍐叉帴鍙c備嬌鐢ㄦ爣鍑?/SPAN>I/O鍙互闃叉鍦ㄩ夋嫨鍚堥傜紦鍐插ぇ灝忕殑鏃跺欏嚭鐜伴敊璇紝渚嬪鍥?/SPAN>1.4涓殑BUFFSIZE甯擱噺銆備嬌鐢ㄦ爣鍑?/SPAN>I/O鍑芥暟鐨勫彟涓涓紭鐐規槸鍏朵粎浠呭鐞嗚緭鍏ョ殑琛岋紙UNIX搴旂敤紼嬪簭涓殑閫氬父浜嬩歡錛夈備緥濡?/SPAN>fgets鍑芥暟錛屽畠璇誨彇鏁翠釜涓琛屻傚彟涓鏂歸潰錛?/SPAN>read鍑芥暟璇誨彇鎸囧畾鐨勫瓧鑺傛暟銆傚氨鍍忓皢5.4鑺備腑鐪嬪埌鐨勯偅鏍鳳紝鏍囧噯I/O搴撴彁渚涚殑鍑芥暟璁╂垜浠兘澶熸帶鍒剁紦鍐茬殑浣跨敤椋庢牸銆?/SPAN>
鏈甯歌鐨勬爣鍑?/SPAN>I/O鍑芥暟灝辨槸printf銆傚鏋滃湪紼嬪簭涓皟鐢?/SPAN>printf鍑芥暟錛屽彲浠ラ氳繃鍖呭惈apue.h鏉ュ寘鍚?/SPAN><stdio.h>澶存枃浠訛紝<stdio.h>澶存枃浠朵腑鍖呭惈浜嗘墍鏈夋爣鍑?/SPAN>I/O鍑芥暟鐨勫師鍨嬨?/SPAN>
鍥?/SPAN>1.5涓殑紼嬪簭浼氬湪5.8鑺備腑璇︾粏璁ㄨ銆傝紼嬪簭鍍忓墠闈㈢殑紼嬪簭閭f牱璋冪敤read浣?/SPAN>write鍑芥暟銆傝紼嬪簭鎷瘋礉鏍囧噯杈撳叆鍒版爣鍑嗚緭鍑猴紝鍚屾椂涔熻兘澶熸嫹璐濅換浣曞父瑙勬枃浠躲?/SPAN>
getc鍑芥暟涓嬈¤鍙栦竴涓瓧絎︼紝璇ュ瓧絎﹁putc鍑芥暟鍐欏叆銆傚湪鏈鍚庝竴涓緭鍏ョ殑瀛楄妭琚鍙栧悗錛?/SPAN>getc榪斿洖甯擱噺EOF錛?/SPAN><stdio.h>涓畾涔夛級銆傛爣鍑?/SPAN>I/O甯擱噺stdin鍜?/SPAN>stdout涔熷湪<stdio.h>澶存枃浠朵腑瀹氫箟錛屽畠浠垎鍒〃紺烘爣鍑嗚緭鍏ュ拰鏍囧噯杈撳嚭銆?BR>

鍥?/SPAN> 1.5 浣跨敤鏍囧噯I/O鎷瘋礉鏍囨敞杈撳叆鍒版爣娉ㄨ緭鍑?/SPAN>
UNIX鏂囦歡緋葷粺鏄寜灞傛瀹夋帓鐩綍鍜屾枃浠剁殑銆傝搗濮嬬洰褰曡縐頒負鏍癸紙root錛夛紝瀹冪殑鍚嶅瓧鏄竴涓瓧絎?/SPAN> / 銆?/SPAN>
鐩綍鏄竴涓寘鍚洰褰曢」鐨勬枃浠躲傚湪閫昏緫涓婏紝鍙互璁や負姣忎釜鐩綍欏歸兘鍖呭惈涓涓枃浠跺悕錛屽悓鏃惰繕鍖呭惈璇存槑璇ユ枃浠跺睘鎬х殑淇℃伅銆傛枃浠跺睘鎬ф槸錛氭枃浠剁被鍨嬶紝鏂囦歡闀垮害錛屾枃浠舵墍鏈夎咃紝鏂囦歡鐨勮鍙潈錛堜緥濡傦紝鍏朵粬鐢ㄦ埛鑳藉惁鑳借闂鏂囦歡錛?/SPAN>,鏂囦歡鏈鍚庣殑淇敼鏃墮棿絳夈?/SPAN>start鍜?/SPAN>fstat鍑芥暟榪斿洖涓涓寘鍚墍鏈夋枃浠跺睘鎬х殑淇℃伅緇撴瀯銆傜4绔犲皢璇︾粏璇存槑鏂囦歡鐨勫悇縐嶅睘鎬с?/SPAN>
鐩綍欏逛簨瀹炰笂瀛樺偍鍦ㄧ鐩樹笂錛屽姝ゅ尯鍒簬鐩綍欏圭殑閫昏緫鐪嬫硶銆傚鏁?/SPAN>UNIX鏂囦歡緋葷粺鐨勫疄鐜板茍涓嶅湪鐩綍欏逛腑瀛樺偍璇ョ洰褰曢」鑷繁鐨勫睘鎬э紝鍥犱負褰撴枃浠舵湁寰堝紜繛鎺ョ殑鏃跺欙紝寰堥毦鍋氬埌鍚屾淇濆瓨璇ユ枃浠剁殑灞炴с傚綋鎴戜滑鍦ㄧ鍥涚珷璁ㄨ紜繛鎺ュ悗錛屽姝ゅ皢鏈夋竻鏅扮殑璁よ瘑銆?/SPAN>
鐩綍涓殑鍚勪釜鍚嶅瓧琚О涓烘枃浠跺悕銆傚敮涓涓や釜涓嶈兘鍑虹幇鍦ㄦ枃浠跺悕涓殑瀛楃鏄弽鏂滄潬錛?/SPAN>/錛夊拰絀哄瓧絎︼紙null錛夈傚弽鏂滄潬鐢ㄦ潵鎶婃枃浠跺悕浠庤礬寰勫悕涓尯鍒嚭鏉ワ紝絀哄瓧絎︾敤鏉ョ粨鏉熶竴涓礬寰勫悕銆傚洜姝わ紝鎶婃枃浠跺悕涓彲鐢ㄧ殑瀛楃闄愬埗鍦ㄤ竴鑸墦鍗板瓧絎︾殑瀛愰泦涓槸涓涓ソ涔犳儻銆傦紙鎴戜滑闄愬埗鍙敤瀛楃榪樺洜涓猴紝濡傛灉鎴戜滑鍦ㄦ枃浠跺悕涓嬌鐢ㄤ簡shell鐨勭壒孌婂瓧絎︼紝鎴戜滑灝卞繀欏諱嬌鐢?/SPAN>shell鐨勫紩鍙鋒満鍒舵潵寮曠敤鏂囦歡鍚嶏紝榪欏皢瀵艱嚧闂澶嶆潅鍖栥傦級
琚弽鏂滄潌鍖哄垎寮錛屽茍涓斿彲閫夌殑浠ュ弽鏂滄潌寮澶翠竴涓垨澶氫釜鏂囦歡鍚嶇殑搴忓垪錛屾瀯鎴愪簡璺緞鍚嶃備互鍙嶆枩鏉嗚搗澶寸殑璺緞鍚嶇О涓虹粷瀵硅礬寰勶紱鍚﹀垯錛岀О涓虹浉瀵硅礬寰勩傜浉瀵硅礬寰勬秹鍙婂埌鐨勬枃浠剁浉瀵逛簬褰撳墠鐩綍銆傛枃浠剁郴緇熺殑鏍癸紙/錛夌殑鍚嶅瓧鏄粷瀵硅礬寰勭殑鐗逛緥錛屽畠娌℃湁鏂囦歡鍚嶃?/SPAN>
鍒楀嚭涓涓洰褰曚腑鎵鏈夋枃浠剁殑鍚嶅瓧騫朵笉鍥伴毦銆傚浘1.3灞曠ず浜?/SPAN>ls錛?/SPAN>1錛夊懡浠ゅ疄鐜扮殑鏈川銆?/SPAN>
ls錛?/SPAN>1錛夌鍙鋒槸UNIX緋葷粺鎵嬪唽鐨勪竴鑸〃紺烘柟娉曪紝鐢ㄦ潵寮曠敤鐗瑰畾鐨勯」銆傚畠寮曠敤絎竴灝忚妭涓殑ls欏廣傚皬鑺傚彿閫氬父鐢ㄦ暟瀛?/SPAN>1鍒?/SPAN>8琛ㄧず錛屽悓鏃舵瘡涓灝忚妭涓殑鎵鏈夐」閮芥槸鎸夊瓧姣嶉『搴忔帓鍒楃殑銆傛湰涔︿腑錛屾垜浠亣瀹氫綘鏈変竴浠戒綘鐨?/SPAN>UNIX緋葷粺鎵嬪唽鐨勬嫹璐濄?/SPAN>
鍘嗗彶涓婏紝UNIX緋葷粺鎶婃墍鏈?/SPAN>8涓皬鑺傞泦涓湪UNIX紼嬪簭鍛樻墜鍐?/SPAN>涓傞殢鐫欏墊暟鐨勫鍔狅紝瓚嬪娍鍙樹負鎶婂悇鑺傚畨鎺掑湪涓嶅悓鐨勬墜鍐屼腑錛氫緥濡備竴浠戒負鐢ㄦ埛鍑嗗鐨勶紝涓浠戒負紼嬪簭鍛樺噯澶囩殑錛屼竴浠戒負緋葷粺綆$悊鍛樺噯澶囩殑銆?/SPAN>
涓浜?/SPAN>UNIX緋葷粺浣跨敤澶у啓瀛楁瘝鍦ㄥ凡鏈夌殑灝忚妭涓繘涓姝ョ粏鍒嗘墜鍐屻備婦渚嬫潵璇達紝鎵鏈?/SPAN>AT&T涓殑鏍囧噯杈撳嚭/杈撳叆(I/O)鍑芥暟鍦?/SPAN>3S灝忚妭涓紝姣斿fopen錛?/SPAN>3S錛夈傚叾瀹冪郴緇熺敤瀛楁瘝鏉ヤ唬鏇挎暟瀛楄〃紺哄皬鑺傚彿錛屼緥濡傜敤C琛ㄧず鍛戒護銆?/SPAN>
浠婂ぉ錛岃澶氭墜鍐岀敤鐢靛瓙褰㈠紡榪涜鍙戣銆傚鏋滀綘鐨勬墜鍐屾槸鑱旀満鎵嬪唽錛屾煡鐪嬫墜鍐屼腑ls鍛戒護鐨勬柟寮忔垨璁告槸榪欐牱鐨勶細
man 1 ls
鎴栬?/SPAN>
man 鈥?/SPAN>s1 ls
鍥?/SPAN>1.3鏄竴涓▼搴忥紝鍏舵墦鍗板嚭鐩綍涓悇涓枃浠剁殑鍚嶅瓧銆傚鏋滄簮鐮佹枃浠剁殑鍚嶅瓧鏄?/SPAN>myls.c錛屾垜浠寜鐓т互涓嬫柟寮忔妸瀹冪紪璇戞垚榛樿鐨勫彲鎵ц鏂囦歡a.out錛?/SPAN>
cc myls.c
cc錛?/SPAN>1錛夋槸鏃╂湡鐨?/SPAN>C緙栬瘧鍣ㄣ傚湪鏀寔GNU C緙栬瘧鍣ㄧ殑緋葷粺涓婏紝gcc錛?/SPAN>1錛夋槸C緙栬瘧鍣ㄣ傝繖閲岋紝cc閫氬父涓?/SPAN>gcc鐩歌繛鎺ワ紙璇戣呮敞錛氬師鍙ユ槸Here錛?/SPAN>cc is often linked to gcc銆傛病緲昏瘧濂斤紝鏈熷緟鍝綅澶ц櫨鎸囨暀錛夈?/SPAN>
涓浜涜緭鍑轟緥瀛愬涓嬶細
$ ./a.out /dev
.
..
console
tty
mem
kmem
null
mouse
stdin
stdout
stderr
zero
鐪佺暐鍏跺畠鏈樉紺虹殑琛?/SPAN>
cdrom
$ ./a.out /var/spool/cron
can鈥檛 open /var/spool/cron: Permission denied
$ ./a.out .dev/tty
can鈥檛 open /dev/tty: Not a directory
鍍忎笂闈㈤偅鏍鳳紝鎴戜滑浼氫互濡備笅鐨勬柟寮忓睍紺鴻繍琛岀殑鍛戒護鍜岃鍛戒護鐨勮緭鍑猴細杈撳叆鐨勫瓧絎︿互綰㈣壊鍔犵矖瀛椾綋鏄劇ず錛岃岀▼搴忕殑杈撳嚭浠?SPAN style="COLOR: red">綰㈣壊瀛椾綋鏄劇ず銆傚鏋滃浜庤緭鍑洪渶瑕佸姞娉ㄩ噴錛屾垜浠細浠?I style="mso-bidi-font-style: normal">綰㈣壊鏂滀綋瀛椾綋鏄劇ず娉ㄩ噴銆傝緭鍏ヨ鍓嶉潰鐨勭編鍏冪鍙鋒槸shell鎵撳嵃鍑烘潵鐨勬彁紺虹銆傛垜浠緇堜嬌鐢ㄧ編鍏冪鍙蜂綔涓?/SPAN>shell鎻愮ず絎︺?/SPAN>
娉ㄦ剰鏂囦歡鍚嶅茍娌℃湁鎸夌収瀛楁瘝欏哄簭杈撳嚭銆傝?/SPAN>ls鍛戒護浼氬湪鎵撳嵃鍚嶅瓧涔嬪墠鐜板鍚嶅瓧鎺掑簭銆?/SPAN>
鍦ㄨ繖涓?/SPAN>20琛岀殑紼嬪簭涓紝璁稿緇嗚妭搴斿綋琚冭檻錛?/SPAN>
l 棣栧厛錛屾垜浠寘鍚簡涓涓垜浠嚜宸辯紪鍐欑殑澶存枃浠訛細apue.h銆傚嚑涔庢湰涔︿腑鎵鏈夌殑紼嬪簭閮藉寘鍚繖涓ご鏂囦歡銆傝澶存枃浠跺寘鍚簡涓浜涙爣鍑嗙郴緇熷ご鏂囦歡錛屽茍涓斿畾涔変簡鏈功渚嬪瓙涓嬌鐢ㄧ殑鏁板煎父閲忓拰鍑芥暟鍘熷瀷銆傝澶存枃浠剁殑娓呭崟鍦ㄩ檮褰?/SPAN>B涓?/SPAN>
l main鍑芥暟鐨勫0鏄庝嬌鐢ㄤ簡ISO C鏍囧噯鐨勯鏍箋傦紙涓嬬珷涓垜浠細璋堝埌鏇村ISO C鏍囧噯銆傦級
l 鎴戜滑浠庡懡浠よ寰楀埌鍙傛暟argv[1]浣滀負瀵硅薄鐩綍鐨勫悕瀛椼傚湪絎竷绔狅紝鎴戜滑灝嗙湅鍒?/SPAN>main鍑芥暟鏄庢牱琚皟鐢ㄧ殑錛屽悓鏃剁湅鍒板懡浠よ鍙傛暟鍜岀幆澧冨彉閲忔槸濡備綍浼犻掔粰紼嬪簭鐨勩?/SPAN>
l 鐢變簬涓嶅悓UNIX緋葷粺鐨勭洰褰曢」鏍煎紡涓嶅敖鐩稿悓錛屾垜浠嬌鐢?/SPAN>opendir鍑芥暟錛?/SPAN>readdir鍑芥暟鍜?/SPAN>closedir鍑芥暟鏉ユ搷浣滅洰褰曘?/SPAN>
l opendir鍑芥暟榪斿洖DIR緇撴瀯鐨勬寚閽堬紝騫朵紶閫掕鎸囬拡緇?/SPAN>readdir鍑芥暟銆備笉蹇呭叧蹇?/SPAN>DIR緇撴瀯鐨勭粏鑺傘傛帴鐫鍦ㄥ驚鐜腑璋冪敤readdir鍑芥暟錛岀敤鏉ヨ鍙栨瘡涓洰褰曢」銆?/SPAN>readdir鍑芥暟榪斿洖涓涓?/SPAN>dirent緇撴瀯鐨勬寚閽堬紝鍚﹀垯錛屽湪鏃犵洰褰曢」鍙鏃惰繑鍥?/SPAN>null鎸囬拡銆傛垜浠彧闇瑕佹鏌?/SPAN>dirent緇撴瀯涓瘡涓洰褰曢」鐨勫悕瀛楋紙d_name錛夈備嬌鐢ㄨ繖涓悕瀛楋紝鎴戜滑灝卞彲浠ヨ皟鐢?/SPAN>stat鍑芥暟錛?/SPAN>4.2鑺備粙緇嶏級鏉ョ‘瀹氭枃浠剁殑鎵鏈夊睘鎬с?/SPAN>
l 鎴戜滑璋冪敤涓や釜鎴戜滑鑷繁緙栧啓鐨勫嚱鏁版潵澶勭悊閿欒錛?/SPAN>err_sys鍜?/SPAN>err_quit銆備粠鍥?/SPAN>1.3鐨勮緭鍑轟腑鎴戜滑鍙互鐪嬪埌錛?/SPAN>err_sys鍑芥暟鎵撳嵃鍑轟簡涓板瘜鐨勪俊鎭潵鎻忚堪閬囧埌鐨勯敊璇紙鈥?/SPAN>Permission denied鈥濆拰鈥?/SPAN>Not a directory鈥濓級銆傞檮褰?/SPAN>B涓垪鍑轟簡榪欎袱涓敊璇鐞嗗嚱鏁般傚湪1.7鑺備腑鎴戜滑灝嗘洿璇︾粏鐨勮皥鍒伴敊璇鐞嗐?/SPAN>
l 褰撶▼搴忓畬鎴愭椂錛屼互鍙傛暟0璋冪敤exit鍑芥暟銆?/SPAN>exit鍑芥暟緇撴潫涓涓▼搴忋傞氬父錛屽弬鏁?/SPAN>0鎰忓懗鑰呮甯哥粨鏉燂紝鑰?/SPAN>1鍒?/SPAN>255涔嬮棿鐨勫弬鏁版剰鍛崇潃鍙戠敓浜嗛敊璇?/SPAN>8.5鑺備腑錛屾垜浠皢浼氬涔犱竴涓▼搴忥紙姣斿shell鎴栬呮垜浠嚜宸卞啓鐨勭▼搴忥級濡備綍鑾峰緱鍙︿竴涓鍦ㄦ墽琛屼腑鐨勭▼搴忕殑exit鐘舵併?/SPAN>

鍥?/SPAN> 1.3 鍒椾婦鍑轟竴涓洰褰曚腑鐨勬墍鏈夋枃浠?/SPAN>
姣忎釜榪涚▼閮芥湁涓涓伐浣滅洰褰曪紝鏈夋椂鍙堢О涓哄綋鍓嶅伐浣滅洰褰曘傛墍鏈夌殑鐩稿璺緞閮戒粠璇ョ洰褰曞紑濮嬨備竴涓繘紼嬭兘澶熺敤chdir鍑芥暟鏀瑰彉瀹冪殑宸ヤ綔鐩綍銆?/SPAN>
渚嬪錛岀浉瀵硅礬寰?/SPAN>doc/memo/joe鎸囧嚭memo鐩綍涓殑鏂囦歡鎴栫洰褰?/SPAN>joe錛?/SPAN>memo鐩綍鍙堝湪doc鐩綍涓紝鑰?/SPAN>doc涓瀹氭槸宸ヤ綔鐩綍涓嬬殑涓涓洰褰曘傛煡鐪嬭繖涓浉瀵硅礬寰勶紝鎴戜滑鐭ラ亾doc鍜?/SPAN>memo涓瀹氭槸鐩綍錛屼絾鏄垜浠笉鑳界‘瀹?/SPAN>joe鏄竴涓枃浠惰繕鏄竴涓洰褰曘傝礬寰?/SPAN>/usr/lib/lint鏄竴涓粷瀵硅礬寰勶紝瀹冩寚鍑轟簡lib鐩綍涓殑鏂囦歡鎴栫洰褰?/SPAN>lint錛?/SPAN>lib鐩綍鍦?/SPAN>usr鐩綍涓紝鑰?/SPAN>usr鐩綍鍙堝湪鏍癸紙root錛夌洰褰曚腑銆?/SPAN>
褰撴垜浠櫥褰曟椂錛屽伐浣滅洰褰曡璁懼畾涓烘垜浠殑璧峰鐩綍銆傛垜浠殑璧峰鐩綍鏄粠瀵嗙爜鏂囦歡錛?/SPAN>1.3鑺備粙緇嶏級涓垜浠殑鐧誨綍欏瑰緱鍒?/SPAN>鐨勩?/SPAN>
褰撴垜浠櫥褰?/SPAN>UNIX緋葷粺鏃訛紝鎴戜滑杈撳叆鎴戜滑鐨勭櫥褰曞悕錛岀劧鍚庢槸鍙d護銆傜郴緇熸帴鐫灝卞湪瀵嗙爜鏂囦歡涓壂鎻忔垜浠殑鐧誨綍鍚嶏紝瀵嗙爜鏂囦歡閫氬父浣嶄簬/etc/passwd銆傚鏋滄垜浠湪瀵嗙爜鏂囦歡涓煡鐪嬫垜浠殑鐧誨綍欏癸紝灝嗕細鐪嬪埌瀹冩槸鐢?/SPAN>7涓啋鍙峰垎紱葷殑閮ㄥ垎緇勬垚鐨勶細鐧誨綍鍚嶏紝鍔犲瘑鍙d護錛岀敤鎴風殑鏁板瓧ID錛?/SPAN>205錛夛紝緇勭殑鏁板瓧ID錛?/SPAN>105錛夛紝涓涓敞閲婃錛岃搗濮嬬洰褰曪紙/home/sar錛夛紝榪樻湁shell錛堟敞錛氫互鍚庣洿鎺ョ敤shell浠h〃瑙i噴鍣級紼嬪簭錛?/SPAN>/bin/ksh錛夈?/SPAN>
sar:x:205:105:Stephen Rago:/home/sar:/bin/ksh
鎵鏈夋柊鐨勭郴緇熷凡緇忔妸鍔犲瘑鍙d護縐誨埌鍙︿竴涓枃浠朵腑浜嗐傚湪絎叚绔狅紝鎴戜滑灝嗘煡鐪嬭繖浜涙枃浠跺拰涓浜涘嚱鏁版潵璁塊棶浠栦滑銆?/SPAN>
涓鏃︽垜浠櫥褰曞悗錛屼竴浜涚壒瀹氱殑緋葷粺淇℃伅灝辨樉紺哄嚭鏉ワ紝鎺ョ潃鎴戜滑灝卞彲浠ュ湪shell涓緭鍏ュ懡浠ゃ傦紙涓浜涚郴緇熷湪浣犵櫥褰曞悗錛屼細鍚姩紿楀彛綆$悊紼嬪簭錛屼絾鏄竴鑸潵璇達紝浣犱細浠ュ湪鍏朵腑涓涓獥鍙d腑榪愯shell鏉ョ粨鏉熴傦級shell鏄竴涓懡浠よ瑙i噴鍣紝瀹冭鍏ョ敤鎴風殑杈撳叆騫朵笖鎵ц鍛戒護銆傜敤鎴烽氬父浠庣粓绔紙涓涓氦浜掑紡鐨?/SPAN>shell錛夛紝鎴栬呮煇浜涙椂鍊欎粠涓涓枃浠訛紙琚О涓?/SPAN>shell鏁欐湰錛夊悜shell杈撳叆銆傞氬父浣跨敤鐨?/SPAN>shell鎬葷粨鍦ㄥ浘1.2涓?/SPAN>
|
鍚嶅瓧 |
璺緞 |
FreeBSD |
Linux |
Mac OS X 10.3 |
Solaris 9 |
|
Bourne shell |
/bin/sh |
* |
link to bash |
Link to bash |
* |
|
Bourne-again shell |
/bin/bash |
Optional |
* |
* |
* |
|
C shell |
/bin/csh |
link to tcsh |
Link to tcsh |
link to tcsh |
* |
|
Korn shell |
/bin/ksh |
|
|
|
* |
|
TENEX C shell |
/bin |
* |
* |
* |
* |
鍥?/SPAN> 1.2 UNIX緋葷粺甯哥敤shell
緋葷粺浠庡瘑鐮佹枃浠朵腑鐧誨綍欏圭殑鏈鍚庝竴涓瓧孌典腑浜嗚В鍒板簲璇ユ墽琛屽摢涓涓?/SPAN>shell銆?/SPAN>
Bourne shell錛岀敱Steve Bourne鍦ㄨ礉灝斿疄楠屽寮鍙戯紝鑷?/SPAN>Version 7浠ユ潵涓鐩村湪浣跨敤錛屽茍涓旇鐩墠鍑犱箮鎵鏈夌殑UNIX緋葷粺鎵鏀寔銆?/SPAN>The control-flow constructs of the Bourne shell are reminiscent of Algol 68銆?/SPAN>
C shell鏄敱Bill Joy鍦ㄤ集鍏嬪埄寮鍙戠殑錛岃鎵鏈夌殑BSD鍙戣鐗堟敮鎸併傚彟澶栵紝C shell涔熻AT&T鐨?/SPAN>System V/386 Release 3.2鍜?/SPAN>System V Release 4錛?/SPAN>SVR4錛夋墍鏀寔銆傦紙鎴戜滑灝嗗湪涓嬩竴绔犱腑鏇磋緇嗕粙緇嶈繖涓や釜鐗堟湰UNIX緋葷粺鐨勪笉鍚屻傦級C shell鏋勫緩浜庣鍏増鐨?/SPAN>shell錛岃屼笉鏄?/SPAN>Bourne shell銆傚畠鐨?/SPAN>control flow鏇村儚C璇█錛屽畠涔熸敮鎸佷竴浜涘叾瀹冪殑錛?/SPAN>Bourne shell鎵涓嶆敮鎸佺殑鐗規э細job control, a history mechanism, and command line editing銆?/SPAN>
Korn shell琚涓烘槸瀵?/SPAN>Bourne shell鐨勬垚鍔熻咃紝瀹冩渶鍏堣SVR4鎵鏀寔銆?/SPAN>Korn shell鏄敱David Korn鍦ㄨ礉灝斿疄楠屽寮鍙戠殑錛岃繍琛屼簬澶у鏁扮殑UNIX緋葷粺涓娿傚湪SVR4涔嬪墠錛?/SPAN>Korn shell鏄竴涓敹璐圭粍浠訛紝鎵浠ュ畠騫舵病鏈夊叾瀹冧袱涓?/SPAN>shell嫻佽銆傚畠涔熷拰Bourne shell鍏煎錛屽悓鏃跺寘鍚簡浣垮緱C shell嫻佽鐨勯偅浜涚壒鎬э細job control, command line editing, and so on銆?/SPAN>
Bourne-again shell鏄敱鎵鏈?/SPAN>Linux緋葷粺鎵鏀寔鐨?/SPAN>GNU shell銆傚畠琚璁′負涓?/SPAN>POSIX涓鑷達紝鍚屾椂浠嶇劧涓?/SPAN>Bourne shell鍏煎銆傚畠鍚屾椂鏀寔C shell鍜?/SPAN>Korn shell鐨勭壒鎬с?/SPAN>
TENEX C shell鏄?/SPAN>C shell鐨勫寮虹増鏈傚畠浠?/SPAN>TENEX鎿嶄綔緋葷粺錛?/SPAN>1972騫村紑鍙戜簬Bolt Beranek鍜?/SPAN>Newman錛夊熺敤浜嗚澶氱壒鎬э紝姣斿鍛戒護琛ュ叏銆?/SPAN>TENEX C shell瀵逛簬C shell澧炲姞浜嗚澶氱壒鎬э紝鍏墮氬父琚綔涓?/SPAN>C shell鐨勬浛浠e搧銆?/SPAN>
Linux浣跨敤Bourne-again shell浣滀負榛樿shell銆備簨瀹炰笂錛?/SPAN>/bin/sh灝辨槸/bin/bash鐨勮繛鎺ャ?/SPAN>FreeBSD鍜?/SPAN>Mac OS X鐨勯粯璁?/SPAN>shell鏄?/SPAN>TENEN C shell錛岀敱浜?/SPAN>C shell鐨勭▼搴忚璁¤璦琚箍娉涚殑璁や負寰堥毦浣跨敤錛屾墍鏈変粬浠嬌鐢?/SPAN>Bourne shell浣滀負浠栦滑鐨勭郴緇燂紙administrative錛?/SPAN>shell鑴氭湰銆?/SPAN>Solaris鏈夌戶鎵夸簬BSD鍜?/SPAN>System V鐨勶紝鍦ㄥ浘1.2涓墍鍒楀嚭鐨勬墍鏈?/SPAN>shell銆傚ぇ澶氭暟榪欎簺shell鐨勫厤璐歸儴鍒嗚兘澶熷湪鍥犵壒緗戜笂寰楀埌銆?/SPAN>
閫氳繃鏈功錛屾垜浠皢灞曠ず浜掑姩鐨?/SPAN>shell渚嬪瓙鏉ユ墽琛屾垜浠墍寮鍙戠殑紼嬪簭銆傝繖浜涗緥瀛愪嬌鐢?/SPAN>Bourne shell錛?/SPAN>Korn shell鍜?/SPAN>Bourne-again shell鐨勫叡鍚岀壒鎬с?/SPAN>
涓ユ牸鐨勬潵璇達紝鎿嶄綔緋葷粺琚畾涔変負鎿嶆帶璁$畻鏈虹‖浠跺拰涓虹▼搴忔彁渚涜繍琛岀幆澧冪殑杞歡銆備竴鑸潵璇達紝鎴戜滑縐版敼杞歡涓哄唴鏍革紙kernel錛夛紝鍥犱負鍏剁浉瀵硅緝灝忓茍灞呬簬榪愯鐜鐨勬牳蹇冦傚浘1.1灞曠ず浜?/SPAN>UNIX緋葷粺鐨勬灦鏋勩?/SPAN>

鍥?/SPAN> 1.1 UNIX鎿嶄綔緋葷粺鐨勭粨鏋?/SPAN>
鍐呮牳鐨勬帴鍙f槸涓涓蔣浠跺眰錛岃縐頒負緋葷粺璋冪敤銆?/SPAN>system calls銆戯紙鍥?/SPAN>1.1涓槾褰遍儴鍒嗭級銆傚父鐢ㄧ殑鍑芥暟搴撳氨琚瀯寤哄湪緋葷粺璋冪敤鎺ュ彛涔嬩笂錛屼絾鏄簲鐢ㄧ▼搴忓彲浠ヤ換鎰忓湴璋冪敤浠栦滑浜岃呫傦紙鎴戜滑灝嗗湪1.11鑺傛洿澶氱殑浠嬬粛緋葷粺璋冪敤鍜屽父鐢ㄥ嚱鏁板簱銆傦級瑙i噴鍣紙shell錛夋槸涓涓壒孌婄殑搴旂敤紼嬪簭錛屽叾鐢ㄦ潵涓哄叾瀹冪▼搴忕殑榪愯鎻愪緵鎺ュ彛銆?BR> 鏇翠竴鑸潵璇達紝涓涓搷浣滅郴緇熷氨鏄唴鏍稿拰鎵鏈夊叾瀹冧嬌寰楄綆楁満鏄撶敤騫舵湁涓х殑杞歡鐨勭粍鍚堛傝繖浜涘叾瀹冪殑杞歡鍖呮嫭緋葷粺宸ュ叿錛屽簲鐢ㄧ▼搴忥紝瑙i噴鍣紙shell錛夛紝甯哥敤鍑芥暟搴擄紝絳夌瓑銆?BR> 涓句緥鏉ヨ錛?/SPAN>Linux灝辨槸琚?/SPAN>GNU鎿嶄綔緋葷粺浣跨敤鐨勫唴鏍搞備竴浜涗漢縐版涓?/SPAN>GNU/Linux鎿嶄綔緋葷粺錛岀劧鑰屽叾閫氬父鐨勮綆縐頒負Linux銆傚敖綆¤繖縐嶇О娉曚弗鏍兼潵璇村茍涓嶆紜紝鐒惰岃繖縐嶇О娉曞嵈鏇村鏄撶悊瑙o紝璧嬩簣浜嗚瘝緇勬搷浣滅郴緇熷弻閲嶅惈涔夈傦紙鍙︿竴涓紭鐐規槸榪欐牱鏇寸畝媧併傦級
鎵鏈夋搷浣滅郴緇熶負紼嬪簭鐨勮繍琛屾彁渚涙湇鍔°傚吀鍨嬬殑鏈嶅姟鍖呮嫭鎵ц涓涓柊鐨勭▼搴忥紝鎵撳紑鏂囦歡錛岄槄璇繪枃浠訛紝鐢寵鍐呭瓨錛岃幏寰楀綋鍓嶆椂闂達紝絳夌瓑銆傛湰鏂囬泦涓簬鎻忚堪涓嶅悓鐗堟湰UNIX鎿嶄綔緋葷粺鎻愪緵鐨勬湇鍔°?/SPAN>
浠ヤ弗鏍肩殑姝ヨ繘鏂瑰紡鎻忚堪UNIX緋葷粺錛屼笉瀵逛換浣?SPAN class=GramE>鏈涔?/SPAN>榪囩殑璇嶆眹榪涜瓚呭墠寮曠敤鍑犱箮鏄笉鍙兘鐨勶紙鎴栬涔熸槸涔忓懗鐨勶級銆傛湰绔犱粠涓涓▼搴忓憳鐨勮搴﹀UNIX緋葷粺榪涜蹇熸祻瑙堛傚茍瀵逛功涓紩鐢ㄧ殑涓浜涙湳璇拰姒傚康榪涜綆瑕佺殑璇存槑騫剁粰鍑哄疄渚嬨傚湪浠ュ悗鍚勭珷涓紝灝嗗榪欎簺姒傚康浣滄洿璇︾粏鐨勮鏄庛傚浜庝笉鐔熸倝UNIX鐨勭▼搴忚璁′漢鍛橈紝鏈功綆瑕佷粙緇嶄簡UNIX鎻愪緵鐨勫悇縐嶆湇鍔°?/SPAN>