锘??xml version="1.0" encoding="utf-8" standalone="yes"?>在线成人av,国产精品高潮在线,国产乱理伦片在线观看夜一区http://www.shnenglu.com/xieshuo/category/20531.htmlYou will never walk alone!zh-cnSun, 21 Jul 2013 14:34:27 GMTSun, 21 Jul 2013 14:34:27 GMT60LTZ鐪嬩功涔婣PUE14http://www.shnenglu.com/xieshuo/archive/2013/06/07/200852.html Torres TorresFri, 07 Jun 2013 10:52:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/06/07/200852.htmlhttp://www.shnenglu.com/xieshuo/comments/200852.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/06/07/200852.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200852.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200852.html

榪欎釜鏄疢uxd涓鐩寸敤鐨勪笢瑗?br />鐩稿綋浜庝竴涓弻鍚慞IPE
Process A open ptm寰楀埌fdm錛岀劧鍚巉ork鍑簆rocess B錛宲rocess B open pts寰楀埌fds錛岀劧鍚庡皢0,1,2閮絛up鍒癴ds涓?br />閭d箞fds灝卞彉鎴愪簡(jiǎn)process B鐨勬帶鍒剁粓绔?br />鍚庨潰鍐峱rocess B涓仛鏍囧噯IO鎿嶄綔鐨勬椂鍊欏氨浼?xì)鍍廝IPE鐩存帴褰卞搷鍒癴dm
緇堢琛岃紼嬪湪pts涔嬩笂

娌′粈涔堢壒鍒璁板綍鐨勶紝鍦ㄧ綉涓妔earch浜?jiǎn)涓嬪Q岃創(chuàng)涓摼鎺ワ紝閲岄潰浼?xì)浠嬀l嶄竴浜涘熀鏈蹇?
http://www.cnblogs.com/Anker/archive/2012/12/25/2832568.html



Torres 2013-06-07 18:52 鍙戣〃璇勮
]]>
LTZ鐪嬩功涔婣PUE13http://www.shnenglu.com/xieshuo/archive/2013/06/07/200842.html Torres TorresFri, 07 Jun 2013 06:40:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/06/07/200842.htmlhttp://www.shnenglu.com/xieshuo/comments/200842.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/06/07/200842.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200842.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200842.html緇堢IO
姣忎釜緇堢閮芥湁杈撳叆杈撳嚭闃熷垪
闃熷垪閮芥湁闀垮害錛屽鏋滆緭鍏ヨ秴榪囪緭鍏ラ槦鍒桵AX_INPUT闀垮害錛屽ぇ澶氭暟unix緋葷粺浼?xì)鍥炴槕謸嶉搩鏉ュ鐞嗐?br />浣嗘槸瀵逛簬杈撳嚭闃熷垪鏉ヨ錛岃櫧鐒惰緭鍑洪槦鍒椾篃鏈夐暱搴︼紝浣嗘槸涓鏃﹀啓涓嶈繘鍘葷殑鏃跺欙紝鍐欒繘紼嬩細(xì)suspend鎺?br />鐩磋嚦鏈夌┖闂茬┖闂?/p>

緇堢琛岃紼?terminal line discipline
浼?xì)甯繖鍋氳鑼冨鐞?/p>

緇堢璁懼灞炴?->termios

struct termios {
 tcflag_t c_iflag;
 tcflag_t c_oflag;
 tcflag_t c_cflag;
 tcflag_t c_lflag;
 cc_t c_line;
 cc_t c_cc[NCCS];
};

local flag褰卞搷椹卞姩紼嬪簭鍜岀敤鎴蜂箣闂寸殑鎺ュ彛
Android涓妕cflag_t->
typedef unsigned int tcflag_t;

cc_t
typedef unsigned char cc_t;

control flag涓緢澶氶夐」鏍囧織閮芥槸鐢ㄥ嚑浣嶆爣璇嗙劧鍚庣敤鎴栨潵鍋氶夋嫨

isatty鐨勫疄鐜幫紝鍊熷姪tcgetattr鐨勫嚭閿欐満鍒訛紝鎴愬姛榪斿洖0錛涘惁鍒欒繑鍥?1錛屽甫涓奅NOTTY

int
isatty (int  fd)
{
  struct termios term;

  return tcgetattr (fd, &term) == 0;
}

Anyway錛岀粓绔疘O寰堝鏉?..



Torres 2013-06-07 14:40 鍙戣〃璇勮
]]>
LTZ鐪嬩功涔婣PUE12http://www.shnenglu.com/xieshuo/archive/2013/06/06/200830.html Torres TorresThu, 06 Jun 2013 09:22:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/06/06/200830.htmlhttp://www.shnenglu.com/xieshuo/comments/200830.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/06/06/200830.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200830.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200830.htmlIPC

棣栧厛璁插埌鐨勬槸PIPE錛岃繖涓茍涓嶉檶鐢燂紝鐩鎬簰閫氫俊鐨凱rocess蹇呴』鍏鋒湁鍏崇郴錛屼竴鑸槸鍚岀埗浜茬殑
鐒跺悗璁插埌浜?jiǎn)鍗忓悓杩浗E?br />鍩烘湰鏄鏈変竴涓繘紼嬩笓闂ㄧ敤鏉ユ帴鏀惰緭鍏ワ紝鐒跺悗澶勭悊錛岀劧鍚庤繑鍥炵粨鏋?br />榪欎釜灝卞彲浠ョ敤PIPE鏉ュ疄鐜?/p>

鍒涘緩涓や釜PIPE錛屼竴涓敤浜庤緭鍏ョ粰鍗忓悓榪涚▼錛屽彟澶栦竴涓敤浜庢帴鏀跺崗鍚岃繘紼嬬殑杈撳嚭
fork涔嬪悗鍦ㄥ瓙榪涚▼涓皢鏍囧噯杈撳叆杈撳嚭閮絛up鍒扮閬撲笂

鑰屽崗鍚岃繘紼嬬殑鍐欐硶鍙互姣旇緝common錛屽彧鐢ㄥ叧蹇?jī)鏍囧噯杈撳叆杈撳嚭銆?br />PIPE鍦ㄥ啓鐨勬椂鍊欏鏋滄湁澶氫釜鍐欒繘紼嬶紝閭d箞鍐欑殑鏁版嵁灝忎簬 PIPE_BUF 鍒欎笉浼?xì)湄曞簭锛屽惁鍒欒嚜宸卞簲璇闇瑕佸仛鍚屾浜?jiǎn)銆?/p>

鐒跺悗灝辨槸FIFO錛岃繖涓氨鏄敤mkfifo鍒涘緩涓涓猣ile錛屽ぇ瀹墮兘鍘葷敤銆?br />PIPE鍜孎IFO閮芥槸鍗婂弻宸ョ殑

XSI IPC ->鍗充箣鍓峉ystem V IPC
娑堟伅闃熷垪 淇″彿閲?鍏變韓瀛樺偍鍣?/p>

鍦ㄦ棤鍏寵繘紼嬩箣闂村叡浜瓨鍌ㄦ錛屼竴涓槸浣跨敤涓婇潰V緋葷粺shm錛涘彟澶栦竴涓槸浣跨敤mmap灝嗗悓涓鏂囦歡map鍒頒粬浠嚜宸辯殑榪涚▼絀洪棿銆?br />
鍙﹀灝辨槸緗戠粶IPC浜?br />綆楁槸澶嶄範(fàn)涓嬪惂錛屼箣鍓嶈繖鍧楀効鐪嬬殑姣旇緝澶?br />int socket(int domain, int type, int protocol)
domain鏍囪瘑address family -> AF_INET, AF_INET6, AF_UNIX(AF_LOCAL), AF_UNSPEC
type鏍囪瘑socket綾誨瀷 -> SOCK_DGRAM(UDP), SOCK_RAW(IP), SOCK_SEQPACKET, SOCK_STREAM(TCP)

涓鑸琾rotocol閮借緗負(fù)0錛屼竴鑸琣ddress family鍜宼ype灝辮兘紜瑕佷嬌鐢ㄧ殑protocol

SOCK_SEQPACKET鍜孲OCK錛塖TREAM寰堝儚錛屽墠涓涓彁渚涢潰鍚戞暟鎹姤鏂囩殑鏈嶅姟錛岃屽悗闈㈣繖縐嶅垯鏄潰瀵規(guī)祦銆?br />SOCK_SEQPACKET浣跨敤鍦烘櫙SCTP錛岃創(chuàng)涓涓猄CTP鐨勭畝瑕佷粙緇嶃?br />http://www.cnblogs.com/qlee/archive/2011/07/13/2105717.html

娑夊強(qiáng)緗戠粶灝卞繀欏昏娓呮瀛楄妭搴忕殑闂錛屽瓧鑺傚簭涓庡瓧絎︾紪鐮佹槸涓や歡涓嶅悓鐨勪簨鎯咃紝閮借鎯蟲(chóng)竻妤氱殑錛屼絾鏄鎻愪竴涓婾TF-8榪欐槸涓縐嶄笓闂ㄨ璁$敤鏉ュ仛緗戠粶浼犺緭鐨勫瓧絎︾紪鐮?br />鏃犻渶鍏沖績(jī)瀛楄妭搴忕殑闂錛屾墍浠ヤ紶杈撶殑涓婂眰鏁版嵁鍙互鐢║TF-8錛屽氨涓嶇敤鎷呭績(jī)local host鍜宺emote host鐨勪富鏈哄瓧鑺傚簭涓嶄竴鏍瘋(gè)屽鑷翠貢搴忎簡(jiǎn)銆?br />
浣嗘槸寰堝鍗忚澶村繀欏誨仛絎﹀悎TCP/IP鍗忚鐨勫瓧鑺傚簭瑙勮寖錛孴CP/IP鏄痓ig endian
鍏充簬Big endian鍜孡itter endian鎴戞瘮杈冨鏄撳繕璁板叿浣撶殑鏍峰瓙錛屼絾鏄粬鐨勫嚭鍙戠偣鏄綆鍦板潃錛屼綆鍦板潃瑁呯殑鏄渶楂樻湁鏁堝瓧鑺傞偅涔堝氨鏄痓ig endian錛屽惁鍒欏氨鏄痩itter endian銆?br />
鍏充簬socket鏈夊嚑涓彲鑳芥瘮杈冩ā緋婄殑鍦版柟
connect鏃訛紝涔熷氨鏄痗lient绔紝濡傛灉fd娌℃湁緇戝畾鍒版煇涓湴鍧錛岄偅涔坘ernel浼?xì)甯繖灏嗗叾缁戝畾鍒伴粯璁ゅ湴鍧; 鎵浠ind榪欎歡浜嬫儏鏄疌lient鍜孲erver閮介渶瑕佸仛鐨勪簨鎯咃紝璋冪敤listen涔嬪墠涔熶竴鏍?br />鐒跺悗accept鐨勬椂鍊欙紝濡傛灉浣犲叧蹇?jī)瀵规柟鐨勫湴鍧錛岄偅涔堟彁渚沘ddr(瓚沖)鍜宭en錛岃繑鍥炵殑鏃跺欏氨鑳界煡閬撱?br />鍙﹀UDP(SOCK_DGRAM)涔熷彲浠all connect錛屼箣鍚庡氨鍙互鐩存帴call send/write錛岃屼笉蹇呮瘡嬈¢兘call sendto鎸囧畾瀵圭鍦板潃銆?br />
sendto涓璮lag涓鑸粰0錛屽鏋滄槸绱фユ暟鎹粰MSG_OOB

鏂囦歡鎻忚堪絎︾殑浼犺緭錛岀洰鐨勬槸鎯寵涓嶅悓鐨刾rocess鍦ㄤ笉鍚岀殑鏂囦歡鎻忚堪絎︿腑鍏變韓鏂囦歡琛ㄣ?br />鎵浠ュ仛娉曚笂緋葷粺浼?xì)杩欐狓P紝浼犺緭鏂囦歡琛ㄦ寚閽堢劧鍚庢斁鍒版帴鏀剁鐨勭涓涓彲鐢ㄧ殑鏂囦歡鎻忚堪絎︿笂銆?br />榪欎釜鎴戝湪linux涓婃病鎵懼埌瀹炵幇錛屽洜涓鴻繖涓姛鑳借繕鏄湁铔鏇夸唬鏂規(guī)鐨勩?br />



Torres 2013-06-06 17:22 鍙戣〃璇勮
]]>
LTZ鐪嬩功涔婣PUE11http://www.shnenglu.com/xieshuo/archive/2013/06/05/200818.html Torres TorresWed, 05 Jun 2013 08:59:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/06/05/200818.htmlhttp://www.shnenglu.com/xieshuo/comments/200818.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/06/05/200818.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200818.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200818.html13绔犲湪璁睤aemon Process錛屾病浠涔堢壒鍒ソ鍐欑殑銆?br />14 ->楂樼駭IO

浣庨熺郴緇熻皟鐢紝涔熷氨鏄湁淇″彿鍙戠敓浼?xì)杩斿?errno 涓?EINTR鐨?/p>

紓佺洏鏂囦歡IO铏界劧鏈夊歡鏃訛紝浣嗘槸榪欎釜涓嶈兘綆楁槸浣庨熺郴緇熻皟鐢?/p>

APUE浠嬬粛鐨勪綆閫熺郴緇熻皟鐢?br />PIPE錛岀粓绔澶囷紝緗戠粶璁懼 璇誨啓
璇繪棤鏁版嵁/鍐欐棤絀洪棿(渚嬪TCP鍗ongestion window)

鎵撳紑鏌愪簺鐗規(guī)畩鏂囦歡
鍔犺褰曢攣鐨勬枃浠惰鍐?br />ioctl錛孖PC


鏂囦歡閿佸張鍙仛 byte-range locking錛岄拡瀵圭壒瀹氱殑鏂囦歡鍖哄煙錛岄傚悎鏁版嵁搴撴枃浠?br />Posix鏍囧噯
int fcntl(int fd, int cmd, .../* struct flock* flockptr */)
cmd -> F_GETLK,F_SETLK,F_SETLKW
F_SETLKW鏄疐_SETLK鐨凚locking鐗堟湰 W means wait

閲嶈鏁版嵁緇撴瀯鏄痵truct flock ->
struct flock {
 short l_type;
 short l_whence;
 off_t l_start;
 off_t l_len;
 pid_t l_pid;
 __ARCH_FLOCK_PAD
};

閿佸畾鏁翠釜file鐨勬柟寮? l_whence = SEEK_SET, l_start = 0, l_len = 0

l_type鐨勪袱綾籰ock
F_RDLCK錛孎_WRLCK榪欎袱縐嶉攣鐨勭壒鎬у緢鍍弐w lock

涓嶈繃涓庤鍐欓攣涓嶄竴鏍風(fēng)殑鏄垨鑰呰繖鏍瘋
Posix.1娌℃湁瑙勫畾涓嬮潰榪欑鎯呭喌: process A鍦ㄦ煇鏂囦歡鍖洪棿涓婅緗簡(jiǎn)涓鎶婅閿侊紱process B灝濊瘯鍦ㄨ繖涓枃浠跺尯闂村姞涓婂啓閿佺殑鏃跺檚uspend錛沺rocess C鍐嶅皾璇曡幏鍙栬閿侊紝濡傛灉鍏佽

process C鎷垮埌璇婚攣錛岄偅涔坧rocess B灝嗕細(xì)鍙兘姘歌繙鎷夸笉鍒板啓閿侊紝媧繪椿楗挎

pthread閲岄潰鐨剅w lock鐨勫疄鐜頒細(xì)鍦ㄨ繖縐嶆儏鍐典笅suspend鎺塸rocess C鐨勮閿佽姹傦紱浣嗘槸鐩墠鏂囦歡鍖哄煙閿佺殑瀹炵幇鎴戜笉澶‘瀹?/p>

榪欓噷鐪嬫枃浠跺尯鍩熼攣榪樻槸姣旇緝瀹規(guī)槗甯︽潵deadlock鐨?br />渚嬪process A閿佷綇F1鐨勬煇涓尯鍩燂紝鐒跺悗鍘婚攣F2鐨勪竴涓尯鍩燂紝榪欐椂鍊橣2鐨勮繖涓尯鍩熻process B閿佷綇錛岄偅涔坧rocess A灝變細(xì)suspend錛屽鏋滆繖涓椂鍊檖rocess B榪囨潵瑕侀攣F1鐨勮繖涓尯鍩?br />灝變細(xì)鍙戠敓deadlock


鍏充簬鏂囦歡鍖哄煙閿佺殑緇ф壙鍜岄噴鏀?br />1.fork鍚庯紝鏂囦歡鍖哄煙閿佸茍涓嶇戶鎵匡紝緇ф壙浜?jiǎn)灏卞畬浜?jiǎn)錛屼笉鍚岀殑process灝辨湁鍙兘鍚屾椂騫插悓涓浠朵簨鎯咃紝鎶婃暟鎹悶鍧?br />2.close(fd)鍚?fd瀵瑰簲鐨勬枃浠墮攣灝辮閲婃斁浜?jiǎn)锛屾枃錃g閿佹寕鍦╥node涓婏紝close鐨勬椂鍊檏ernel浼?xì)鍘绘壂鎻忓搴旂殑inode涓婁笌榪欎釜PID鐩稿叧鐨刲ock錛岄噴鏀炬帀錛岃屽茍涓嶅幓鍏沖績(jī)鏄摢涓枃浠舵弿榪扮鎴?/p>

鑰呮槸鍝釜鏂囦歡琛紝榪欏緢閲嶈錛屽洜涓簂ockf涓茍涓嶈褰昮d錛屼粬浠彧鏄急鍏寵仈鍏崇郴錛岃繖涓緢閲嶈銆?br />3.exec鍚庯紝鏂囦歡閿佷細(xì)緇ф壙鍘熸潵鎵ц紼嬪簭鐨勯攣(fork涔嬪悗鎷垮埌鐨刲ock)錛屽鏋渇d甯︽湁close-on-exec閭d箞鏍規(guī)嵁絎簩鏉★紝榪欎釜fd瀵瑰簲鐨刦ile涓婄殑閿侀兘浼?xì)琚噴鏀俱?/p>


鍚庨潰璁蹭簡(jiǎn)STREAMS錛屾劅瑙塴inux涓婄敤鍒扮殑涓嶅錛岄渶瑕佸湪緙栬瘧kernel鏃跺姩鎬佸姞杞?/p>

IO澶氳礬杞帴錛屼富瑕佹槸涓轟簡(jiǎn)瀹炵幇polling鏃㈡墍璋撶殑杞
涓昏鍑芥暟鏈塻elect錛宲select錛宲oll錛宔poll
select涔熶細(xì)綆楁槸浣庨熺郴緇熻皟鐢紝閭d箞灝辨湁鍙兘琚俊鍙鋒墦鏂?br />pselect鏈夊弬鏁板彲浠ヨ瀹氫俊鍙峰睆钄介泦錛屼篃鎻愪緵鏇撮珮綺懼害鐨則imer

poll鐨勬柟寮忎笌select鏈変笉澶竴鏍風(fēng)殑鍦版柟錛屼絾鏄姛鑳界浉鍚岋紝epoll鏇撮傚悎澶ф暟鎹噺銆?/p>

readv鍜寃ritev
璁頒綇涓嬮潰涓ゆ潯灝卞浜?br />涓涓О涓簊catter read(鏁f璇?錛涘彟澶栦竴涓О涓篻ather write(鑱氶泦鍐?
榪欎袱涓嚱鏁頒細(xì)闈㈠涓涓猙uffer閾捐〃銆?br />


readn鍜寃riten
榪欎釜姣旇緝鍍忕幇鍦ˋndroid閲岄潰socket鐨剅ead鍜寃rite鏂瑰紡錛屼繚璇佽兘read/write n byte鏁版嵁錛屽湪鍐呴儴鍋氬驚鐜?br />鎴戞瘮杈冨ソ濂囪繖涓や釜鏄惁浼?xì)澶勭悊signal錛屾兂鏉ュ簲璇ユ槸浼?xì)澶勭悊鐨勫Q岄亣鍒癊INTR甯繖閲嶅惎灝卞ソ浜?/p>

鎴戞病鏈夋壘鍒癇ionic搴撶殑瀹炵幇


瀛樺偍鏄犲皠IO
榪欎釜寰堥噸瑕侊紝mmap鐢ㄧ殑寰堝錛屾槧灝勫埌process絀洪棿鐨勪綅緗湪 stack浠ヤ笅錛宧eap浠ヤ笂鐨勯儴鍒嗭紝map瀹屽悗榪斿洖浣庡湴鍧銆?/p>

#include<sys/mman.h>
void* mmap(void* addr, size_t len, int prot, int flag, int filedes, off_t off)

prot -> PROT_READ,PROT_WRITE,PROT_EXEC,PROT_NONE
prot鎸囧畾鐨勫鏄犲皠瀛樺偍鍖虹殑淇濇姢涓嶈兘瓚呰繃鏂囦歡鐨刼pen鏉冮檺

鍦?flag涓?MAP_FIXED鐨勬椂鍊橭S浼?xì)淇濊瘉鍒嗛厤鐨刴emory璧峰鍦板潃涓篴ddr錛屽惁鍒欏彧鏄粰OS涓涓緩璁?br />涓鑸緩璁產(chǎn)ddr緇?錛岃OS鏉ュ喅瀹氥?/p>

MAP_SHARED鏄瀵規(guī)槧灝勫尯鍩熺殑瀛樺偍(write)浼?xì)瀵艰嚧淇敼璇ユ枃錃g銆?br />MAP_PRIVATE鍒欐槸瀵規(guī)槧灝勫尯鍩熺殑鎿嶄綔浼?xì)甯歌涓涓槧灝勬枃浠剁殑鍓湰銆?br />


鍚庨潰鏈変釜渚嬪瓙鐢ㄤ簡(jiǎn)lseek
浣跨敤lseek澧炲姞鏂囦歡闀垮害鐨勬柟寮忥紝鍏坙seek涓涓鹼紝濡傛灉榪欎釜鍊煎ぇ浜庢枃浠舵湰韜殑闀垮害錛岄偅涔堜笅涓嬈″啓灝變細(xì)鍔犻暱璇ユ枃浠訛紝騫朵笖鍦ㄦ枃浠?br />涓艦鎴愪竴涓┖媧烇紝鏈啓榪囩殑鍐呭鍏ㄩ儴璇諱負(fù)0銆?br />mmap鍙兘map鏂囦歡鐨勬渶澶ч暱搴︼紝瓚呰繃鐨勫湴鏂規(guī)病鍔炴硶鍚屾鍒版枃浠躲?/p>

Torres 2013-06-05 16:59 鍙戣〃璇勮
]]>
LTZ鐪嬩功涔婣PUE10http://www.shnenglu.com/xieshuo/archive/2013/06/04/200788.html Torres TorresTue, 04 Jun 2013 07:41:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/06/04/200788.htmlhttp://www.shnenglu.com/xieshuo/comments/200788.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/06/04/200788.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200788.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200788.html綰跨▼鎺у埗

APUE璁茬殑destroy浼?xì)free絀洪棿錛岃繖浠朵簨鎯呯湅璧鋒潵涓嶅お瀵癸紝涔熻鏄疊ase on瀹炵幇
璧風(fēng)爜鎴戠湅鍒扮殑瀹炵幇鏄病鏈夊仛榪欎歡浜嬫儏鐨勩?/p>

 

int pthread_attr_init(pthread_attr_t * attr)
{
    
*attr = gDefaultPthreadAttr;
    
return 0;
}


int pthread_attr_destroy(pthread_attr_t * attr)
{
    memset(attr, 
0x42sizeof(pthread_attr_t));
    
return 0;
}


Attribution鏈変笅闈㈣繖浜涖?br />

 

typedef struct
{
    uint32_t flags;
    
void * stack_base;
    size_t stack_size;
    size_t guard_size;
    int32_t sched_policy;
    int32_t sched_priority;
}
 pthread_attr_t;

鎴戜滑鍙互鐢╩alloc鍜宮map緇橳hread鍒嗛厤stack錛屾寚瀹歴tack澶у皬鍜屼綅緗?浣庡湴鍧)

mutex灞炴?br />涓や釜涓滆タ
1.榪涚▼鍏變韓灞炴э紝PTHREAD_PROCESS_PRIVATE or SHARED
鎰忔濇槸璇村鏋滆繖涓狹utex鏄垎閰嶅湪涓や釜榪涚▼鍏變韓鐨刴emory錛岀劧鍚庤緗負(fù)shared mutex灝卞彲浠ョ敤浜庤繘紼嬪悓姝?br />2.綾誨瀷灞炴э紝normal;errorcheck;recurive
鎰忔濇槸瀹氫箟Mutex鏈韓鐨勭壒鎬э紝榪欓噷鏇存涓嬪墠闈㈤偅绔犳彁鍒扮殑閿欒
鍙湁normal鐨刴utex鎵嶄細(xì)鍦ㄥ啀嬈″姞閿佹椂鍙戠敓deadlock
errorcheck鐨勪細(xì)鐩存帴榪斿洖閿欒
recurive鏈韓灝卞厑璁革紝浼?xì)鏈夎鏁?/p>

rw lock鍜宑ondition灞炴?br />鍙敮鎸佺涓涓?br />
TLS鍙橀噺
鍏堢湅涓婽LS鐨勪綅緗?/p>

 * +---------------------------+
 
* |     pthread_internal_t    |
 
* +---------------------------+
 
* |                           |
 
* |          TLS area         |
 
* |                           |
 
* +---------------------------+
 
* |                           |
 
* .                           .
 
* .         stack area        .
 
* .                           .
 
* |                           |
 
* +---------------------------+
 
* |         guard page        |
 
* +---------------------------+

pthread_internal_t鏄褰曠嚎紼嬭嚜宸辨湰韜殑涓浜涘睘鎬х殑鍙橀噺錛実uard page灝辨槸綰跨▼attr涓婅緗殑闃叉鏍堟孩鍑虹殑鎵╁睍鍐呭瓨

鍒涘緩TLS鍙橀噺鐨勬柟娉?br />1.鍒涘緩Key錛岃繖涓狵ey鏄繖涓狿rocess涓墍鏈塗hread鍙互鍏變韓璁塊棶鐨勶紝鐒跺悗姣忎釜Thread鑷繁鍘誨叧鑱旇嚜宸辯殑Thread Local鍙橀噺
int pthread_key_create(pthread_key_t *keyp, void (*destructor)(void*))
鍒涘緩key鐨勬椂鍊欓渶瑕佷繚璇佸敮涓璋冪敤錛屼篃灝辨槸涓嶄細(xì)鏈変袱涓猅hread鍚屾椂璋冪敤錛岀劧鍚庡彂鐢熶竴浜沚ase on瀹炵幇鐨勪笉紜畾鐨勭粨鏋滐紝鍙互浣跨敤pthread_once

pthread_once鐨勫疄鐜板緢綆鍗曪紝鐢╩utex鍋氫簰鏂ラ噺淇濊瘉pthread_once_t鐨勮闂紝鐒跺悗鍒╃敤pthread_once_t鍋歠lag鏉ヨ皟鐢╥nit_routine

int  pthread_once( pthread_once_t*  once_control,  void (*init_routine)(void) )
{
    
static pthread_mutex_t   once_lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;
    
volatile pthread_once_t* ocptr = once_control;

    pthread_once_t tmp 
= *ocptr;
    ANDROID_MEMBAR_FULL();
    
if (tmp == PTHREAD_ONCE_INIT) {
        pthread_mutex_lock( 
&once_lock );
        
if (*ocptr == PTHREAD_ONCE_INIT) {
            (
*init_routine)();
            ANDROID_MEMBAR_FULL();
            
*ocptr = ~PTHREAD_ONCE_INIT;
        }

        pthread_mutex_unlock( 
&once_lock );
    }

    
return 0;
}

鎵浠ヨ繖涓猵thread_once_t蹇呴』鏄叏灞or闈?rùn)鎬佸彉閲?br />pthread_once鏈甯哥敤鐨刢ase闄や簡(jiǎn)鎷垮埌TLS key澶栵紝init鍑芥暟緇忓父浼?xì)鋴社敤杩欎釜锛岄伩鍏嶅绾拷E嬪悓鏃惰皟鐢ㄣ?br />
鐒跺悗灝辨槸thread cancel
Android Bionic搴撴病鏈夊疄鐜?pthread_setcancelstate(int state, int* oldstate)浠ュ強(qiáng)pthread_cancel()
榪欓噷thread鐨勫彇娑堬紝鏈変簺鏄彇娑堜笉鎺夌殑錛屼緥濡備竴浜沚locking call錛屾墍鏈夌殑鍙栨秷鍧囨槸闇瑕佽瀹氫竴浜涘彇娑堢偣鐨勶紝

鏈変漢鏈変笓闂ㄩ拡瀵笰ndroid娌℃湁Thread Cancel鏉ユ兂鍔炴硶
鍩烘湰灝辨槸thread signal錛屽湪signal handler涓幓call pthread_exit();
or鐢≒IPE鍦ㄥ璺鐢ㄤ腑break鍑烘潵
http://blog.csdn.net/langresser/article/details/8531112

濡傛灉淇″彿涓庣‖浠舵晠闅渙r璁℃椂鍣ㄨ秴鏃剁浉鍏籌紝閭d箞淇″彿浼?xì)鍙戦佸埌寮曡搗浜嬩歡鐨勮綰跨▼涓幓錛屽叾浠栦俊鍙蜂細(xì)鍙戦佸埌浠繪剰涓涓嚎紼嬨?br />榪欓噷鏄鐨凱OSIX綰跨▼妯″瀷錛屼竴鑸殑淇″彿閮戒細(xì)鍙戦佺粰榪涚▼涓病鏈夐樆濉炶淇″彿鐨勬煇涓嚎紼嬨侫PUE璁茬殑鏌愪釜娌℃湁闃誨璇ヤ俊鍙風(fēng)殑綰跨▼錛屽叾瀹炴湁鐐規(guī)ā緋娿?br />
浣嗘槸Linux鐨勫疄鐜頒笉涓鏍鳳紝linux鐨則hread鏄痗lone鍑烘潵鐨勶紝灝辨槸鍏變韓璧勬簮鐨勭嫭绔嬭繘紼嬶紝榪欐牱瀛愬叾瀹炶洰鑷劧鐨勶紝涔熶笉瀹規(guī)槗澶嶆潅銆?br />linux涓紝鏈夊彲鑳界嚎紼嬪氨涓嶄細(xì)娉ㄦ剰鍒拌淇″彿錛岃繖鏍瘋涔熸湁鐐規(guī)ā緋婏紝鎬諱箣緇堢椹卞姩紼嬪簭鐨勪俊鍙蜂細(xì)灝嗕俊鍙烽氱煡鍒拌繘紼嬬粍錛岃繖鏍峰瓙鎵鏈夌殑thread灝變細(xì)閮芥敹鍒頒俊鍙?br />濡傛灉浣犱笉鎯蟲(chóng)墍鏈夌殑綰跨▼閮藉幓鍏沖績(jī)淇″彿錛岄偅涔堝彲浠ヤ嬌鐢ㄤ竴涓笓闂ㄥ鐞嗕俊鍙風(fēng)殑綰跨▼
鍏堝皢鍏朵粬綰跨▼鐨剆ignal閮絧thread_sigmask SIG_BLOCK鎺夛紝鐒跺悗浣跨敤sigwait鍦ㄧ壒瀹氱殑綰跨▼鏉ョ瓑
pthread_sigmask鍜宻igprocmask寰堝儚

thread涓巉ork
fork鍚庣殑瀛愯繘紼嬩細(xì)緇ф壙mutex, rw lock, condition鐨勭姸鎬?br />浣嗘槸瀛愯繘紼嬩腑鍙細(xì)瀛樺湪涓涓嚎紼嬶紝涔熷氨鏄偅涓皟鐢╢ork鐨勭嚎紼嬬殑鍓湰錛屾湁涓鏉傜殑浜嬫儏鏄叧浜庝笂闈㈢戶鎵夸笅鏉ョ殑閭d簺涓滆タ錛屽瓙榪涚▼鐢變簬鍙湁涓涓嚎紼嬶紝娌″姙娉曠煡閬?br />涓婇潰閭d笁涓笢瑗跨殑鍏蜂綋鐘舵侊紝闇瑕佹湁涓竻鐞嗛攣鐨勫姩浣?-->pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void))
鎴戠洰鍓嶄笉鐭ラ亾榪欎釜涓滆タ鐨勪嬌鐢ㄥ満鏅紝鑰屼笖涓嶅鏄撴帶鍒躲?br />鍥犱負(fù)涓鑸鏋滄垜浠琭ork鍚庨兘浼?xì)鎺xecu錛岃繖鏍峰湴鍧絀洪棿灝變細(xì)鏀瑰彉錛岄偅涔堣繖浜涚戶鎵跨殑涓滆タ灝辨病鐢ㄤ簡(jiǎn)銆?br />
鐒跺悗鏈夎皥涓鐐瑰叧浜庣嚎紼婭O鐨勪笢瑗?br />pwrite/pread
涔熷氨鏄師瀛愮殑榪涜lseek鍜宺/w錛屼絾鏄繖涓茍涓嶈兘淇濊瘉澶у甯歌鐨勫啿紿侀棶棰橈紝涔熷氨鏄竴涓猼hread鍦ㄥ啓鍙﹀涓涓璇伙紝鎵浠ヨ繖涓や釜涓滆タ騫朵笉鑳借В鍐沖悓姝ョ殑闂銆?br />
浣滀笟:
12.3 鐞嗚涓婂嚱鏁板紑濮嬫椂灞忚斀鎵鏈変俊鍙鳳紝鍑芥暟緇撴潫鏃舵仮澶嶏紝鏄彲浠ュ仛鍒板紓姝ヤ俊鍙峰畨鍏ㄧ殑銆傚鏋滀綘鍙槸灞忚斀涓浜涗俊鍙鳳紝閭d箞娌″姙娉曞仛鍒幫紝鍥犱負(fù)濡傛灉鏈夊叾浠栦俊鍙瘋繘鏉ワ紝浣燾all鐨勫嚱鏁伴噷闈㈡湁涓浜涗笉鍙噸鍏ョ殑鍑芥暟錛屽悓鏍蜂笉鑳戒繚璇佹槸寮傛瀹夊叏鐨勩?br />
12.5 fork鍙互鍦ㄦ嬁鏉ユ墽琛屽彲鎵ц紼嬪簭錛岀幇鍦ㄥ簲璇ュ氨榪欎竴涓狢ase銆?/p>

Torres 2013-06-04 15:41 鍙戣〃璇勮
]]>
LTZ鐪嬩功涔婣PUE9http://www.shnenglu.com/xieshuo/archive/2013/06/03/200775.html Torres TorresMon, 03 Jun 2013 09:03:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/06/03/200775.htmlhttp://www.shnenglu.com/xieshuo/comments/200775.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/06/03/200775.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200775.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200775.html綰跨▼鍑芥暟
int pthread_equal(pthread_t tid1, pthread_t tid2)
pthread_t pthread_self(void)

int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr
     void* (*start_rtn)(void), void* restrict arg)

thread琚垱寤虹殑鏃跺欎細(xì)緇ф壙璋冪敤綰跨▼鐨勬誕鐐圭幆澧冨拰淇″彿灞忚斀瀛楋紝浣嗘槸璇ョ嚎紼嬬殑鏈喅淇″彿闆嗗皢浼?xì)琚竻妤氬Q?br />娓呴櫎鏈喅淇″彿闆嗚繖浠朵簨鎯呭簲璇ユ槸娌℃湁鐤戦棶鐨勶紝鍦╰hread鍒涘緩涔嬪墠pending浣忕殑淇″彿錛屼笉搴旇deliver緇欎笅涓涓?br />Ps: 綰跨▼鐨勬誕鐐圭幆澧冩寚鐨勬槸鍟? 鐪嬫潵浠ュ悗鎴戝簲璇ュ幓娉ㄦ剰涓嬫誕鐐規(guī)暟鐨勮繍綆楀師鐞嗐?/p>

pthread鐩稿叧鐨勫嚱鏁頒細(xì)鐩存帴榪斿洖閿欒鐮侊紝鑰屼笉浼?xì)鍜屼竴浜泂ystem call涓鏍鳳紝緗叏灞errno錛屼袱縐嶆柟寮忛兘鏈夊ソ澶勶紝涓涓彲浠ヨ榪斿洖鍊?br />甯﹀洖鐨勯敊璇唬鐮侀泦涓搗鏉ワ紝鑼冨洿緙╁皬錛涘彟澶栦竴涓潪甯告柟渚匡紝鍏抽敭鐐瑰湪浜庤繖涓綾誨叡鐢╡rrno鐨勬槸鍚︾湡鐨勫紓甯告槸鍙互鍏辯敤鐨勩?/p>

pthread_create榪斿洖涔嬪墠鏈夊彲鑳芥柊鐨勭嚎紼嬪氨宸茬粡寮濮媟un浜?/p>

鍚姩鍑芥暟 void* (*start_rtn)(void)

鍙互閫氳繃return緇欏洖鏉ワ紝涔熷彲浠ラ氳繃pthread_exit緇?br />榪欎釜浼?xì)瀛樺湪涓涓湴鏂?br />閫氳繃pthread_join(tid, void**)鍙栧洖鏉?/p>

榪欓噷join鐨勫拰java join鏄竴鏍風(fēng)殑鍔熻兘

濡傛灉榪欎釜涓滆タ鏄竴涓緢澶х殑涓滆タ:)錛岄偅涔堟斁鍒癶eap鏄渶濂界殑閫夋嫨錛屼笉瑕佹斁鍒皊tack涓婁簡(jiǎn)錛屼笉鐒剁嚎紼嬭繑鍥炶繖涓滆タ灝辨病浜?jiǎn)锛宩oin鍙栧埌鐨勫唴瀛樺湴鍧灝卞彉鎴愪竴涓棤鏁堢殑浜?jiǎn)锛孲IGSEGV灝變細(xì)琚彂鍑烘潵

pthread_cancel錛屽悓涓涓繘紼嬪彲浠all錛屾彁鍑?guó)櫙锋眰缁堟绾拷E?/p>

pthread_cleanup_push
pthread_cleanup_pop

綰跨▼鍒嗙錛岃繖鏍峰瓙綰跨▼緇堟鍚庡彲浠ラ噴鏀句竴浜涜祫婧愶紝鑰屼笉鐢ㄤ竴瀹氳鍏朵粬浜烘潵join
鏂規(guī)硶鏈変袱縐嶏紝鏂板緩鐨勬椂鍊欏姞涓婂垎紱誨睘鎬?br />    pthread_attr_init (&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    ret = pthread_create(&s_tid_dispatch, &attr, eventLoop, NULL);

鎴栬卌all pthread_detach(pthread_t tid)

綰跨▼浜掓枼涓庡悓姝?/p>

typedef struct
{
    
int volatile value;
}
 pthread_mutex_t;

澶氭敞鎰弙olatile鍙橀噺錛岃繖涓笢瑗跨悊璁轟笂灝辨槸璁╃紪璇戝櫒涓嶈鍋氫紭鍖栵紝涓嶈cache volatile綾誨瀷鐨勫彉閲忥紝
姣忔閮藉幓鍐呭瓨鍦板潃涓嬁錛岃屼笉鏄瘎瀛樺櫒/楂橀熺紦瀛樺壇鏈紝榪欑鍙橀噺鏋佸鏄撹緙栬瘧鍣ㄤ笉鐭ラ亾鐨勪漢鏀瑰彉錛屼緥濡傚叾浠栫嚎紼嬨?/p>

闈?rùn)鎬佸垵濮嬪寲:
#define  PTHREAD_MUTEX_INITIALIZER             {0}
#define  PTHREAD_RECURSIVE_MUTEX_INITIALIZER   {0x4000}
#define  PTHREAD_ERRORCHECK_MUTEX_INITIALIZER  {0x8000}
鎵璋撶殑鍔ㄦ佸垵濮嬪寲
pthread_mutex_init; pthread_mutex_destroy

鐒跺悗灝辨槸涓浜沺thread mutex鐨勫熀鏈鐞嗗嚱鏁頒簡(jiǎn)
lock,unlock
trylock;

榪欎釜trylock闇瑕佸ソ濂界悊瑙d笅錛屽皾璇曡幏鍙杔ock錛屽鏋淥K錛岄偅涔坙ock浠栫劧鍚?return 0; 鍚﹀垯涔熶笉浼?xì)suspend浣忥紝鑰屾槸鐩存帴榪斿洖EBUSY

pthread_mutex_destroy, 浼?xì)鍏堝幓try lock錛岀劧鍚庡鐞嗘帀榪欎釜mutex鐨勫箋?/p>

榪欓噷紼嶅井鎻愪竴涓?/p>

int pthread_mutex_trylock(pthread_mutex_t *mutex)
{
    
int mtype, tid, oldv, shared;

    
if (__unlikely(mutex == NULL))
        
return EINVAL;

    mtype  
= (mutex->value & MUTEX_TYPE_MASK);
    shared 
= (mutex->value & MUTEX_SHARED_MASK);

    
/* Handle common case first */
    
if ( __likely(mtype == MUTEX_TYPE_NORMAL) )
    
{
        
if (__atomic_cmpxchg(shared|0, shared|1&mutex->value) == 0{
            ANDROID_MEMBAR_FULL();
            
return 0;
        }


        
return EBUSY;
    }




__likely/__unlikely鍑芥暟鐢ㄦ潵鍛婅瘔緙栬瘧鍣ㄤ紭鍖栦唬鐮侊紝綾諱技if else涓渶鏈夊彲鑳給r鏈娌℃湁鍙兘鍙戠敓鐨凜ase

mutex灝辨湁deadlock鐨勯棶棰橈紝鍗曠嚎紼嬶紝濡傛灉鏈変唬鐮侀噸鍏ラ噸澶嶈幏鍙栭攣灝變細(xì)deadlock錛屽洜涓轟綘璧頒笉鍒頒綘unlock鐨勫湴鏂瑰幓錛涘彟澶?br />甯歌鐨刣eadlock灝辨槸lock姣旇緝澶氾紝鍙堟病鏈夎璁″ソ欏哄簭錛岃繖涓簲璇ヤ粠涓氬姟閫昏緫涓婂氨搴旇瀹氫箟濂斤紝褰撶劧鏈夋椂鍊欐湁鐨勪漢鐢ㄧ殑鏃跺檕r鏀逛唬鐮佺殑鏃跺?br />騫舵病鏈夌悊娓呰繖浜沴ock鐨勫叧緋伙紝鏄惁鏈塪ependency錛屾瘮杈冮毦閫氳繃鍊熺敤涓浜涚紪璇戠郴緇熸潵Cover浣忥紝鐒跺悗鏀瑰畬灝辨湁bug銆?br />

鐒跺悗榪樻湁涓縐嶉渶瑕佽璁″ソ鐨勬槸閿佺殑綺掑害
澶矖澶粏閮戒笉濂?br />綺掑害澶矖錛宭ock浣忕殑涓滆タ澶錛屽緢澶氱嚎紼嬮兘瑕佺瓑lock錛屾渶鍚庤繖涓笢瑗夸細(xì)婕斿彉鎴愪竴涓覆琛岀殑涓滆タ
綺掑害澶粏錛宭ock鍙堝彉鐨勫お澶氾紝涓嶅仠鐨勯渶瑕乴ock/unlock錛宲erformance灝變細(xì)鍙樺樊銆?br />鐩墠鐪嬪埌鐨凙ndroid涓婄殑寰堝lock閮藉お綺椼?br />

rw閿?->璇誨啓閿?br />鍩烘湰鐞嗗康灝辨槸璇諱笉浼?xì)濯?jiǎng)鍝嶄復(fù)鐣屽尯鍙戠敓鍙樺寲
鎵浠ヨ妯″紡鐨剅w lock鍙互澶氫釜浜哄崰鐢紝鍐欐ā寮忕殑rw lock鏃惰兘琚竴涓嚎紼媗ock

鍙鏈夊啓妯″紡lock璇鋒眰錛岄偅涔堝悗闈㈢殑璇繪ā寮弆ock璇鋒眰涓鑸疄鐜版槸閮戒細(xì)琚玈uspend浣忥紝涓嶇劧鍥犱負(fù)璇繪ā寮忎笅錛屽彲浠ラ噸澶峫ock錛屽鏋滀笉
suspend錛岄偅涔堝啓妯″紡鐨刲ock璇鋒眰鏈夊彲鑳芥案榪滃緱涓嶅埌鐩稿簲銆?br />rw閿佷竴鑸敤鍦?read姣?write琛屼負(fù)澶氱殑澶氱殑鍦烘櫙錛屽厑璁稿綰跨▼騫跺彂鍘昏錛屽崟涓綰跨▼鍘誨啓銆?br />

鐒跺悗浼?xì)鎯冲埌spinlock錛屽彲浠ュ幓緗戜笂search鐪嬩笅鍩烘湰姒傚康錛宻pinlock涓鑸湪SMP鏋舵瀯涓嬩細(xì)姣旇緝鏈夋晥鏋溿?br />

mutex鏄竴縐嶅悓姝ユ満鍒秓r璁茶繖鏄竴縐嶄簰鏂ユ満鍒?-> Java synchronize
榪樹(shù)竴縐嶅氨鏄潯浠跺彉閲?condition.. -> wait/notify

榪欓噷鏈夋璇濆緢濂?br />鏉′歡鍙橀噺緇欏涓嚎紼嬫彁渚涗簡(jiǎn)涓涓洖鍚堢殑鍦烘墍錛屾潯浠跺彉閲忎笌浜掓枼閲忎竴璧蜂嬌鐢ㄧ殑鏃跺欙紝鍏佽綰跨▼浠ユ棤绔炰簤鏂瑰紡絳夊緟鐗瑰畾鐨勬潯浠跺彂鐢熴?br />
浣滀笟:
1.綰跨▼涔嬮棿浼犻掓暟鎹笉瑕佺敤stack鍙橀噺錛岀敤鏀懼埌涓嬮潰榪欎簺鍦版柟鐨勫彉閲忓氨濂斤紝RW/RO/ZI/Heap灝辨病浜嬩簡(jiǎn)
4.
鐜板湪涓鑸兘鏄繖鏍?/p>

    pthread_mutex_lock(&s_startupMutex);

    s_started = 1;
    pthread_cond_broadcast(&s_startupCond);

    pthread_mutex_unlock(&s_startupMutex);

浼?xì)鍦╞roadcast鍚庢墠unlock
鍚﹀垯鏈夋瘮杈冮珮鐨勬鐜囷紝unlock鍚庯紝琚叾浠栫嚎紼嬪皢鏉′歡鏀規(guī)帀錛岃繖涓椂鍊檅roadcast鍑哄幓灝辨病鏈夋剰涔変簡(jiǎn)銆?br />浣嗘槸榪欑涔熸湁鍙兘浼?xì)琚彟澶栦竴涓嚎紼嬶紝騫墮潪wait鍦ㄩ偅閲岀殑綰跨▼鏀瑰彉鏉′歡鍊?br />
鎵浠?pthread_cond_wait 榪斿洖騫朵笉鎰忓懗鐫鏉′歡涓瀹氫負(fù)鐪熶簡(jiǎn)
鏈濂芥槸always check鏉′歡
綾諱技榪欑
    while (s_started == 0) {
        pthread_cond_wait(&s_startupCond, &s_startupMutex);
    }



Torres 2013-06-03 17:03 鍙戣〃璇勮
]]>
LTZ鍋氫綔涓氫箣APUE8http://www.shnenglu.com/xieshuo/archive/2013/06/02/200761.html Torres TorresSun, 02 Jun 2013 13:52:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/06/02/200761.htmlhttp://www.shnenglu.com/xieshuo/comments/200761.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/06/02/200761.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200761.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200761.html淇″彿
鎻愪緵寮傛鏃墮棿澶勭悊鏂瑰紡
瑙﹀彂鏃舵満:
1.緇堢鍛戒護(hù)
2.紜歡寮傚父錛岀敱kernel鎶涘悜瀵瑰簲鐨凱rocess
3.kill鍑芥暟/kill鍛戒護(hù)(瓚呯駭鐢ㄦ埛or Process鐨剈ser鐩稿悓錛岃繖閲岀殑user id涓鑸槸鎸囧疄闄呯敤鎴稩D or 鏈夋晥鐢ㄦ埛ID錛屽鏋滄敮鎸?_POSIX_SAVED_IDS,閭d箞媯(gè)鏌aved-user-id)
4.杞歡瑙﹀彂(婊¤凍淇″彿鏉′歡)

榪欓噷涔熺◢寰В閲婁笅Kill榪欎釜涓滆タ錛宬ill鍑芥暟錛宬ill鍛戒護(hù)騫朵笉鏄瓧闈笂鏉鎺夋煇浜涗笢瑗匡紝kill鍙槸鍦ㄧ壒瀹氱殑鏃墮棿鍙戦佷俊鍙鳳紝
鍏蜂綋鐨勫鐞嗗彇鍐充簬淇″彿鏈韓鍜屼俊鍙風(fēng)殑澶勭悊鏂瑰紡銆?/p>

淇″彿鐨勫鐞嗘柟寮?
榪欎釜鏈夌偣綾諱技Java Exception鐨勫鐞嗘柟寮忥紝catch浣弌r寰涓妕hrow

APUE璁茬殑淇″彿澶勭悊鏂瑰紡鏈変笁縐?br />1.蹇界暐錛孲IGKILL/SIGSTOP涓嶈兘蹇界暐錛涗竴鑸鏋淧rocess鑷繁涓嶇鐨勮瘽錛屽簲璇ヤ細(xì)璧板埌緋葷粺榛樿鐨勫鐞嗘祦紼嬩腑錛屾墍浠ヤ笉鑳藉拷鐣ヨ繖浠朵簨鎯呮槸緋葷粺鑷繁灝變細(xì)淇濊瘉鐨勩?br />2.鎹曟崏淇″彿錛屼緥濡係IGCHLD,涓鑸琾arent浼?xì)call waitpid鍙栧瓙榪涚▼緇堟鐘舵侊紝閬垮厤浠栧鐞哯ombie鐘舵併?br />3.鎵ц緋葷粺榛樿鍔ㄤ綔

鎴戞劅瑙?鍜?鍙互褰掍負(fù)涓綾誨惂錛屽彧鏄湁浜泂ignal娌℃湁緋葷粺榛樿鍔ㄤ綔錛岀劧鍚庡氨璺寵繃鍘諱簡(jiǎn)銆備竴鑸殑緋葷粺榛樿鍔ㄤ綔涔熷氨鏄粓姝㈣繘紼嬨?/p>

SIGKILL/SIGSTOP涓嶈兘琚拷鐣ョ殑鍘熷洜鎴戣寰楄鐨勪笉閿欙紝鎻愪緵瓚呯駭鐢ㄦ埛緇堟榪涚▼鐨勫彲闈犳柟娉曪紝涓嶇劧鍚庣畫(huà)鏈夊彲鑳借繘紼嬬殑琛屼負(fù)鏄湭瀹氫箟鐨?

signal鍑芥暟瀹氫箟:(

void (*signal(int signo, void(*func)(int)))(int);

榪欎釜C鍑芥暟鐨勫0鏄庢湁鐐歸毦鐪嬫噦

APUE璁瞫ignal鐨勮涔変笌瀹炵幇鏈夊叧錛屾墍浠ュ緩璁ぇ瀹墮兘鐢╯igaction

涓嶈繃鎴戠湅浜?jiǎn)涓婣ndroid Bionic涓嬬殑瀹炵幇錛屽垎鍒寘鍚獴SD浠ュ強(qiáng)SYSV鐨勭増鏈紝浣嗕篃閮藉彉鎴愪簡(jiǎn)sigaction錛屾墍浠ヤ竴鑸湪C搴撲腑灝變繚璇佷簡(jiǎn)榪欎竴鐐癸紝涔熷氨鏃犳墍璋撲簡(jiǎn)銆?/p>

 

static __sighandler_t
_signal(
int  signum, __sighandler_t  handler, int  flags)
{
    
struct sigaction  sa;
    __sighandler_t    result 
= SIG_ERR;

    sigemptyset( 
&sa.sa_mask );

    sa.sa_handler 
= handler;
    sa.sa_flags   
= flags;

    
if ( !sigaction( signum, &sa, &sa ) )
        result 
= (__sighandler_t) sa.sa_handler;

    
return result;
}



__sighandler_t bsd_signal(
int signum, __sighandler_t handler)
{
  
return _signal(signum, handler, SA_RESTART);
}


__sighandler_t sysv_signal(
int signum, __sighandler_t handler)
{
  
return _signal(signum, handler, SA_RESETHAND);
}



exec鍑芥暟浼?xì)璁蹭俊鍙峰鐞嗘柟寮彉q樺師涓虹郴緇熼粯璁わ紝榪欎釜搴旇姣棤鐤戦棶錛宔xec鍚庡湴鍧絀洪棿灝變笉涓鏍蜂簡(jiǎn)錛屼繚鐣欎箣鍓嶇殑鎹曟崏鍑芥暟涔熸槸鏃犳剰涔夌殑錛涘湪榪欎箣鍓嶆槸鏈夋剰涔夌殑錛屾垜鐨勬剰鎬濇槸璇磃ork鍚巈xec涔嬪墠銆?/p>

鍚庨潰鏈夊垪涓澶у爢鏄惁鍙互閲嶅叆鐨勫嚱鏁幫紝涓嶅お鎯寵錛岀劧鍚庤鍒頒簡(jiǎn)malloc
鎴戞兂涓嶈兘閲嶅叆鐨勫嚱鏁版棤澶栦箮涓ょ綾誨瀷
one: 鑷繁鏈塵aintain涓浜涘叏灞or static鍙橀噺 --> malloc 緇存姢鍒嗛厤鍐呭瓨鏃秙tatic heap linklist
two: 鍑芥暟鍙傛暟閲岄潰鏈夊紩鐢ㄤ箣綾葷殑錛屼細(xì)褰卞搷璋冪敤鑰呯殑鎯呭喌銆?/p>

鐒跺悗鎴戠湅鍒拌繖涓珛椹氨鎯沖埌浜?jiǎn)绾拷E嬪畨鍏紝malloc鏄嚎紼嬪畨鍏ㄧ殑楹?
鍘葷湅浜?jiǎn)涓婤ionic鐨勫疄鐜幫紝鐒跺悗灝卞張鐪嬪埌涓嬮潰榪欎釜鍚嶅瓧 Dong Lea錛岄┈涓婂氨浼?xì)鎯冲埌Java Concurrent搴擄紝鐪嬪埌榪欎釜浣犵洿鎺ュ氨浼?xì)鏈夋兿x(chóng)硶錛孊ionic閲岄潰榪欎釜malloc鑲畾鏄嚎紼嬪畨鍏ㄧ殑錛?br />鏈夋椂鍊欒榪欎簺涓滆タ鎼炵殑寰堢瘡錛屾瘮杈冪儲(chǔ)浠栵紝鑰屼笖Bionic閲岄潰鐢ㄧ殑malloc鐨勯偅涓疄鐜扮増鏈?aka dlmalloc)鎴戝張娌$湅鎳?(錛屽彧濂藉幓緗戜笂search浜?jiǎn)涓涓嬶紝鏈変釜浜哄仛榪囧疄楠岋紝鏈変簺緇撹榪樻槸鍙互鍙傝冪殑
http://www.360doc.com/content/12/0420/23/168576_205320609.shtml

鎬葷殑鏉ヨ錛岃繖涓笢瑗垮彇鍐充簬C搴撳疄鐜幫紝鎴戞兂Bionic鍜孏libc閮藉簲璇ヤ竴鏍蜂細(xì)鏀寔涓ょ涓嶅悓鐨勭増鏈紝鐒跺悗緙栬瘧鐨勬椂鍊欏氨鍙互紜畾鏄惁鏈夌嚎紼嬬浉鍏蟲(chóng)搷浣滐紝鐒跺悗鍦╨ink鐨勬椂鍊檒ink榪囨潵涓嶅悓鐨勭増鏈?/p>

綰跨▼瀹夊叏鍜屼俊鍙峰畨鍏ㄦ槸涓や釜姒傚康

濡傛灉鍦ㄧ嚎紼嬪畨鍏ㄧ殑malloc涓紝淇″彿澶勭悊鍑芥暟涓彂鐢熼噸鍏ワ紝閭d箞搴旇鏄細(xì)鍙戠敓dead lock
濡傛灉鏄潪綰跨▼瀹夊叏涓紝閭d箞搴旇鏄墍璋撶殑 undefined behavior.

鍓嶉潰榪樻湁涓涓鐜囧繕璁板啓
鏃╂湡鐨刄nix緋葷粺錛屽鏋滅郴緇熷湪鎵ц涓涓綆閫熺郴緇熻皟鐢?鍩烘湰鍙互鎬葷粨涓篵locking IO:鍖呮嫭IPC錛孎ile IO錛宨octl)錛岄偅涔堝鏋滄崟鎹夊埌淇″彿錛岄偅涔堢郴緇熷氨浼?xì)涓柇杩欎釜system call -->EINTR, 榪欏湪褰撴椂鏄湁鐞嗙敱鐨勶紝鑰屼笖鐞嗙敱鐪嬭搗鏉ヤ篃鍚堢悊錛屼絾鏄敱浜巙ser鏈夋椂鍊欏茍涓嶇煡閬撴煇浜涚郴緇熻皟鐢ㄦ槸鍚︽槸浣庨熺郴緇熻皟鐢紝BSD寮曡繘浜?jiǎn)鑷姩閲嶅惎鐨勫姛鑳藉Q宭inux follow榪欑瑙勫垯

鐒跺悗鏈夊嚑涓増鏈殑signal鍑芥暟
signal榛樿鑷姩閲嶅惎
_signal(signum, handler, SA_RESTART) 榪欐槸鐢變簬鍦╯igaction涓殑flag涓篠A_RESTART錛屼笂闈ysV鐨勫疄鐜版垜涓嶆兂澶氬啓浜?jiǎn)銆?br />sigaction涔熷氨鏄彲閫夌殑浜?jiǎn)銆?/p>

浣嗕竴鑸垜鍗拌薄涓ソ澶?read/write閮芥槸浼?xì)鑷繁鍒ゆ柇杩斿洖鍊間互鍙?qiáng)errno 鏄惁涓?EINTR錛岀劧鍚巖etry錛屽洜涓轟笂闈㈣繖縐嶆柟寮忎緷璧栫郴緇熷疄鐜幫紝闇瑕佸皢鎵鏈夌殑signal閮借瀹氫負(fù)SA_RESTART錛岄偅涔堝鏋滄湁鏌愪釜淇″彿鍙戠敓鐨勬椂鍊欙紝琚粬INTR鐨勭郴緇熻皟鐢ㄦ墠浼?xì)鑷姩閲嶅惎锛屼笉鐭ラ亾榛樿signal鍦ㄦ敞鍐屽鐞嗚涓虹殑鏃跺欐槸涓嶆槸濡傛錛屾劅瑙変笉澶ソ鐢ㄣ?/p>

alarm鍑芥暟
瀵逛簬寰堝鍍廰larm榪欑鍑芥暟錛屽湪璁捐鏃秓r浣跨敤鏃跺潎搴旇鑰冭檻涓寸晫鍊肩殑闂
alarm鐨勫敮涓鎬э紝鏄痓y process鐨勶紝process鍗曚緥
鎵浠ュ鏋渁larm涓ゆ錛岄偅涔堢涓嬈′細(xì)琚鐩栵紝鎬庝箞澶勭悊絎竴嬈℃湭瀹屾垚鐨勬儏鍐?>榪斿洖鍊間細(xì)甯﹀洖鏉ュ墿浣欑殑鏃墮棿
鎬庝箞鍙栨秷璁懼畾鐨刟larm
浼犲叆鍊間負(fù)0 means cancel
鎬諱箣浜?jiǎn)锛寴q欎釜涓滆タ璁捐鐨勬椂鍊欒繕铔畬鍠勭殑

鍚庨潰榪樻湁涓鍫嗘湁鍏硈ignal鐨勬爣鍑嗗嚱鏁幫紝榪欓噷涔熷氨涓嶄竴涓鍒椾婦

浣滀笟:
1.鍘繪帀for(;;), 閭f崟鎹夊埌SIGUSR1灝辮繑鍥炰簡(jiǎn)錛宲ause()鍙鎹曟崏鍒頒俊鍙鳳紝絳変俊鍙峰鐞嗗畬鏃惰嚜宸卞氨浼?xì)杩斿洖迤堝甫鍥濫INTR銆備笉鏅撳緱涓哄暐鏈夎繖縐嶉鐩?..
2.瀹炵幇sig2str錛岃繖鏈夌偣鏃犺亰浜?:(涓嶅啓
3.鐢籸untime stack鐨勬牱瀛愩?br />4.IO鎿嶄綔鐨勮秴鏃舵渶濂戒笉瑕侀噰鐢╝larm鐨勬柟寮忥紝鍚勭鍘熷瓙闂錛宻elect/poll鏄渶濂界殑閫夋嫨銆?br />鍚庨潰鏈夊ソ涓浜涙槸瑕佸啓浠g爜鐨?..
鎴戠暐鎯籌紝鐒跺悗灝變笉澶効鎰忓啓浜?
PS:鏈変簺涓滆タ鐣ラ毦...鎴戜篃鏄湁鐐規(guī)兂涓嶆竻妤氱殑鏍峰瓙錛屾墦綆楁參鎱㈡悶銆?br />
鍚庨潰鍐沖畾鎶婃爣棰樻敼涓涓嬶紝欏哄埄鐪嬪畬涔﹀惂...Orz.



Torres 2013-06-02 21:52 鍙戣〃璇勮
]]>
LTZ鍋氫綔涓氫箣APUE7http://www.shnenglu.com/xieshuo/archive/2013/05/31/200728.html Torres TorresFri, 31 May 2013 11:50:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/05/31/200728.htmlhttp://www.shnenglu.com/xieshuo/comments/200728.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/05/31/200728.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200728.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200728.html絎節(jié)绔?榪涚▼鍏崇郴
涔熸槸棣栧厛璁板綍鍩烘湰姒傚康

鍏充簬linux緇堢鐨勬蹇碉紝榪欎釜鏈濂戒粩緇嗘兂涓涓嬶紝鍥犱負(fù)涔嬪悗浼?xì)鏈変吉缁堢鐨勫唴瀹瑰Q屽鏋滀笉鎯崇殑鍏蜂綋涓浜涳紝閭d箞浼?xì)姣旇緝闅炬湁鎰熻銆備笅闈㈡湁涓摼鎺ワ紝鎴戣寰楀啓鐨勮繕鍙互銆?/span>
http://blog.csdn.net/smstong/article/details/8760331

鎴戝啓涓嬫垜鐨勭悊瑙o紝鑲畾鏈変笉澶鐨勫湴鏂癸紝浣嗗彧鑳藉埌姝ゃ?/span>

騫夸箟鐨勮: 緇堢灝辨槸鐢ㄦ潵鍜孶ser浜や簰鐨勮澶囷紝閿洏錛屾樉紺哄櫒錛屾墦鍗版満...
榪欓噷涓鑸鐨勬槸鐙箟鐨勭粓绔?
涓鑸湁涓ょ: 瀛楃鍝戠粓绔? 鍥懼艦緇堢
瀛楃鍝戠粓绔紝灝辨槸鑷繁娌℃湁澶勭悊鑳藉姏錛屽彧鑳借緭鍏ヨ緭鍑虹殑;
鍥懼艦緇堢鍏跺疄浠栨湁澶勭悊鑳藉姏錛屼緥濡俧ramebuffer...
linux涓紝鐪熸鑳界О寰椾笂鏄粓绔殑鍏跺疄鐗╃悊緇勪歡灝辨槸閿洏+鏄劇ず鍣紝鎴栬呯О榪欎袱涓笢瑗垮彨鍋氭帶鍒跺彴
浣嗘槸linux铏氭嫙鍑烘潵浜?涓粓绔澶?/span>
tty1 ~ tty6
鑰?dev/tty0鏄竴涓猻ymbol link鎸囧悜褰撳墠緇堢錛?dev/console鍒欏彲浠ヤ負(fù)/dev/tty0鎻愪緵緙撳啿錛堣繖涓垜涓嶇‘瀹氾級(jí)

tty7鏄浘褰㈢粓绔?/span>
鍥懼艦緇堢涓紝浼?xì)鐢ㄨ蒋錃g綾諱技rxvt铏氭嫙鍑烘洿澶氱殑浼粓绔紝綾諱技鎴戜滑鐪嬪埌鐨?dev/pts/0...

浼粓绔槸涓縐嶈櫄鎷熺粓绔?/span>
浣嗘槸鏈夋椂鍊欐墍璋撶殑铏氭嫙緇堢榪樻槸鑳藉搴斾笂鐗╃悊璁懼

瀵逛簬浼粓绔痯ts鍜宲tm
鎴戣嚜宸辨劅瑙夊氨鍍廝IPE錛屽彧涓嶈繃杈撳叆杈撳嚭鏃舵湁緇堢琛岃紼嬫潵鎺у埗鏍煎紡銆?/span>

鍚庨潰鏈夎浼?xì)璇濆Q屼細(xì)璇濈敱榪涚▼緇勬瀯鎴愶紝涓嶈繃鎴戞兂涓嶆竻妤氳繍鐢ㄥ満鏅?..

榪欎竴绔犳湁涓浜涙病鐪嬫噦錛岃繘紼嬬粍錛屼細(xì)璇濓紝鎺у埗緇堢...鍥犱負(fù)涓嶆庝箞鐢紝鍏堟斁榪欓噷錛屼互鍚庡啀緲匯?/span>
娌℃湁浣滀笟...


Torres 2013-05-31 19:50 鍙戣〃璇勮
]]>
LTZ鍋氫綔涓氫箣APUE6http://www.shnenglu.com/xieshuo/archive/2013/05/31/200687.html Torres TorresThu, 30 May 2013 16:25:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/05/31/200687.htmlhttp://www.shnenglu.com/xieshuo/comments/200687.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/05/31/200687.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200687.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200687.html璁板綍涓浜涘熀鏈蹇?/div>
PID == 0鐨勬槸Swapper榪涚▼(璋冨害榪涚▼)錛岃繖涓狿rocess鐨凴O搴旇鏄痯re load鐨勬椂鍊欓兘鏀懼埌鍐呭瓨閲岄潰浜?jiǎn)锛屼笉run浠諱綍紓佺洏?shù)笂鐨刢ode錛屽睘浜庣郴緇熻繘紼嬨?/div>
PID == 1鐨勬槸init榪涚▼銆傝繖涓槸涓涓互root榪愯鐨勭敤鎴瘋繘紼?/div>
fork錛屾垜鏈夌湅鍒頒竴涓瘝fork hope...鎴戣寰椾笉閿欙紝鎴戜篃甯屾湜鎴戣兘fork鍑篽ope...
fork鐨勮繑鍥炵姸鎬佹槸鏈夊師鍥犵殑錛孉PUE鐨勮В閲婅繕?shù)笉閿欏?/div>
fork 鍦?鐖惰繘紼嬩腑榪斿洖瀛愯繘紼嬬殑 PID錛屽洜涓烘病鏈変換浣旳PI鑳界煡閬?child process id錛岃屼笖child鍙兘浼?xì)鏈夊緢澶氥傘傘?/div>
fork 鍦?瀛愯繘紼嬩腑榪斿洖0錛屾槸鍥犱負(fù)0鏄痵wapper榪涚▼錛屾墍浠ユ病鍏崇郴錛涗篃娌″繀瑕佽繑鍥炵埗榪涚▼ID錛屽彲浠ラ氳繃getppid()寰楀埌銆?/div>
fork鍚庯紝瀛愯繘紼嬬埗榪涚▼鍏變韓姝f枃 RO
RW ZI Heap Stack鏄埗榪涚▼鐨勫壇鏈紝鍓湰鎰忓懗鐫copy
linux宸茬粡鏈夊緢澶氫嬌鐢–OW浜?copy-on-write)錛岃繖涓笢瑗垮簲璇ユ槸瑕佸熷姪MMU
鍥犱負(fù)鍩烘湰fork鍚庝細(xì)璺焑xec錛岄偅鏍峰瓙鎵鏈夌殑涓滆タ鍙堥兘闇瑕侀┈涓婅鏇挎崲鎺?/div>
閮借緗負(fù)Read Only錛屾棤璁烘槸parent榪樻槸child鍙涓涓瘯鍥句慨鏀癸紝閭d箞灝眂opy錛屽崟浣嶅簲璇ユ槸MMU鐨凱age
linux鏈夋彁渚沜lone錛岃繖涓笢瑗垮彲浠ョ敱璋冪敤鑰呮帶鍒朵粈涔堜笢瑗挎槸瑕佸拰鐖惰繘紼嬪叡浜殑錛屾垜榪樻病鐪嬪埌pthread鐨勫疄鐜幫紝鐚滄兂搴旇灝辨槸閫氳繃榪欎笢瑗垮疄鐜拌祫婧愬叡浜殑銆?/div>
tips:{
瀵逛簬瀛楃涓叉眰闀垮害錛宻izeof浼?xì)璁〗帡null錛岃繖涔熸甯革紝鍥犱負(fù)sizeof()鏄畻memory琚垎閰嶇殑澶у皬錛泂trlen璁$畻鐨勬槸鏈夋晥瀛楃鐨勯暱搴︼紝涓嶅寘鍚玭ull銆?/div>
濡傛灉瀛楃涓叉槸甯擱噺錛宻izeof鑳藉湪緙栬瘧鏃惰浼樺寲錛屼篃鍙樻垚甯擱噺錛宻trlen鍒欐槸鍑芥暟璋冪敤涓嶈兘琚紭鍖栥?/div>
}
vfork
鍏蜂綋瀹炵幇鎴戞病鏈夊叿浣撳幓鎯籌紝榪欎釜涓滆タ涔熸病鏈変粈涔堢壒鍒殑錛岃窡fork涓嶄竴鏍風(fēng)殑鏄紝浠栧繀欏繪帴涓奺xec or exit錛屽惁鍒欎細(xì)run鍦ㄧ埗榪涚▼絀洪棿鑰屼笉鍋氫換浣曞鍒?/div>
鎵浠ヤ細(xì)鏈夊悓姝ワ紝鍦ㄥ瓙榪涚▼榪樻湭call exec or exit鍓嶏紝鐖惰繘紼嬩細(xì)琚玸uspend銆傝涓嶇劧鐖惰繘紼嬪彈鐨勫獎(jiǎng)鍝嶄究鏄湭鐭ョ殑銆?/div>
鍙﹀榪欓噷涔熸湁璁ㄨexit鍑芥暟鍦ㄥ仛娓呯悊宸ヤ綔鏃跺嫻佺殑澶勭悊
搴旇鏄 涓鑸琫xit涓嶄細(xì)鍘誨仛鍏抽棴嫻佺殑鍔ㄤ綔錛岃屾妸榪欎歡浜嬫儏鐣欑粰kernel錛屽彧鏄痜lush stream灝卞ソ錛屽惁鍒欑被浼奸亣鍒皏fork榪欑浼?xì)鍦ㄧ埗杩浗E嬬┖闂村仛浜嬫儏鐨勶紝
濡傛灉call exit鎶婃祦緇欏叧闂簡(jiǎn)錛屼細(xì)鏈変竴浜涗笉棰勬湡鐨勭粨鏋溿?/div>
鐖惰繘紼嬫彁鍓嶇粓姝紝閭d箞瀛愯繘紼嬬殑鐖惰繘紼嬮兘浼?xì)琚|負(fù)1--> init process.
init process浼?xì)湄?fù)姣忎釜瀛愯繘紼嬫棤璁烘槸鑷繁fork鍑烘潵鐨勮繕鏄洜涓虹埗榪涚▼鎻愬墠緇堟鑰岄鍏葷殑鍋歸ait鑾峰彇緇堟鐘舵侊紝閬垮厤zombie榪涚▼
澶勭悊鏂瑰紡搴旇鏄敹鍒癝IGCHLD鍚巆all wait(null)
wait緋誨垪鐨勫嚱鏁拌繕铔鐨?..
瀵逛簬涓嶆兂浣胯嚜宸辯殑瀛愯繘紼嬪浜巣ombie鐘舵佺殑錛岃嚜宸辨湁榪樻兂鍋氫竴浜涗簨鎯呯殑涓斾笉鎯沖叧蹇?jī)瀛悩q涚▼緇撴潫鐘舵佺殑鍙互fork涓ゆ錛宔xit絎竴嬈″嚭鏉ョ殑榪涚▼錛寃ait浠栵紝鐒跺悗絎簩嬈ork鍑烘潵鐨?/div>
榪涚▼鐨勭埗榪涚▼灝卞彉鎴恑nit浜?jiǎn)锛屼笉杩囬渶瑕佷嬌鐢ㄨ繖縐嶆妧宸х殑Case鎴戞病鎯沖埌銆傘傘?br />
鍏充簬exec緋誨垪鍑芥暟錛屾垜鎯蟲(chóng)渶濂借繕鏄浣忥紝鍥犱負(fù)緇忓父浼?xì)鐢ㄥQ屼笉鑳芥瘡嬈$敤閮藉幓鏌ュ惂銆?br />涓鍏?涓紝exec鑳界粰鐨勬渶澶氬氨榪欎笁涓弬鏁幫紝瑕乺un鐨勭▼搴忚礬寰勶紱瑕佺粰run鐨勭▼搴忕殑鍙傛暟錛涜緇檙un鐨勭▼搴忕殑鐜鍙橀噺
鍏朵腑鍙湁execve鏄?system call錛屽叾浠栭兘鏄簱鍑芥暟銆?br />execve(const char* name, char* const argv[], char* const envp[])

榪欓噷鍙堟湁璁蹭笁涓敤鎴稩D鐨勭敤娉?br />瀹為檯鐢ㄦ埛ID錛涙湁鏁堢敤鎴稩D錛涗繚瀛樼殑璁劇疆鐢ㄦ埛ID

榪欓噷鏈夎涓涓狢ase錛屽簲璇ョ畻緇忓吀Case錛屼篃鍙湁綾諱技Case鎵嶈兘璁╀綘鏄庣櫧淇濆瓨鐨勮緗敤鎴稩D鐨勭敤閫?br />
man紼嬪簭涓鴻緗敤鎴稩D/璁劇疆緇処D錛屽氨浼?xì)鍦ㄤ袱绉嶆潈闄愪腑鍒囨崲銆?br />榪愯man鐨勬椂鍊?
real user id == login id
effective user id == man
saved effective user id == man

鍦╩an璁塊棶瀹屼粬鑷繁鎷ユ湁鐨勯偅浜沠ile鍚庯紝鎯寵繍琛屼竴浜涘懡浠all setuid(getuid())鍥犱負(fù)鎴戜滑涓嶆槸root
real user id == login id
effective user id == login id
saved effective user id == man
榪欎釜鏃跺欒繍琛屽懡浠ゅ氨鏄垜浠琹ogin鏃跺欑殑user鐨勬潈闄?br />
瀹屼簡(jiǎn)鍚庨潰鎯寵緗洖鍘葷殑鏃跺欏啀call setuid(euid),榪欓噷euid灝辨槸man錛屼箣鍓嶅彲浠ヤ繚瀛樺湪man鑷繁鐨凜ontext涓?br />榪欎釜鏃跺檈uid == saved effective user id錛屾墍浠ffective user id鍙堣璁劇疆涓簃an錛岃繖縐嶆儏鍐典笅濡傛灉娌℃湁saved effective user id閭g敤鎴鋒潈闄愬氨鍥炰笉鍘諱簡(jiǎn)銆?br />real user id == login id
effective user id == man
saved effective user id == man

鎵浠ユ敞鎰弒etuid 濡傛灉鏄痳oot鐢ㄦ埛錛岄偅涔堜笁涓狪D閮戒細(xì)琚緗垚鐩爣ID錛屽鏋滀笉鏄?br />鍒檈ffective user id鍙兘浼?xì)鏀瑰?褰撶洰鏍嘔D涓?real user id or saved effective user id鐨勬椂鍊欙紝浠庤璁$殑瑙掑害浠旂粏鎯籌紝榪欐牱瀛愪篃鍚堢悊銆?br />
system鐨勫疄鐜?br />execel shell錛岃屼笉鏄洿鎺ュ幓fork/execel鏈韓瑕乻ystem鐨勭▼搴忥紝閭f牱浼?xì)鍙樺緱寮傚父澶嶆潅锛屼綘闇瑕佽В鏋恈mdString錛屽垎紱誨嚭紼嬪簭鍜屽弬鏁幫紝甯﹀叆鍜宻hell涓鏍風(fēng)殑鐜鍙橀噺錛屾壘鍒扮洰鐨勭▼搴忥紝execute浠栵紝鐒跺悗甯﹀洖緇撴灉銆?br />涓鑸細(xì)鍘籧all system鐨勭▼搴忎笉瑕佷嬌鐢╯et-user-id錛岃繖鏍峰鏄撳鑷村畨鍏ㄦ硠闇層傚鏄撹system鍑烘潵鐨勯偅涓猵rocess鏉冮檺鎵╁ぇ錛屼笉鏄撴帶鍒躲?br />
璐翠竴涓猻ystem鐨勫疄鐜幫紝闈炲父nice
#include <sys/types.h>
#include 
<signal.h>
#include 
<stdlib.h>
#include 
<unistd.h>
#include 
<paths.h>
#include 
<sys/wait.h>

extern char **environ;

int
system(
const char *command)
{
  pid_t pid;
    sig_t intsave, quitsave;
    sigset_t mask, omask;
    
int pstat;
    
char *argp[] = {"sh""-c", NULL, NULL};

    
if (!command)        /* just checking */
        
return(1);

    argp[
2= (char *)command;

    sigemptyset(
&mask);
    sigaddset(
&mask, SIGCHLD);
    sigprocmask(SIG_BLOCK, 
&mask, &omask);
    
switch (pid = vfork()) {
    
case -1:            /* error */
        sigprocmask(SIG_SETMASK, 
&omask, NULL);
        
return(-1);
    
case 0:                /* child */
        sigprocmask(SIG_SETMASK, 
&omask, NULL);
        execve(_PATH_BSHELL, argp, environ);
    _exit(
127);
  }


    intsave 
= (sig_t)  bsd_signal(SIGINT, SIG_IGN);
    quitsave 
= (sig_t) bsd_signal(SIGQUIT, SIG_IGN);
    pid 
= waitpid(pid, (int *)&pstat, 0);
    sigprocmask(SIG_SETMASK, 
&omask, NULL);
    (
void)bsd_signal(SIGINT, intsave);
    (
void)bsd_signal(SIGQUIT, quitsave);
    
return (pid == -1 ? -1 : pstat);
}

榪欓噷浣跨敤浜?jiǎn)vfork鍜宔xecve錛屼粬鐨勫疄鐜扮粏鑺備互鍙?qiáng)鍙U繪鎬у仛鐨勮繕鏄洰瀹岀編鐨勩?br />
浣滀笟錛?br />8.1 濡傛灉騫墮潪濡傛閭d箞exit灝辨病鏈夊叧闂璼tdout錛岃繖鍦ㄤ箣鍓嶄篃璁茶繃涓鑸殑C搴撻兘涓嶄細(xì)榪欎箞澶氭涓涓撅紝涓鑸粬浠彧浼?xì)鍘籪lush stream涓嶄細(xì)close
鎵浠ュ鏋滄兂杈懼埌閭g鏁堟灉錛屽彲浠ヨ嚜宸卞幓鏄劇ず鍘籪close

8.2
榪欎釜鏈夌偣澶嶆潅鍟︼紝vfork鍚庣悊璁轟笂搴旇绔嬪嵆璋冪敤exec鎵嶅錛屽鏋滀笉鍘籩xec or exit錛岄偅涔堝瓙榪涚▼灝眗un鍦ㄧ埗榪涚▼鐨勬暟鎹┖闂達(dá)紝濡傛灉瀛愯繘紼嬩粠鍙﹀涓涓嚱鏁拌繑鍥烇紝涓峜all exit錛岄偅涔堝氨浼?xì)涓鐩寸瓑鍒癿ain鍑芥暟閫鍑猴紝鐖惰繘紼嬫墠浼?xì)鎵ц锛屼絾鏄瘶q欎釜鏃跺檚tack閲岄潰宸茬粡娌℃湁浠諱綍涓滆タ浜?jiǎn)锛屾垜涓嵓嫯瀹氫細(xì)鍙戠敓浠涔堜簨鎯?br />
8.5
涓嶆彁渚涜繑鍥炰繚瀛樼殑鏈夋晥鐢ㄦ埛ID鐨勫嚱鏁?br />
8.6 8.7紼嶅悗璐翠笂source code.




Torres 2013-05-31 00:25 鍙戣〃璇勮
]]>LTZ鍋氫綔涓氫箣APUE5http://www.shnenglu.com/xieshuo/archive/2013/05/28/200655.html Torres TorresTue, 28 May 2013 12:00:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/05/28/200655.htmlhttp://www.shnenglu.com/xieshuo/comments/200655.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/05/28/200655.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200655.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200655.html
鎵璋撶殑鍚姩渚嬬▼鐢–鍐欒搗鏉ヤ竴鑸槸榪欐牱錛屼絾涓鑸儏鍐佃繖涓細(xì)鏄眹緙栨潵鍐?br />exit(main(argc, argv))

exit鍑芥暟
_exit鍜宊Exit绔嬪嵆榪涘叆kernel錛宔xit鍒欓渶瑕佸仛瀹屽繀瑕佺殑娓呯悊宸ヤ綔錛屽厛run娉ㄥ唽榪囩殑緇堟澶勭悊紼嬪簭錛岀劧鍚庢竻鐞嗘病鏈夊叧闂殑嫻併?br />exit _Exit鏄疘SO C鏍囧噯錛宊exit鍒欐槸Posix錛屾墍浠ュご鏂囦歡涓嶄竴鏍?br />鍓嶉潰鏄痵tdlib.h 鍚庨潰鏄痷nistd.h

鍏充簬malloc錛宑alloc錛宺ealloc
malloc鍒嗛厤鐨勭┖闂村垵濮嬪間笉紜畾錛沜alloc浼?xì)甯繖娓呴浻灱況ealloc鍙互鍔ㄦ佸垎閰嶅悎閫傜殑澶у皬絀洪棿錛屽鏋滀笉澶熶細(xì)鏈塩opy鍘熷鏁版嵁鐨勫姩浣滐紝鎵浠ュrealloc涔嬪墠鐨刴emory璁板綍鎸囬拡涓嶆槸濂芥柟娉曪紝鍥犱負(fù)realloc瀹屽氨鍙兘澶辨晥銆?br />
榪欎笁涓兘鏄幓call sbrk鏉ユ墿澶х緝?yōu)畯heap
浣嗕竴鑸彧鏄墿澶э紝鍦╢ree鐨勬椂鍊?malloc 浼?xì)鎶婃墿澶х?memory cache璧鋒潵(virual memory)

setjmp, longjmp
璺寵漿鍑芥暟錛屾敮鎸佽法瓚婂嚱鏁板撫鐨勮煩杞紝goto鏄嚱鏁板唴璺寵漿
娉ㄦ剰: longjmp鍒皊etjmp鐨勭偣鍚庯紝涓鑸儏鍐?鍏ㄥ眬/灞閮?灞閮ㄩ潤(rùn)鎬佸彉閲忛兘娌″姙娉曟仮澶嶅埌setjmp鏃剁殑鍊鹼紱register/volatile鍙橀噺鍦ㄧ紪璇戝悗(cc -O)浼?xì)鏀惧埌瀵勫瓨鍣ㄤ腑锛寴q欎簺閮借兘瀹炵幇鍥炴粴銆傝繖涔熷氨璇存槑setjmp鐨勬椂鍊欙紝jmp_buf騫舵病鏈変繚瀛樿繖浜涘箋?br />
7.1 濡傛灉涓嶈皟鐢╮eturn 鍜?exit 鍑芥暟榪斿洖鍊肩敤浜?jiǎn)printf鐨勮繑鍥炲鹼紝Orz...鎴戞病鎯蟲(chóng)竻妤氭庝箞鍋氱殑銆?br />
7.2 鍙栧喅浜巔rintf闈㈠鐨勮澶囩被鍨嬶紝琛岀紦鍐茬殑璇濓紝紕板埌鎹㈣灝變細(xì)琚緭鍑猴紝濡傛灉鏄叏緙撳啿錛岄偅涔堝垯瑕佷箞闇瑕乧all fflush錛岃涔堢瓑stream琚玞lose銆?br />
7.3 涓嶇敤鍙傛暟浼犻掞紝涓嶇敤鍏ㄥ眬鍙橀噺錛孫rz...瑕佷紶閫抋rgc, argv -->NO

7.4 閫氬父null灝辨槸0錛屼竴鑸寚閽堜負(fù) null 鐨勬椂鍊欐剰鍛崇潃絀烘寚閽堝紩鐢紝涓鑸?閮戒笉浼?xì)鍘绘斁鏁版嵁锛孯O鐨勮搗濮嬩綅緗湪涓涓洿楂樼殑鍦板潃錛?浼?xì)鏄棤鏁堢殑锛岀敤鏉ユ寚寮暯E嬪簭鍑洪敊銆?br />
7.5
typedef void func(void);
int atexit(func* fp);
鎴栬?br />typedef void (*func)(void);
int atexit(func fp);
鎴戝枩嬈笅闈㈤?U嶏紝鍥犱負(fù)鍑芥暟鏈韓灝辨槸涓猵ointer銆?br />
7.6 calloc浼?xì)灏嗗垎閰嶇殑绌洪棿娓呴浻灱孖SO C涓嶄繚璇?鍊煎拰絀烘寚閽堢浉絳?br />
7.7 size杈撳嚭鐨勬槸闈?rùn)鎬佺殑RO錛孯W錛孼I錛屽儚Heap錛孲tack鏄痳untime鎵嶆湁鐨勩?br />
7.8 鐞嗚涓婁笉甯ebug淇℃伅鐨?out鏂囦歡搴旇澶у皬閮芥槸絳変簬RO+RW+ZI鐨勩?br />
7.9 榪欏氨鏄?a鍜?so鐨勫尯鍒簡(jiǎn)錛宭ink鐨勬椂鍊欓潤(rùn)鎬佸簱浼?xì)琚洿鎺opy榪囨潵錛屾墍浠ヤ細(xì)鍙樺ぇ寰堝銆?br />
7.10 鍙橀噺浣滅敤鍩熺殑鏁呬簨銆?img src ="http://www.shnenglu.com/xieshuo/aggbug/200655.html" width = "1" height = "1" />

Torres 2013-05-28 20:00 鍙戣〃璇勮
]]>
LTZ鍋氫綔涓氫箣APUE4http://www.shnenglu.com/xieshuo/archive/2013/05/28/200624.html Torres TorresTue, 28 May 2013 11:24:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/05/28/200624.htmlhttp://www.shnenglu.com/xieshuo/comments/200624.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/05/28/200624.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200624.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200624.html闃呰鍏ㄦ枃

Torres 2013-05-28 19:24 鍙戣〃璇勮
]]>
LTZ鍋氫綔涓氫箣APUE3http://www.shnenglu.com/xieshuo/archive/2013/05/27/200611.html Torres TorresMon, 27 May 2013 08:42:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/05/27/200611.htmlhttp://www.shnenglu.com/xieshuo/comments/200611.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/05/27/200611.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200611.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200611.html榪欓噷瑕佺◢寰啓涓浜沴inux涓嬪鏉傜殑鏉冮檺綆$悊錛屽簲璇ュ彧鏄竴灝忛儴鍒嗙煡璇嗭紝榪樻湁涓浜涘叧浜巆ap鐨勪笢瑗夸互鍚庡啀鐪嬨?/p>

涓巔rocess鍏寵仈鐨処D
璋乪xecute榪欎釜process鐨勪漢縐頒負(fù)real user id錛屽簲璇ュ氨鏄櫥闄嗘椂浣跨敤鐨剈ser
real group id涔熶竴鏍?
涓鑸湪涓涓櫥闄哠ession涓紝榪欎袱涓奸兘涓嶄細(xì)鏀瑰彉錛屼絾鏄秴綰х敤鎴瘋繘紼嬪彲浠ユ敼鍙?br />鍍廇ndroid涓瘡涓狝PK鏈夌嫭鑷殑User id錛岀劧鍚庣被浼紃ild涔嬬被鐨刵ative deamon process灝變細(xì)灝濊瘯鏀瑰彉鑷繁鐨剈ser id涓虹被浼紃adio涔嬬被鐨勪笢瑗褲?/p>

鍦ㄨ繍琛屼腑媯(gè)鏌ユ潈闄愭墍浣跨敤鐨刬d縐頒負(fù)鏈夋晥鐢ㄦ埛id錛宔ffective user id
鐒跺悗榪樻湁鏈夋晥緇処D
闄勫姞緇処D

涓鑸湁鏁堢敤鎴稩D == 鐪熷疄鐢ㄦ埛ID錛?鏈夋晥緇処D == 鐪熷疄緇処D
浣嗘槸濡傛灉鍦ㄥ彲鎵ц鏂囦歡鐨剆t_mode涓湁璁劇疆 set-user-ID/set-group-ID
閭e湪鎵ц榪欎釜鏂囦歡鐨勬椂鍊?鏈夋晥鐢ㄦ埛ID鍜屾湁鏁堢粍ID浼?xì)鍙樻垚鏂囦欢鐨刼wner

涓鑸湁璁劇疆set-user-ID/set-group-ID鐨勭▼搴忛兘浼?xì)鑾峰緱棰濆鐨勬潈闄?/p>

鍏充簬鏂囦歡鏉冮檺錛屾湁涓浜涘鏄撳紩璧瘋瑙g殑錛屼篃榪樻湁涓浜涙垜鑷繁涔熸病鏈夌悊瑙f竻妤氱殑

鏂囦歡鏉冮檺姣旇緝濂界悊瑙o紝O_TRUNC闇瑕佹枃浠跺叿鏈夊啓鏉冮檺銆?br />
鏂囦歡澶圭殑鍐欐潈闄愶紝搴旇灝辨槸綾諱技鑳戒笉鑳藉湪鍏朵腑create/update/delete鏂囦歡鍜屾枃浠跺す
鏂囦歡澶圭殑璇繪潈闄愶紝搴旇灝辨槸璇繪枃浠跺す閲岄潰鐨勬枃浠?鏂囦歡澶瑰垪琛紝閫氬父鎴戜滑 ls 褰撳墠鏂囦歡澶瑰氨蹇呴』鍏鋒湁璇繪潈闄?br />鏂囦歡澶圭殑鎵ц鏉冮檺錛岃繖涓笢瑗垮惉璇村張鍙悳绱綅錛岄氬父鎴戜滑cd XXX錛屽氨蹇呴』鍦ㄥ綋鍓嶆枃浠跺す涓嬫悳绱XX鏄惁瀛樺湪錛岀劧鍚庡氨鏄綋鎴戜滑璁塊棶綾諱技榪欑寰堥暱璺緞鐨勬枃浠?aaa/bbb/ccc/dd.txt
瀵筧aa錛宐bb錛宑cc蹇呴』鍏鋒湁鎵ц鏉冮檺錛屽氨鏄悳绱?/p>

涓鑸鏋滃叿鏈夎鏉冮檺灝卞簲璇ュ氨鍙互鎼滅儲(chǔ)錛屽鏋滆繖涔嬪墠鏈夊尯鍒紝灝辨槸搴旇鏄悳绱㈢殑鑼冨洿澶т簬鑳借鍒扮殑鍐呭銆?br />涔熷氨鏄箣鍚庨渶瑕佺煡閬撲竴涓狥older鏈韓閲岄潰鏈夊啓浠涔堝唴瀹癸紝鎴戠洰鍓嶇煡閬撶殑鏄竴瀹氭湁褰撳墠鐨勬枃浠跺垪琛?-> TODO: 鐪嬫儏鏅垎鏋?or 鍘葷湅涓?ls 鐨勫疄鐜幫紝ls閲岄潰鏈夋瘮杈冨鍙傛暟鏈変簺鏄渶瑕亁鐨勬湁浜涙槸闇瑕乺鐨勶紝渚嬪 ls -l濡傛灉娌℃湁鎵ц鏉冮檺灝卞彧鑳芥嬁鍒?name ,鑳界煡閬撴槸folder榪樻槸file錛岄櫎姝や箣澶栧叾浠栫殑涓滆タ閮芥嬁涓嶅埌錛屾枃浠舵湰韜殑鏉冮檺錛寀ser錛実roup

-->linux鐩綍涓褰曠殑搴旇鏄彧鏈変袱涓笢瑗?inode & name.榪欎笌鏂囦歡緋葷粺鐨勫疄鐜版湁鍏熾?/span>

鍙﹀澧炲垹鏂囦歡閮介渶瑕乄X鏉冮檺

鍙﹀鍐呮牳瀵規(guī)枃浠舵搷浣滄潈闄愮殑鍒ゆ柇欏哄簭...濡傛灉鏄痮wner灝變細(xì)鐪媜wner鏉冮檺錛実roup鏉冮檺灝變笉浼?xì)鐪嬩簡(jiǎn)锛屽鏋滃湪group涓垯others涔熷氨涓嶇湅浜?jiǎn)锛寴q欎釜閫昏緫涓婃甯革紝鑰屼笖鍙互鎯充竴涓媖ernel鐨勫疄鐜幫紝涓瀹氭槸if-else鐨勫垽鏂嚭緇撴灉鍚庣洿鎺ヨ繑鍥炪?/p>


榪欓噷灝辮鎻愬鏋滄柊寤烘枃浠?鏂囦歡澶圭殑鏃跺欐枃浠跺す鐨刼wner user id鍜実roup id鏄皝
user id浼?xì)鏄痯rocess 鏈夋晥鐢ㄦ埛ID
group id鍙互鏈変袱縐嶉夋嫨鐖秄older鐨刧roup id錛沷r process鏈夋晥緇処D
linux涓牴鎹枃浠剁郴緇熺殑涓嶅悓鏈夌殑鍙互鍦╩ount fs鐨勬椂鍊欓夋嫨

鏂囦歡闀垮害: st_size
lseek鍒版枃浠舵湯灝句箣鍚庣殑絀洪棿錛屼細(xì)鐓ф垚鏂囦歡絀烘礊
鏂囦歡闀垮害浼?絀烘礊鐨勫ぇ灝忥紝浣嗘槸榪欎簺絀烘礊鏈繀浼?xì)鍗犵敤纾佺洏绌洪棿銆?/span>
du 鍛戒護(hù)鍙互鐪嬬鐩樼┖闂村ぇ灝?/span>

絎﹀彿閾炬帴鍜屾墍璋撶殑紜摼鎺ュ畬鍏ㄦ槸涓ゅ洖浜嬶紝寤鴻緇嗚4.14錛屼笉瑕佸幓涓婄綉search綾諱技鎴戣繖縐嶈嚜宸辮褰曠粰鑷繁鐪嬬殑blog...:(

榪欑珷鍐呭姣旇緝澶氳屼笖鏉傦紝涓昏鏄痵tat涓殑姣忎釜鍙傛暟鐨勬剰涔夛紝闇瑕佹濊冩兂娓呮鐨勪笢瑗夸篃姣旇緝澶氾紝鏈夋瘮杈冨鍏充簬鏂囦歡鎿嶄綔鐨凷ystem Call

浣滀笟寮濮?
涔嬪悗鍙啓鏈夌偣鎰忎箟鐨勯鐩紝鏃犳剰涔夌殑涔熸病浠涔堝彲浠ュ啓鐨刾ass
4.1 stat鍜宭stat鐨勫尯鍒紝stat鍩烘湰涓嶄細(xì)鍏沖績(jī)鏄惁鏄疭_IFLNK(絎﹀彿閾炬帴)錛屽簲璇ユ槸鐪嬪埌S_IFLNK浼?xì)寰涓嬪幓鎵劇湡姝g殑File錛岀劧鍚庢嬁鍒板睘鎬у?/span>
鑰宭stat鏃侀亾S_IFLNK鍒欎細(xì)鐩存帴榪斿洖銆傜涓嬈$湅鍒拌繖鏍風(fēng)殑鍑芥暟璁捐鎬殑錛屾垜鐨勫垵濮嬫劅瑙夋槸鍙嶇殑銆傛垜瑙夊緱stat鏄竴涓猚ommon鐨勮璁★紝涓嶄細(xì)閽堝涓嶅悓鐨凢ile綾誨瀷鏉ュ仛涓浜涘尯鍒侽rz...鏈鍚庝笉鏄?/span>

4.2 umask 777鎰忓懗鐫rwxrwxrwx鍏ㄩ儴鍙樻病鎺夛紝浣嗘槸榪欎篃娌″叧緋伙紝涓嶇煡閬撳嚭棰樹(shù)漢鐨勬剰鎬?/span>

4.5 鐩綍鍜岀鍙烽摼鎺ョ殑闀垮害涓嶅彲鑳戒負(fù)0錛岀洰褰曞垱寤哄嚭鏉ュ氨浼?xì)鍖呭? 鍜?..鑰屼笖 . 鐨刬node鎸囧悜鑷繁鏈韓浼?xì)鍗牸倎鐩樈I洪棿錛岀鍙烽摼鎺ヨ偗瀹氫篃鏄笉鑳戒負(fù)0鐨勶紝鍏朵腑鏈夊瓨鎸囧悜鐨勯摼鎺ath

4.6 榪欎釜鏈夌偣鎰忔濓紝鍚庨潰璐翠唬鐮?/span>

4.7 榪欎釜鐪嬩簡(jiǎn)涓嬬瓟妗堬紝娌$湅鎳?gt;涓轟粈涔坘ernel榛樿鐨勫垱寤烘枃浠惰祴浜堢殑鏉冮檺“鍙兘浼?xì)锛屼篃鍙兘涓嶄?#8221;鍙梪nmask鐨勫肩殑褰卞搷?

4.8 du df鐨勫尯鍒?..

4.9 ~ 鍚庨潰鐨勯澶ф鐪嬩簡(jiǎn)涓嬶紝涓嶆兂鍐欎簡(jiǎn)錛屽ソ澶氱粏鑺?..

 


 



Torres 2013-05-27 16:42 鍙戣〃璇勮
]]>
LTZ鍋氫綔涓氫箣APUE2http://www.shnenglu.com/xieshuo/archive/2013/05/22/200521.html Torres TorresWed, 22 May 2013 14:58:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/05/22/200521.htmlhttp://www.shnenglu.com/xieshuo/comments/200521.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/05/22/200521.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200521.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200521.html
絎簩绔犳槸鍏充簬POSIX浠ュ強(qiáng)XSI鐨勪竴浜涙爣鍑嗗拰limitation錛屽氨涓嶅仛浣滀笟浜?jiǎn)锛岀洿鎺ュ埌绗笁绔犲Q屾病鏈夌潯鍗堣錛屾湁浜涘洶錛屼笉瑕佸啓閿?..

鍏堣創(chuàng)涓浜涙瘮杈冨ソ鐨勬濊礬
(1)
鍦ˋF_LOCAL(Posix: AF_UNIX)鐨凷ocket緙栫▼涓紝瀵笴lient绔潵璇撮渶瑕乧onnect
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen)
榪欓噷闇瑕佺粰serv_addr涓涓猯ength錛岃繖涓猯ength鏄竴涓湡瀹炵殑鍦板潃闀垮害銆?br />褰搒ocket涓篈F_UNIX鐨凷ocket鏃?socket address涓簊ockaddr_un閲岄潰瀛樻斁鐫鍦板潃綾誨瀷浠ュ強(qiáng)socket path錛屾垜浠渶瑕佺煡閬搒ockaddr_un涓湡姝e瓨鏀炬暟鎹殑闀垮害銆?br />
鍑芥暟offsetof鏄笉閿欑殑閫夋嫨
榪欎釜function鐨勫疄鐜扮湅璧鋒潵鍙互瀛︿範(fàn)錛屾垜鍏堟妱涓孌佃創(chuàng)涓嬮潰

#define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER )

瀹忓姛鑳斤細(xì)鑾峰緱涓涓粨鏋勪綋鍙橀噺鎴愬憳鍦ㄦ緇撴瀯浣撲腑鐨勫亸縐婚噺銆?/strong>

1. ( (TYPE *)0 ) 灝嗛浂杞瀷涓篢YPE綾誨瀷鎸囬拡;
2. ((TYPE *)0)->MEMBER 璁塊棶緇撴瀯涓殑鏁版嵁鎴愬憳;

3. &( ( (TYPE *)0 )->MEMBER )鍙栧嚭鏁版嵁鎴愬憳鐨勫湴鍧錛屽嵆鐩稿浜?鐨勫亸縐婚噺錛岃鐨勫氨榪欎釜;
4.(size_t)(&(((TYPE*)0)->MEMBER))緇撴灉杞崲綾誨瀷錛宻ize_t搴旇鏈緇堜負(fù)unsigned int綾誨瀷銆?
姝ゅ畯鐨勫閥濡欎箣澶勫湪浜庡皢 0 杞崲鎴?TYPE*)錛岃繖鏍風(fēng)粨鏋勪綋涓垚鍛樼殑鍦板潃鍗充負(fù)鍦ㄦ緇撴瀯浣撲腑鐨勫亸縐婚噺銆?br />
榪欓噷涓昏榪樻槸鍒╃敤浜?'->' 榪欎釜絎﹀彿鐨勫姛鑳斤紝緙栬瘧鍣ㄨВ鏋愯繖涓鍙風(fēng)殑鏃跺欏簲璇ュ氨鏄氳繃鍋忕Щ閲忓彇鍊鹼紝鎵浠ヨ繖閲屽厛瀹氫箟濂藉彇鍊艱鍒?TYPE*)鐒跺悗鍒╃敤鍋忕Щ閲忓彇鍊煎弽鍚戝啀鍙栧湴鍧錛屽啀鐒跺悗鍥犱負(fù)璧峰鍦板潃鏄?錛屽彇鍥炵殑鍦板潃灝卞彉鎴愪簡(jiǎn)鐪熸鐨勫亸縐婚噺銆?br />榪樻湁涓涓煡閬搈ember姹傛暣浣撶殑Ptr鐨凪arco搴旇涔熻洰濂界敤錛屾嫭鍙鋒瘮杈冨錛屾垜娌″ご鍘葷湅鍏蜂綋瀹炵幇浜?..

 

#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr – offsetof(type,member) );})

瀹忓姛鑳斤細(xì)浠庣粨鏋勪綋錛?strong>type錛夋煇鎴愬憳鍙橀噺錛?strong>member錛夋寚閽堬紙ptr錛夋潵姹傚嚭璇ョ粨鏋勪綋錛?strong>type錛夌殑棣栨寚閽堛?br />
(2)
鏈夎璁轟竴浜涗笢瑗匡紝娌℃湁鎼炴竻妤氾紝璐村湪榪欓噷浠ュ悗鏈夊績(jī)鍔涗簡(jiǎn)鍐嶇湅錛屽湪鐪婻ild錛岀劧鍚巔thread鍦ㄥ仛綰跨▼鍚屾鐨勬椂鍊欓渶瑕佸厛lock錛屼篃璁稿ぇ瀹墮兘鏄繖鏍峰仛錛屼篃涓鐩磋繖鏍峰仛錛屼絾鏄獊鐒跺氨鎯沖埌涔嬪墠Java鐨勬椂鍊欒璁鴻繃鐨勪笢瑗夸負(fù)浠涔坵ait/notify 涓瀹氳鍦ㄤ竴涓猻ynchronize block涓紝褰撶劧浣犲彲浠ヨ錛屽鏋滀笉浼?xì)鏈塭xception鎶涘嚭錛屼綘涔熻繕鍙互璁瞱ait鏈潵灝變細(xì)鍏堥噴鏀緇ock鐒跺悗鎶婂綋鍓嶇殑thread鏀懼埌Object waiting thread pool涓劧鍚庢寕璧峰綋鍓嶇嚎紼嬶紝瀹炵幇灝辨槸榪欐牱瀛愶紝浣嗘槸浠庤璁℃潵璁詫紝鍘熷洜鎴戞病鏈夋兂鐨勭壒鍒竻妤氾紝濡傛灉涓嶅幓lock錛屾槸涓嶆槸鍥犱負(fù)wait/notify鏈韓鏈夊緢澶氭搷浣滄病鍔炴硶鍋歮ulti thread...

鐒跺悗灝辨槸鍏充簬select鐨勪竴浜涜緟鍔╃殑Marco錛岀被浼糉D_SET錛孎D_ZERO涔嬬被鐨勶紝綆鍗曡灝辨槸涓涓猯ong鏁扮粍錛屾瘡涓厓绱犵殑姣忎釜bit浠h〃涓涓猣d錛岀劧鍚庡仛set錛宑lear涔嬬被鐨勫姩浣滐紝鏈澶т笉鑳借秴榪囬偅涓?024

浠婂ぉ鍏堝埌榪欓噷錛屽啓涓簭錛屾槑澶╂鏂?..Orz

(3)
緇х畫(huà)璁ㄨ涓滆タ
鏈変漢涓轟簡(jiǎn)鍦–++涓綔鍑虹被浼糐ava鍙互鑷姩閲婃斁鍐呭瓨鐨勪笢瑗匡紝涔熷氨鏄墍璋撶殑鏅鴻兘鎸囬拡錛孉ndroid鏈夊府蹇欏疄鐜皊trong pointer/weak pointer錛屼粬鐨勫ぇ姒傛剰鎬濆氨鏄敤涓涓涓夎呮潵鐪嬩綇褰撳墠new鍑烘潵鐨刼bject錛岄噰鐢ㄧ殑鏂瑰紡涓鑸槸寮曠敤璁℃暟錛岃繖縐嶆柟寮忎篃璁稿湪Design Pattern涓湁涓撻棬鐨勫悕瀛椼備竴鑸埄鐢ㄧ紪璇戝櫒瀵硅繖涓涓夎呭仛鑷姩閲婃斁鐨勬椂鍊欏幓媯(gè)鏌ヨ鏁板櫒錛岀湅鏄惁鑳介噴鏀句粬鐪嬬鐨刼bject錛孋++閲岄潰緙栬瘧鍣ㄤ細(xì)鑷姩鍘籧all ~Constructor灝變緥濡傚眬閮ㄥ彉閲忋?br />
鏈変竴浜涘鏉傜殑Case錛屽氨綆楁槸浜ゅ弶寮曠敤浜?jiǎn)锛孲trong Pointer/Weak Pointer灝辨槸涓轟簡(jiǎn)瑙e喅浜ゅ弶寮曠敤鐨勯棶棰橈紝浠庤涔変笂璁茬埗Object寮曠敤瀛怬bject錛岀敤SP錛屽弽榪囨潵鐢╓P
鍙SP涓?錛屽氨鍙互閲婃斁Memory

浠婂ぉ澶у鏈夎Java鐨刉eakReference錛孲oftReference錛屾垜灝卞惈緋婁簡(jiǎn)錛屾垜浠ヤ負(fù)榪欎笢瑗垮拰涓婇潰涓鏍楓?br />Java鐨刉eakReference錛孲oftReference璺熶笂闈㈣鐨勫畬鍏ㄤ笉涓鏍鳳紝鐢變簬娌″垎娓呮錛屾販娣嗕簡(jiǎn)銆侸VM灝變細(xì)澶勭悊寮曠敤浜ゅ弶鐨勯棶棰橈紝JVM澶勭悊寮曠敤浜ゅ弶鍙互浣跨敤綾諱技鏈夊悜鍥撅紝濡傛灉鍛堢幆鐘惰屼笖鐜腑鐨勪換鎰忕偣閮芥病鍔炴硶鍒癎C Roots(VM stack涓殑Reference/static reference/JNI reference)錛岄偅涔堝氨閮紾C鎺夊簲璇ヤ篃娌¢棶棰樸?br />鎵浠ava涓殑鎵璋撶殑WeakReference/SoftReference璺烻P/WP涓嶄竴鏍鳳紝Java涓櫘閫氳祴鍊肩殑reference閮芥槸寮哄彲鍙?qiáng)鐨凷trong Reference銆?br />WeakReference鍙槸鐢ㄦ潵鍏沖績(jī)涓嬮偅浜涘皢瑕佽鍥炴敹鍗存病鏈夊洖鏀剁殑Object錛屼竴鏃﹁GC Thread鎵埌灝變細(xì)琚噴鏀俱?br />鑰孲oftReference鏄疛VM瀵筄bject鐨凜ache錛屽彧瑕佸唴瀛樿凍澶熶笉浼?xì)琚噴鏀俱?br />
璐翠竴涓Android SP/WP鐨勯摼鎺ワ紝涔嬪墠鏈夊嵃璞$湅榪囥?br />http://blog.csdn.net/luoshengyang/article/details/6786239


(4)
Keep Thinking...
鏌愪漢璁╂垜鍐欎竴涓鐞嗗瓧絎︿覆鐨勫嚱鏁幫紝30min錛?nbsp;鎴戞庝箞涔熶笉鑳借浠栧け鏈涚殑錛屾槸鍚鏃犺11鐐瑰鐨勬椂鍊欐垜澶存湁澶氭檿錛屾垜寰堝紑蹇?jī)鐨勫湪閭i噷鍐欏Q屽緢鐩寸櫧鐨勮錛屾垜鑷繁鐢ㄧ殑鏈槸涓父鎴忔満錛屾病鍟ュソ鐜銆傜敤C鍐欎簡(jiǎn)涓紝鐒跺悗璺戝嚭鏉ョ殑緇撴灉鍑轟箮棰勬枡錛屾垜鎯沖彲鑳芥槸闀挎椂闂存寚鎵嬬敾鑴氭儻浜?jiǎn)~浠旂粏鎯充簡(jiǎn)涓嬩竴浜涙枃浠舵搷浣?br />
鐒跺悗浠旂粏鐪嬩簡(jiǎn)涓涓嬩簩榪涘埗鏂囦歡鍜屾枃鏈枃浠訛紝榪欎篃鏄籂姝d箣鍓嶇殑涓浜涚枒鎯戙?br />鍩烘湰姒傚康鏄?
鎴戣嚜宸辨劅瑙夋枃鏈枃浠跺拰浜岃繘鍒舵枃浠舵病鍟ュ尯鍒紝鏂囨湰鏂囦歡灝辨槸鏈夋槑紜櫘閫氳В鐮佹柟寮忕殑鏄劇ず瀛楃鐨勬枃浠訛紝鍙互鐞嗚В璇存枃鏈枃浠朵篃鏄竴縐嶄簩榪涘埗鏂囦歡錛屽彧涓嶈繃榪欎釜浜岃繘鍒舵枃浠剁殑瑙g爜鏂瑰紡鏄浐瀹氬ソ鐨?ASCII/UTF-8涔嬬被)

鐒跺悗灝辨槸璇誨啓鏂囨湰鏂囦歡鏃跺湪Windows涓婃湁涓浜涜漿鎹紝鍐欑殑鏃跺欎細(xì)鍦╘n鍓嶉潰鑷姩鍔犱笂\r錛岃鐨勬椂鍊欏弽榪囨潵錛孡inux鍒欐病鏈夊尯鍒?br />
鏈変竴浠朵簨鎯呮槸瑕佹槑紜煡閬撶殑
鍍弍rintf涔嬬被鐨勪笢瑗匡紝甯姪鎴戜滑杈撳嚭鐨勶紝鍏跺疄鎴戜滑寰printf閲岄潰濉炵殑鏄?int 鍊鹼紝榪欐槸涓涓簩榪涘埗鐨勫鹼紝浣嗘槸鎴戜滑浠巗tdout涓湅鍒扮殑鍒欏凡緇忓彉鎴愪簡(jiǎn)瀛楃錛屼竴瀹氭湁浜哄府蹇欏仛浜?jiǎn)铦{鎹?
鎴戝師鏈互涓簆rintf浼?xì)鏄瘚個(gè)鏌ョ洰鏍囨枃浠訛紝濡傛灉鐩爣鏂囦歡涓轟簩榪涘埗鍒欑洿鎺ヨ緭鍑哄師鏈殑鍊鹼紝濡傛灉鐩爣涓烘枃鏈枃浠跺氨杈撳嚭瀵瑰簲鍊肩殑瀛楃

榪欑鐞嗚В鏄敊鐨勶紝涓嶅悓鐨勮緭鍏ヨ緭鍑哄嚱鏁板甫鏉ヤ簡(jiǎn)涓嶅悓鐨勭粨鏋?br />綾諱技printf榪欑鏍煎紡璇濊緭鍑哄嚱鏁幫紝浼?xì)鎶婅緭鍑哄唴瀹规寜鐓у瓧绗︿互榛樿鐨劸~栫爜鏂瑰紡encode鏀懼叆鏂囦歡錛屾墍浠ラ偅涓枃浠墮噷闈㈠啓鐨勫煎凡緇忔槸鐪熷疄鍊肩殑涓縐嶆樉紺烘柟寮?瀛楃)浜?br />鐒跺悗scanf榪欑鍑芥暟鍦ㄨ鐨勪箣鍚庯紝涔熶細(xì)鎶婂瓧絎﹁漿鎹負(fù)瀵瑰簲鐨勫鹼紝涓鑸珹SCII灝辯洿鎺?-0x30浜?br />
鍍弐ead/write榪欑function浠栦滑涓嶄細(xì)鍋氫換浣曡漿鎹紝鐩存帴灝辨妸鍊兼斁榪涘幓浜?jiǎn)锛屾墍浠ヤ綘鐢ㄦ枃鏈枃浠舵墦寮鐨勬椂鍊欙紝鎸夌収榛樿鐨刣ecode鏂瑰紡鏉ヨВ鏋愪粬鐨勬椂鍊欎細(xì)鍙戠幇鏄貢鐮併?br />
榪欎釜涓滆タ涓庢枃鏈枃浠朵簩榪涘埗鏂囦歡娌℃湁鍏崇郴銆?br />涓嶇煡閬撴槸涓嶆槸鎴戣嚜宸卞緢寮憋紝鐜板湪鎵嶇煡閬撹繖涓笢瑗褲?br />
浣滀笟緇堜簬寮濮?
3.1 榪欑珷涓昏璁叉枃浠禪nbuffered IO錛岃繖閲岀殑unbuffered鏄寚userspace娌℃湁buffer鏉ョ紦鍐詫紝kernel涓瀹氳繕鏄湁緙撳啿鐨勶紝涓鑸瑄serspace鐨勭紦鍐插仛鍦ㄦ爣鍑咰 lib涓?br />鍙﹀鍍廇ndroid榪欑鏋舵瀯Java layer浼?xì)鍋毦~撳啿(BufferedInputStream/BufferedOutputStream, 榛樿鏄?K)
Java layer鐨勭紦鍐插彲浠ュ噺灝?JNI 璋冪敤嬈℃暟
C lib緙撳啿鍙互鍑忓皯 system call 鐨勬鏁?br />
3.2 鑷繁瀹炵幇dup2
涓嶈兘鐢╢cntl閭e氨鍙兘鐢╠up浜?br />榪欓噷鏄兂瑕佽鍋氶鐨勪漢鐭ラ亾錛宬ernel瀵硅繘紼嬫枃浠舵弿榪扮鐨勫垎閰嶅師鍒欐槸 "鍙栨渶灝忕殑娌℃湁浣跨敤鐨?
鎵浠ョ敤dup瀹炵幇Mydup(fd1, fd2)
1.fd2 < fd1: close fd2; dup(fd1)寰楀埌鐨勫煎氨鏄痜d2
2.fd2 = fd1: 鐩存帴return fd1
3.fd2 > fd1: 閭e氨鍙兘鏃犻檺dup浜?jiǎn)锛岀洿鍒皹q斿洖鍊間負(fù)fd2錛岀劧鍚巆lose鎺?fd1 ~ fd2-1
榪欓噷闇瑕佸鏂囦歡鎻忚堪絎﹁〃錛屾枃浠惰〃錛宨node涔嬬被鐨勬蹇電啛鎮(zhèn)夈?br />
3.3
榪欓噷涓昏鏄璇存枃浠惰〃欏圭殑鍒嗛厤錛屾瘡嬈pen kernel閮戒細(xì)鍒嗛厤鏂扮殑鏂囦歡琛ㄩ」錛宒up鐨勪綔鐢ㄥ氨鏄嬁鍒板彟澶栦竴涓枃浠舵弿榪扮鎸囧悜鐩稿悓鐨勬枃浠惰〃欏癸紝浣嗘槸姣忔敮鏂囦歡鍙湁鍚屼竴浠?br />inode銆?br />fd1錛宖d2浼?xì)鎸囧悜鍚屼竴浠芥枃浠惰〃欏?br />fd1錛宖d2錛宖d3鐨勬枃浠惰〃欏逛細(xì)鎸囧悜鍚屼竴浠絠node
fcntl 浣滅敤浜巉d1錛孎_SETFD鐢ㄦ潵璁懼畾 close_on_exec 鏍囧織榪欎釜涓滆タ鏄湪鏂囦歡鎻忚堪絎︿腑鐨勶紝鎵浠ュ彧浼?xì)濯?jiǎng)鍝峟d1
濡傛灉鏄疐_SETFL鍒欎細(xì)褰卞搷fd1, fd2鏂囦歡鐘舵佹爣蹇楅兘鏀懼湪鏂囦歡琛ㄤ腑銆?br />
3.4
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 2);
if (fd > 2) close(fd);
榪欎釜涓滆タ鐨勪綔鐢ㄥ簲璇ュ氨鏄噸瀹氬悜鏍囧噯杈撳叆杈撳嚭鍜岄敊璇緭鍑哄埌fd.

3.5
娌′粈涔堥噸瑕佺殑錛宻hell鍛戒護(hù)涓瀹氭槸浠庡乏寰鍙寵В鏋愭墽琛岀殑

3.6
铏界劧鏄痑ppend鏂瑰紡鎵撳紑錛岃繖涓笢瑗挎槸閽堝鍐欙紝lseek鍙互鑷繁閫夊畾璇誨彇浣嶇疆銆?br />write鍑芥暟鏄惁鏄細(xì)姣忔鍏坙seek鍒版枃浠跺熬閮?鐒跺悗鍐嶅啓錛岃繖鏍蜂箣鍓峫seek鐨勮緗氨鏃犳晥浜?br />灝忎笢瑗塊獙璇併?/p>

鍚庨潰璐翠笅浠g爜
append浼?xì)濯?jiǎng)鍝嶆瘡嬈rite錛屽彧瑕佹槸O_APPEND鎵撳紑錛屾瘡嬈rite閮戒細(xì)娣誨姞鍒版枃浠舵湯灝俱?br />
Done



Torres 2013-05-22 22:58 鍙戣〃璇勮
]]>
LTZ鍋氫綔涓氫箣APUE1http://www.shnenglu.com/xieshuo/archive/2013/05/21/200470.html Torres TorresTue, 21 May 2013 15:25:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/05/21/200470.htmlhttp://www.shnenglu.com/xieshuo/comments/200470.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/05/21/200470.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200470.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200470.html

璁版т笉濂斤紝鎵浠ヤ綔涓氬仛璧鋒潵--浠庣涓绔犲紑濮嬶紝鏈熸湜鏈夊鏈夌粓
1.1 瀵規(guī)牴鐩綍錛?錛夋潵璇達(dá)紝娌℃湁parent錛屾墍浠?.' or '..'灝辨病鏈夊尯鍒簡(jiǎn)錛屽彲浠ョ敤ls -li鏉ョ湅inode錛?.. 浠h〃浠栨湰韜?/span>
1.2 澶氬疄渚嬶紝Process ID閫掑錛屽垎閰峆rocess ID鐨勫叿浣撴柟寮?->//TODO:鍘繪煡鎯呮櫙鍒嗘瀽
1.3 const char* 鏀懼埌perror涓笉鎯寵perror鑷繁鏀癸紝鍏跺疄鎴戣寰梥trerror涔熷彲浠onst int
1.4 errno related
姣旇緝鏃╀箣鍓峞rrno鏄痓y process鐨勶紝榪欏茍涓嶅悎閫傦紝Linux鏀寔澶氱嚎紼嬪瓨鍙杄rrno
extern int* __errno_location(void)
#define errno (* __errno_location())
Macro涓轟竴涓嚱鏁幫紝浣垮緱__errno_location鏈夋満浼?xì)杩斿洖涓涓猅SL鐨剉ariable
榪欓噷APUE鏈塛rap涓浜涚畝鍗曠殑鎵揺rror log鐨勫嚱鏁幫紝鐢變簬errno鏄竴涓猙y thread variable錛屾墍浠ュ繀欏誨厛淇濆瓨
瑕佷笉鐒跺悗闈rint涔嬬被鐨剆ystem call鍚屾牱鏈夊彲鑳藉嚭鐜癳rror鐒跺悗瑕嗙洊鎺塭rrno
鏈夌湅鍒板彉鍙傚嚱鏁幫紝綰犳浜?jiǎn)鎴戣嚜宸遍暱鏈熺殑涓涓鍖猴紝涔嬪墠涓鐩翠互涓哄彉鍙傚嚱鏁板彧鑳界敤鍦ㄧ壒瀹氱殑Case涓嬫墠鏈夌敤錛屼緥濡俿canf/printf涔嬬被鐨勮緭鍏ヨ緭鍑哄嚱鏁?/span>
鍥犱負(fù)浠栦滑閮芥湁甯︾被浼糵ormat鐨勫弬鏁幫紝鑳藉閫氳繃%d錛?c涔嬬被鐨勪笢瑗挎壘鍒板悗闈㈢殑鍙樺弬鐨勪釜鏁頒互鍙?qiáng)绫诲瀷锛屼粖澶╂湁鍘荤湅涓涓媣a_list/va_arg/va_end鐨勫疄鐜幫紝浼?xì)鍙戠幇鍙樺弬鍑芥暟鏄Q屾湰鏉ヤ篃搴旇鏄竴縐嶆洿鍔燾ommon鐨勮璁?/span>
榪欓噷欏哄甫鎻愪竴涓媐unction call鐨勫ぇ浣撴祦紼嬶紝榪欓噷闇瑕佹瘮杈冨鐨勮儗鏅煡璇嗭紝綾諱技鍑芥暟璋冪敤綰﹀畾錛岀▼搴忓唴瀛樺垎甯?..
鎵炬潵涓寮犲浘姣旇緝濂界湅Linux process userspace鐨勫竷灞錛屽嵃璞′腑windows涔熶竴鏍峰彧涓嶈繃windows榛樿鏄?G/2G錛宭inux鏄ぇ瀹墮兘鐭ラ亾鐨?G/3G


userspace浠?~0xC0000000錛宬ernel space(0xC0000000~0xffffffff)鐨勬牱瀛愯窡榪欎釜宸埆姣旇緝澶э紝閭h竟鍒唙malloc/kmalloc榪樻湁綾諱技high memory鐨勬蹇碉紝榪欓噷涓昏璐村嚭userspace錛屽彲浠ョ湅涓涓婻O錛孯W錛孼I錛孒eap鐨勪綅緗紝欏轟究鎻愪竴涓嬫暣涓猯inux virtual memory鍏跺疄閮藉彲浠ュ垎涓轟袱閮ㄥ垎: anonymous memory/mapped memory錛屽儚RO灝辨槸mapped memory錛孯W寮濮嬫槸mapped memory錛屽彧瑕佹湁浜烘敼鍙樺垵濮嬪鹼紝閭e氨浼?xì)鍙樻垚anonymous memory錛孼I錛孒eap錛孲tack榪欎簺閮芥槸anonymous memory錛屼笌鍑芥暟璋冪敤鐩稿叧鐨勪富瑕佹槸stack -->stack鐨勫湴鍧鏄悜浣庡湴鍧澧為暱鐨勶紝鏍堝簳鍦ㄩ珮鍦板潃錛屾爤欏跺湪浣庡湴鍧
鐒跺悗浠嬬粛涓ょ甯哥敤鐨勫嚱鏁拌皟鐢ㄧ害瀹氾紝涓縐嶆槸C璇█榛樿鐨勫嚱鏁拌皟鐢ㄧ害瀹?__cdecl; 鍙﹀涓縐嶆槸PASCAL榛樿鐨勮皟鐢ㄧ害瀹?__stdcall
榪欎袱縐嶉兘鏄粠鍙沖埌宸﹀皢鍙傛暟鍘嬫爤錛岀劧鍚庡啀push ebp; mov ebp, esp; 鍐嶇劧鍚庡帇鍏ュ嚱鏁板眬閮ㄥ彉閲忥紝涓嶄竴鏍風(fēng)殑鏄痗decl鏄敱caller function灝嗗嚱鏁板弬鏁板嚭鏍堬紝stdcall鏄敱callee function灝嗗嚱鏁板嚭鏍堛?/div>
榪欎袱縐嶆柟寮忓悇鏈夊ソ澶勶紝鎱ㄦ嫭璁蹭竴涓媍decl鐨勮瘽姣忎釜璋冪敤鑰呴兘蹇呴』鍘誨仛pop stack鐨勫姩浣滐紝code size浼?xì)鍙樺ぇ锛泂tdcall鍒欏湪callee function鏈韓鏉ョ湅浼?xì)姣旇緝鍗暰U?/div>
浣嗘槸榪欑綾誨瀷姣旇緝闅句粠緙栬瘧鍣ㄧ殑瑙掑害鏉ユ敮鎸佸彉鍙傚嚱鏁般?/div>
鍙樺弬鍑芥暟閮芥槸cdecl
鍙互鐜╀竴涓嬭繖鏍風(fēng)殑鍑芥暟...

 

 1#include <cstdlib>
 2#include <iostream>
 3
 4using namespace std;
 5
 6void foo(int cnt, )
 7{
 8    cout << "start foo" << endl; 
 9    int* p = &cnt;
10    for(int i = 0; i < cnt; i++){        
11        cout << *(++p) << endl;
12    }

13    cout << "end foo" << endl;
14}

15
16int main(int argc, char *argv[])
17{
18    int a = 1, b = 3, c = 5, d = 7;
19    void (*functest)(int cnt, );
20    functest = foo;
21    functest(4, a, b, c, d);
22    system("PAUSE");
23    return EXIT_SUCCESS;
24}


鍔犱竴鐐瑰va_list/va_arg/va_end鐨勮娉曪紝鍏跺疄浠栫殑瀹炵幇铔伒媧葷殑

///stdarg.h
#define va_start _crt_va_start
#define va_arg _crt_va_arg
#define va_end _crt_va_end  

///vadefs.h
#define _ADDRESSOF(v)   ( &reinterpret_cast<const char &>(v) )
typedef 
char *  va_list;
#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )
#define _crt_va_start(ap,v)  ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )
#define _crt_va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define _crt_va_end(ap)      ( ap = (va_list)0 )

璐翠竴孌電綉涓婄湅鍒扮殑搴旇鏄痠386鐨勫疄鐜幫紝綾諱技榪欑鍙樺弬鍑芥暟浼?xì)鐩存帴鍘荤敤鎸囬拡鎿嶄綔stack鏉ユ壘鍙傛暟鐨勶紝鍥犱負(fù)娑夊強(qiáng)鍒板鍏剁殑闂?shù)竴瀹氭槸by platform鐨勶紝涓嶅お濂界Щ妞?/span>
鍍廮INTSIZEOF(n) 灝辨槸int瀵瑰叾
澶ф璁蹭笅鎰忔?va_list 灝辨槸 char*錛屾槸涓涓敤鏉ユ壘鍙傛暟ptr鐨勬父鏍?/span>
va_start(ap, v)  閫氳繃絎竴涓浐瀹氬弬鏁皏 鍒濆鍖?ap
va_arg(ap, t)  榪欓噷灝辯粰Type t浜?jiǎn)锛屾墍浠ュ茍涓嶄竴瀹氶渶瑕佺被浼紁rintf鐨?format 鏉ユ壘錛宑aller鍜宑allee鍙互鏈変竴浜涘叾浠栫殑綰﹀畾鏂瑰紡錛岃繖涓繑鍥炲綋鍓嶇被鍨嬩負(fù)t鐨勫弬鏁扮殑鍊鹼紝騫朵笖灝哸p鎸囧悜涓嬩釜鍙傛暟錛屽洜涓轟箣鍓峚p琚垵濮嬪寲鐨勬椂鍊欏叾瀹炰粬騫朵笉鐭ラ亾浠栨寚鍚戠殑鍙傛暟鐨勭被鍨嬨?/span>
va_end(ap) 娓呮帀ap
澶氳涓鍙ワ紝printf緋誨垪鐨勫嚱鏁拌繕铔鐨勶紝fprintf/sprintf/vprintf/svnprintf...甯鐨勬槸闈㈠悜FILE streaming鐨勶紝s鏄拡瀵筩har buffer鐨勶紝v鍒欐槸璇村弬鏁版槸甯a_list鐨勶紝n鍒欐槸鍏蜂綋鎸噑ize
1.5/1.6璁ㄨ32浣嶈〃紺烘椂闂存孩鍑虹殑錛屼笉鎯沖啓絳旀錛屾椂闂存瘮杈冩櫄錛岀涓绔犱綔涓氬啓瀹屻?/span>

 

璁板綍涓浜涘叧浜庣郴緇熸葷嚎涓嶤PU“浣嶆暟"鐨勫熀鏈蹇?/p>

閫氬父鎵璇寸殑CPU鐨勪綅鏁幫紝32浣峯r64浣岰PU錛屾寚鐨勬槸ALU(綆楁湳閫昏緫鍗曞厓)鐨勫搴︼紝涔熷氨鏄繖涓狝LU澶勭悊鏁版嵁鐨勫熀鏈崟鍏冪殑瀹藉害
鎵浠ユ暟鎹葷嚎鍩烘湰浼?xì)鍜孉LU瀹藉害鐩稿悓(鏈変緥澶栵紝榪欎釜鎴戞病鎯蟲(chóng)竻妤氬伐浣滃師鐞? -->搴旇鏄彲浠ユ柊鍔犱竴浜汳odule鏉ュ仛杞崲銆?br />鑰屽湴鍧鎬葷嚎鍒欐槸CPU瀵誨潃鐨勮兘鍔涳紝涓涓槸鎬庝箞鍘誨鍧錛屼竴涓槸瀵誨埌鍦板潃鍚庯紝鍦板潃涓唴瀹圭殑瀹藉害(褰撶劧榪欎釜瀹藉害璺熷湴鍧綾誨瀷(byte錛宻hort錛宨nt)鏈夊叧錛屼絾閫佺粰C(jī)PU鐨勬椂鍊欎竴鑸槸鍗曚綅嬈℃暟閫佹暟鎹葷嚎鐨勫搴︾殑鏁版嵁)錛屽湴鍧鎬葷嚎鍐沖畾CPU鑳借闂殑Memory鐨勮寖鍥淬?/p>

8086鏄?6浣岮LU 20浣嶆暟鎹葷嚎瀵誨潃1M
姣忔CPU閫佸嚭鐨勫湴鍧閮芥槸16浣嶏紝鐒跺悗鍔犱笂孌靛瘎瀛樺櫒浣滀負(fù)鏈楂?浣?

 



Torres 2013-05-21 23:25 鍙戣〃璇勮
]]>APUE鏉傝http://www.shnenglu.com/xieshuo/archive/2013/05/19/200399.html Torres TorresSun, 19 May 2013 07:17:00 GMThttp://www.shnenglu.com/xieshuo/archive/2013/05/19/200399.htmlhttp://www.shnenglu.com/xieshuo/comments/200399.htmlhttp://www.shnenglu.com/xieshuo/archive/2013/05/19/200399.html#Feedback0http://www.shnenglu.com/xieshuo/comments/commentRss/200399.htmlhttp://www.shnenglu.com/xieshuo/services/trackbacks/200399.html榪欓噷浼?xì)璁板綍涓浜涙瘮杈冩潅涔辯殑孌佃惤錛屼綔涓篈PUE浣滀笟鐨勫紑濮嬶紝浠ュ悗浼?xì)澧炴坊锛屾垨璁笜q樹(shù)細(xì)鏁寸悊錛屾瘮杈冪‘瀹氱殑鏄細(xì)璐翠竴浜涚珷鑺備綔涓氫笂鏉ワ紝鎴戠洰鍓嶄笉鐭ラ亾闅懼害錛屽垵濮嬫兂娉曟槸鍗曠湅鐪嬩功錛屽鏋滃彲浠ヤ細(xì)鍘葷炕緲繪儏鏅垎鏋愶紝鍥犱負(fù)鎴戣韓杈逛篃姝eソ榪樻湁涓鏈傛垜鎯寵佸ご瀛愭寮忓紑宸ヤ簡(jiǎn)...鐩戠潱鑷繁錛屾湡鏈涜兘瀹屾垚鏈夋敹鑾楓?/p>

Torres 2013-05-19 15:17 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美日韩在线视频一区二区| 亚洲综合精品一区二区| 久久久久久久久岛国免费| 国产欧美一区二区精品性| 欧美在线亚洲在线| 欧美影院视频| 在线电影欧美日韩一区二区私密| 久久欧美中文字幕| 欧美成人亚洲成人日韩成人| 亚洲人成网站精品片在线观看| 亚洲欧洲在线免费| 欧美成人在线免费观看| 一区二区三区欧美亚洲| 亚洲一区二区久久| 国产亚洲激情视频在线| 欧美高清视频在线 | 久久嫩草精品久久久久| 麻豆av福利av久久av| 一区二区久久久久久| 亚洲午夜精品久久久久久app| 国产在线精品自拍| 亚洲大胆在线| 国产精品免费福利| 猫咪成人在线观看| 欧美婷婷久久| 欧美成人免费播放| 欧美午夜精品久久久久久久| 久久米奇亚洲| 欧美色大人视频| 久久免费偷拍视频| 国产精品久久久一区麻豆最新章节| 欧美一区二区久久久| 久久人人超碰| 翔田千里一区二区| 欧美激情第3页| 老**午夜毛片一区二区三区| 欧美性开放视频| 亚洲欧洲日本国产| 韩国精品在线观看| 亚洲一区二区成人| aa亚洲婷婷| 久热re这里精品视频在线6| 午夜精品一区二区在线观看 | 日韩小视频在线观看| 精品成人久久| 亚洲欧美伊人| 中文在线一区| 欧美成人黄色小视频| 欧美在线观看视频一区二区三区| 国产免费成人在线视频| 亚洲国产成人porn| 国内久久精品| 性亚洲最疯狂xxxx高清| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久免费黄色| 猫咪成人在线观看| 激情小说亚洲一区| 欧美一级欧美一级在线播放| 欧美亚洲免费| 国产伦精品一区二区三区照片91| 亚洲精品一二三区| 亚洲三级影院| 欧美激情第六页| 亚洲电影免费观看高清完整版| 激情成人在线视频| 久久精品电影| 巨乳诱惑日韩免费av| 国产亚洲制服色| 欧美一区二区免费| 牛牛国产精品| 亚洲精品视频在线看| 欧美日韩成人一区| 在线综合+亚洲+欧美中文字幕| 亚洲性感美女99在线| 国产精品羞羞答答| 欧美中文字幕久久| 免播放器亚洲一区| 亚洲国产第一页| 欧美成人在线免费视频| 亚洲高清免费在线| 在线一区二区三区四区五区| 欧美三级视频在线| 亚洲欧美另类在线观看| 老牛国产精品一区的观看方式| 国产日韩欧美二区| 久久久国产午夜精品| 欧美激情精品久久久六区热门 | 一区二区不卡在线视频 午夜欧美不卡在| 欧美国产91| 亚洲影视九九影院在线观看| 久久视频一区| 夜夜嗨av一区二区三区网站四季av| 欧美视频精品在线观看| 欧美在线不卡视频| 亚洲欧洲一区二区三区在线观看| 亚洲一区二区三区四区视频 | 欧美国产高清| 中文在线资源观看网站视频免费不卡 | 激情综合在线| 欧美日韩中文在线观看| 久久国产精品久久精品国产| 亚洲高清不卡在线观看| 午夜宅男久久久| 亚洲国产综合91精品麻豆| 国产精品久久久久影院色老大| 快射av在线播放一区| 亚洲一区二区网站| 亚洲精品美女久久7777777| 久久国产福利国产秒拍| 亚洲精品在线看| 国内精品久久久久久久影视麻豆 | 激情久久综合| 欧美日韩一区二区免费在线观看| 欧美淫片网站| 亚洲私人影院在线观看| 亚洲国产一区二区三区在线播| 久久久国产精品亚洲一区| 在线亚洲+欧美+日本专区| 影音先锋亚洲电影| 国产伦精品一区二区| 欧美日本不卡| 免费成人小视频| 久久精品一区二区三区四区| 亚洲综合日韩在线| 一区二区三区免费在线观看| 亚洲第一视频网站| 免费成人网www| 久久精品亚洲| 欧美在线国产| 性欧美xxxx视频在线观看| 亚洲视频一二| 一本色道久久综合狠狠躁篇的优点| 好吊视频一区二区三区四区| 国产欧美日韩免费看aⅴ视频| 欧美偷拍另类| 国产精品二区二区三区| 欧美日韩成人免费| 欧美天天在线| 国产精品丝袜白浆摸在线| 欧美午夜免费电影| 国产精品国产自产拍高清av王其| 欧美色网一区二区| 国产精品久久久久久久久免费 | 久久久无码精品亚洲日韩按摩| 欧美一级视频免费在线观看| 欧美中文在线视频| 久久这里只精品最新地址| 久久综合给合| 欧美91大片| 欧美日本免费| 国产精品美女一区二区在线观看| 国产精品久久久久一区二区三区共 | 亚洲日本无吗高清不卡| 亚洲人成网在线播放| 99综合电影在线视频| 亚洲一区二区三区涩| 欧美中文字幕第一页| 久久综合网络一区二区| 欧美激情女人20p| 亚洲三级免费| 亚洲在线免费观看| 久久中文欧美| 国产精品久久久久一区二区| 韩国av一区二区三区四区| 91久久久国产精品| 亚洲欧美日韩国产成人| 久久久99国产精品免费| 欧美黄色免费网站| 在线一区日本视频| 久久久91精品国产一区二区三区| 欧美成人精品| 国产日韩欧美在线视频观看| 亚洲福利专区| 午夜精品福利一区二区三区av | 欧美韩日高清| 亚洲视频免费看| 久久久久久久欧美精品| 欧美日韩中文字幕| 亚洲成人在线网| 欧美亚洲在线视频| 欧美激情一区二区三区四区| 久久免费视频网站| 怡红院av一区二区三区| 亚洲一区二区三区在线视频| 久久久精品一品道一区| 日韩午夜激情| 巨乳诱惑日韩免费av| 国产精品一卡二| 亚洲日产国产精品| 久久九九热免费视频| 在线午夜精品自拍| 欧美激情精品久久久久久免费印度| 国产欧美一二三区| 亚洲免费影视| 亚洲精品视频一区二区三区| 久久久九九九九| 国产欧美一区二区精品婷婷| 在线一区免费观看| 亚洲激情不卡| 麻豆国产精品一区二区三区 |