锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美韩国一区,亚洲综合精品四区,亚洲电影视频在线http://m.shnenglu.com/mydriverc/articles/33167.html鏃呴?/dc:creator>鏃呴?/author>Fri, 28 Sep 2007 18:05:00 GMThttp://m.shnenglu.com/mydriverc/articles/33167.htmlhttp://m.shnenglu.com/mydriverc/comments/33167.htmlhttp://m.shnenglu.com/mydriverc/articles/33167.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/33167.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/33167.html

鍦ㄣ奓INUX涓嬪姩鎬侀摼鎺ュ簱鐨勫垱寤轟笌搴? 鐢ㄣ嬩竴鏂囦腑,鎴戜粙緇嶄簡LINUX鍔ㄦ侀摼鎺ュ簱鐨勫熀鏈煡璇?鍏惰鐐規槸:鐢ㄦ埛鏍規嵁瀹為檯鎯呭喌闇瑕?鍒╃敤dlopen,dlsym,dlclose絳夊姩鎬侀摼鎺ュ簱鎿嶄綔 鍑芥暟,瑁呭叆鎸囧畾鐨勫姩鎬侀摼鎺ュ簱涓寚瀹氱殑鍑芥暟,鐒跺悗鍔犱互鎵ц.紼嬪簭涓嬌鐢ㄥ緢灝戠殑鍔ㄦ佸嚱鏁版椂,榪欐牱鐨勫仛娉曞皻鍙?濡傛灉紼嬪簭闇瑕佽皟鐢ㄥぇ閲忕殑鍔ㄦ佸嚱鏁?閭d箞閲囩敤榪欐牱鐨? 緙栫▼鎵嬫灝嗘槸闈炲父綣佸鐨?鎵浠ユ垜浠繀欏諱嬌鐢ㄤ竴縐嶆洿涓鴻仾鏄庣殑鍔炴硶,浠ュ噺灝戜唬鐮侀噺,鎻愰珮宸ヤ綔鏁堢巼.榪欏氨鏄幇鍦ㄦ垜瑕佷婦渚嬩粙緇嶇殑銆奓INUX鍔ㄦ侀摼鎺ュ簱楂樼駭搴? 鐢ㄣ?

娉?鏈枃涓劇殑渚嬪瓙綾諱技涓婄瘒鏂囩珷,鍙槸鏂囦歡鐨勫唴瀹瑰凡鍋氱浉搴斾慨鏀?瑁佸噺浜嗕笉灝?紺轟緥紼嬪簭ady.c鍜屼袱涓姩鎬佸嚱鏁扮殑婧愮▼搴廹etdate.c涓巊ettime.c浠呬慨鏀逛簡澶存枃浠剁殑鍚嶅瓧,鍏跺唴瀹逛笉鍐嶅垪鍑?鏈枃浣跨敤澶存枃浠朵負adatetime.h.


瑕佹兂楂樻晥鍦板簲鐢↙INUX鍔ㄦ侀摼鎺ュ簱(灝ゅ叾鏄敤鎴瘋嚜宸辯紪鍐欑殑),闇瑕佸仛浠ヤ笅宸ヤ綔:

涓銆佺紪鍐欏悎鏍肩殑鍔ㄦ侀摼鎺ュ簱澶存枃浠?

C璇█鐨勫ご鏂囦歡,鍙緵涓涓垨澶氫釜紼嬪簭寮曠敤,閲岄潰涓鑸畾涔夌▼搴忔墍闇鐨勫父閲?鑷畾涔夌被鍨嬪強鍑芥暟鍘熷瀷璇存槑絳?鍏朵腑鐨勫嚱鏁板師鍨嬭鏄?鍒欎緵緙栬瘧鍣ㄦ鏌ヨ娉?鐢ㄤ簬鎺掗櫎寮曠敤鍙傛暟鏃剁被鍨嬩笉涓鑷寸殑閿欒.鍙湁緙栧啓鍚堟牸鐨勫姩鎬侀摼鎺ュ簱澶存枃浠?紼嬪簭鍛樻墠鑳芥紜嬌鐢ㄥ姩鎬侀摼鎺ュ簱鍐呯殑鍑芥暟.


鍔ㄦ侀摼鎺ュ簱澶存枃浠惰閲囩敤C璇█鏍囧噯鏍煎紡,鍏朵腑鐨勫姩鎬佸嚱鏁板師鍨嬪畾涔?涓嶅繀璞′笂鏂囦粙緇嶇殑閭f牱鐢?*鍔ㄦ佸嚱鏁板悕)鐨勬弿榪板艦寮?璇風湅涓嬮潰鐨勪緥瀛?(姣忚寮濮嬬殑鏁板瓧涓烘墍鍦ㄨ琛屽彿,涓虹瑪鑰呮坊鍔?渚涙敞瑙d嬌鐢?


1 /* adatetime.h : 綰墊í杞歡鍒朵綔涓績闆ㄤ害濂?zhsoft@371.net)緙栧啓, 2002-03-06. */
2聽
3 #ifndef __DATETIME_H
4聽
5 #define __DATETIME_H
6聽
7 /* 鏃ユ湡緇撴瀯 */
8 typedef struct
9 {
10 int year;
11 int mon;
12 int day;
13 }DATETYPE;
14聽
15 /* 鏃墮棿緇撴瀯 */
16 typedef struct
17 {
18 char hour;
19 char min;
20 char sec;
21 }TIMETYPE;
22聽
23 int getdate(DATETYPE *d); /* 鍙栧綋鍓嶆棩鏈?*/
24 int gettime(TIMETYPE *t); /* 鍙栧綋鍓嶆椂闂?*/
25聽
26 #endif
27聽


娉?涓庝笂鏂囩殑datetime.h鏂囦歡姣旇緝,浠庤澶存枃浠剁23,24琛屽彲浠ョ湅鍒?鍔ㄦ佸嚱鏁癵etdate,gettime鐨勫師鍨嬪畾涔夋敼鍙樹簡,涓嶅啀浣跨敤(*getdate),(*gettime)鐨勬牸寮忎簡(榪欑鏍煎紡浣跨敤杈冧負緗楀棪).


浜屻佹紜紪璇戜笌鍛藉悕鍔ㄦ侀摼鎺ュ簱


涓轟簡璁〨CC緙栬瘧鍣ㄧ敓鎴愬姩鎬侀摼鎺ュ簱,緙栬瘧鏃墮』鍔犻夐」-shared.(榪欑偣欏葷墷璁?


LINUX緋葷粺涓?涓轟簡璁╁姩鎬侀摼鎺ュ簱鑳借緋葷粺涓叾瀹冪▼搴忓叡浜?鍏跺悕瀛楀簲絎﹀悎鈥渓ib*.so*鈥濊繖縐嶆牸寮?濡傛灉鏌愪釜鍔ㄦ侀摼鎺ュ簱涓嶇鍚堟鏍煎紡,鍒橪INUX鐨勫姩鎬侀摼鎺ュ簱鑷姩瑁呭叆紼嬪簭(ld.so)灝嗘悳绱笉鍒版閾炬帴搴?鍏跺畠紼嬪簭涔熸棤娉曞叡浜箣.


鏍煎紡涓?絎竴涓?閫氬父琛ㄧず涓虹畝鍐欑殑搴撳悕,絎簩涓?閫氬父琛ㄧず涓鴻搴撶殑鐗堟湰鍙?濡?鍦ㄦ垜鐨勭郴緇熶腑,鍩烘湰C鍔ㄦ侀摼鎺ュ簱鐨勫悕瀛椾負 libc.so.6,綰跨▼ pthread鍔ㄦ侀摼鎺ュ簱鐨勫悕瀛椾負libpthread.so.0絳夌瓑.鏈枃渚嬪瓙鎵鐢熸垚鐨勫姩鎬侀摼鎺ュ簱鐨勫悕瀛椾負libmy.so,铏芥病鏈夌増鏈彿,浣嗕篃絎﹀悎鎵 瑕佹眰鐨勬牸寮?


鐢熸垚璇ュ姩鎬侀摼鎺ュ簱鐨勭淮鎶ゆ枃浠秏akefile-lib鍐呭濡備笅:


1 # makefile : 綰墊í杞歡鍒朵綔涓績闆ㄤ害濂囩紪鍐? 2002-03-07.
2聽
3 all : libmy.so
4聽
5 SRC = getdate.c gettime.c
6聽
7 TGT = $(SRC:.c=.o)
8聽
9 $(SRC) : adatetime.h
10 @touch $@
11聽
12 %.o : %.c
13 cc -c $?
14聽
15 # 鍔ㄦ侀摼鎺ュ簱(libmy.so)鐢熸垚
16 libmy.so : $(TGT)
17 cc -s -shared -o $@ $(TGT)
18聽


榪愯鍛戒護:


$ make -f makefile-lib
$


鍗崇敓鎴恖ibmy.so搴?


娉? 緇存姢鏂囦歡涓?絎?7琛岀敤-shared閫夐」浠ョ敓鎴愬姩鎬侀摼鎺ュ簱,鐢?s閫夐」浠ュ幓鎺夌洰鏍囨枃浠朵腑鐨勭鍙瘋〃,浠庤屽噺灝忔枃浠墮暱搴?


涓夈佸叡浜姩鎬侀摼鎺ュ簱


3.1 鍔ㄦ侀摼鎺ュ簱閰嶇疆鏂囦歡


涓轟簡璁╁姩鎬侀摼鎺ュ簱涓虹郴緇熸墍浣跨敤,闇瑕佺淮鎶ゅ姩鎬侀摼鎺ュ簱鐨勯厤緗枃浠?-/etc/ld.so.conf.姝ゆ枃浠跺唴,瀛樻斁鐫鍙LINUX鍏變韓 鐨勫姩鎬侀摼鎺ュ簱鎵鍦ㄧ洰褰曠殑鍚嶅瓧(緋葷粺鐩綍/lib,/usr/lib闄ゅ),鍚勪釜鐩綍鍚嶉棿浠ョ┖鐧藉瓧絎?絀烘牸,鎹㈣絳?鎴栧啋鍙鋒垨閫楀彿鍒嗛殧.涓鑸殑LINUX鍙? 琛岀増涓?姝ゆ枃浠跺潎鍚竴涓叡浜洰褰?usr/X11R6/lib,涓篨 window紿楀彛緋葷粺鐨勫姩鎬侀摼鎺ュ簱鎵鍦ㄧ殑鐩綍.


涓嬮潰鐪嬬湅鎴戠殑緋葷粺涓鏂囦歡鐨勫唴瀹瑰浣?


# cat /etc/ld.so.conf
/usr/X11R6/lib
/usr/zzz/lib
#


鐢變笂鍙互鐪嬪嚭,璇ュ姩鎬佸簱閰嶇疆鏂囦歡涓?澧炲姞浜嗕竴涓?usr/zzz/lib鐩綍.榪欐槸鎴戣嚜宸辨柊寤虹殑鍏變韓搴撶洰褰?涓嬮潰瀛樻斁鎴戞柊寮鍙戠殑鍙緵緋葷粺鍏變韓鐨勫姩鎬侀摼鎺ュ簱.


3.2 鍔ㄦ侀摼鎺ュ簱綆$悊鍛戒護


涓轟簡璁╁姩鎬侀摼鎺ュ簱涓虹郴緇熸墍鍏變韓,榪橀渶榪愯鍔ㄦ侀摼鎺ュ簱鐨勭鐞嗗懡浠?-ldconfig.姝ゆ墽琛岀▼搴忓瓨鏀懼湪/sbin鐩綍涓?


ldconfig鍛戒護鐨勭敤閫?涓昏鏄湪榛樿鎼滃鐩綍(/lib鍜?usr/lib)浠ュ強鍔ㄦ佸簱閰嶇疆鏂囦歡/etc/ld.so.conf鍐? 鎵鍒楃殑鐩綍涓?鎼滅儲鍑哄彲鍏變韓鐨勫姩鎬侀摼鎺ュ簱(鏍煎紡濡傚墠浠嬬粛,lib*.so*),榪涜屽垱寤哄嚭鍔ㄦ佽鍏ョ▼搴?ld.so)鎵闇鐨勮繛鎺ュ拰緙撳瓨鏂囦歡.緙撳瓨鏂囦歡榛樿 涓?/etc/ld.so.cache,姝ゆ枃浠朵繚瀛樺凡鎺掑ソ搴忕殑鍔ㄦ侀摼鎺ュ簱鍚嶅瓧鍒楄〃.


ldconfig閫氬父鍦ㄧ郴緇熷惎鍔ㄦ椂榪愯,鑰屽綋鐢ㄦ埛瀹夎浜嗕竴涓柊鐨勫姩鎬侀摼鎺ュ簱鏃?灝遍渶瑕佹墜宸ヨ繍琛岃繖涓懡浠?


ldconfig鍛戒護琛岀敤娉曞涓?


ldconfig [-v|--verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|--print-cache] [-c FORMAT] [--format=FORMAT] [-V] [-?|--help|--usage] path...


ldconfig鍙敤鐨勯夐」璇存槑濡備笅:


(1) -v鎴?-verbose : 鐢ㄦ閫夐」鏃?ldconfig灝嗘樉紺烘鍦ㄦ壂鎻忕殑鐩綍鍙婃悳绱㈠埌鐨勫姩鎬侀摼鎺ュ簱,榪樻湁瀹冩墍鍒涘緩鐨勮繛鎺ョ殑鍚嶅瓧.


(2) -n : 鐢ㄦ閫夐」鏃?ldconfig浠呮壂鎻忓懡浠よ鎸囧畾鐨勭洰褰?涓嶆壂鎻忛粯璁ょ洰褰?/lib,/usr/lib),涔熶笉鎵弿閰嶇疆鏂囦歡/etc/ld.so.conf鎵鍒楃殑鐩綍.


(3) -N : 姝ら夐」鎸囩ずldconfig涓嶉噸寤虹紦瀛樻枃浠?/etc/ld.so.cache).鑻ユ湭鐢?X閫夐」,ldconfig鐓у父鏇存柊鏂囦歡鐨勮繛鎺?


(4) -X : 姝ら夐」鎸囩ずldconfig涓嶆洿鏂版枃浠剁殑榪炴帴.鑻ユ湭鐢?N閫夐」,鍒欑紦瀛樻枃浠舵甯告洿鏂?


(5) -f CONF : 姝ら夐」鎸囧畾鍔ㄦ侀摼鎺ュ簱鐨勯厤緗枃浠朵負CONF,緋葷粺榛樿涓?etc/ld.so.conf.


(6) -C CACHE : 姝ら夐」鎸囧畾鐢熸垚鐨勭紦瀛樻枃浠朵負CACHE,緋葷粺榛樿鐨勬槸/etc/ld.so.cache,姝ゆ枃浠跺瓨鏀懼凡鎺掑ソ搴忕殑鍙叡浜殑鍔ㄦ侀摼鎺ュ簱鐨勫垪琛?


(7) -r ROOT : 姝ら夐」鏀瑰彉搴旂敤紼嬪簭鐨勬牴鐩綍涓篟OOT(鏄皟鐢╟hroot鍑芥暟瀹炵幇鐨?.閫夋嫨姝ら」鏃?緋葷粺榛樿鐨勯厤緗枃浠?etc/ld.so.conf,瀹為檯瀵瑰簲鐨勪負 ROOT/etc/ld.so.conf.濡傜敤-r /usr/zzz鏃?鎵撳紑閰嶇疆鏂囦歡/etc/ld.so.conf鏃?瀹為檯鎵撳紑鐨勬槸/usr/zzz/etc/ld.so.conf鏂囦歡.鐢ㄦ閫夐」,鍙互 澶уぇ澧炲姞鍔ㄦ侀摼鎺ュ簱綆$悊鐨勭伒媧繪?


(8) -l : 閫氬父鎯呭喌涓?ldconfig鎼滅儲鍔ㄦ侀摼鎺ュ簱鏃跺皢鑷姩寤虹珛鍔ㄦ侀摼鎺ュ簱鐨勮繛鎺?閫夋嫨姝ら」鏃?灝嗚繘鍏ヤ笓瀹舵ā寮?闇瑕佹墜宸ヨ緗繛鎺?涓鑸敤鎴蜂笉鐢ㄦ欏?


(9) -p鎴?-print-cache : 姝ら夐」鎸囩ずldconfig鎵撳嵃鍑哄綋鍓嶇紦瀛樻枃浠舵墍淇濆瓨鐨勬墍鏈夊叡浜簱鐨勫悕瀛?


(10) -c FORMAT 鎴?--format=FORMAT : 姝ら夐」鐢ㄤ簬鎸囧畾緙撳瓨鏂囦歡鎵浣跨敤鐨勬牸寮?鍏辨湁涓夌:old(鑰佹牸寮?,new(鏂版牸寮?鍜宑ompat(鍏煎鏍煎紡,姝や負榛樿鏍煎紡).


(11) -V : 姝ら夐」鎵撳嵃鍑簂dconfig鐨勭増鏈俊鎭?鑰屽悗閫鍑?


(12) -? 鎴?--help 鎴?--usage : 榪欎笁涓夐」浣滅敤鐩稿悓,閮芥槸璁﹍dconfig鎵撳嵃鍑哄叾甯姪淇℃伅,鑰屽悗閫鍑?


涓句笁涓緥瀛?


渚?:


# ldconfig -p
793 libs found in cache `/etc/ld.so.cache'
libzvt.so.2 (libc6) => /usr/lib/libzvt.so.2
libzvt.so (libc6) => /usr/lib/libzvt.so
libz.so.1.1.3 (libc6) => /usr/lib/libz.so.1.1.3
libz.so.1 (libc6) => /lib/libz.so.1
......
#


娉? 鏈夋椂鍊欑敤鎴鋒兂鐭ラ亾緋葷粺涓湁鍝簺鍔ㄦ侀摼鎺ュ簱,鎴栬呮兂鐭ラ亾緋葷粺涓湁娌℃湁鏌愪釜鍔ㄦ侀摼鎺ュ簱,榪欐椂,鍙敤-p閫夐」璁﹍dconfig杈撳嚭緙撳瓨鏂囦歡涓殑鍔ㄦ侀摼鎺ュ簱鍒? 琛?浠庤屾煡璇㈠緱鍒?渚嬪瓙涓?ldconfig鍛戒護鐨勮緭鍑虹粨鏋滅1琛岃〃鏄庡湪緙撳瓨鏂囦歡/etc/ld.so.cache涓壘鍒?93涓叡浜簱,絎?琛屽紑濮嬩究鏄? 涓緋誨垪鍏變韓搴撶殑鍚嶅瓧鍙婂叾鍏ㄥ悕(緇濆璺緞).鍥犱負瀹為檯杈撳嚭緇撴灉澶,涓鴻妭鐪佺瘒騫?浠?.....琛ㄧず鐪佺暐鐨勯儴鍒?


渚?:


# ldconfig -v
/lib:
liby.so.1 -> liby.so.1
libnss_wins.so -> libnss_wins.so
......
/usr/lib:
libjscript.so.2 -> libjscript.so.2.0.0
libkspell.so.2 -> libkspell.so.2.0.0
......
/usr/X11R6/lib:
libmej-0.8.10.so -> libmej-0.8.10.so
libXaw3d.so.7 -> libXaw3d.so.7.0
......
#


娉? ldconfig鍛戒護鍦ㄨ繍琛屾甯哥殑鎯呭喌涓?榛樿涓嶈緭鍑轟粈涔堜笢瑗?鏈緥涓敤浜?v閫夐」,浠ヤ嬌ldconfig鍦ㄨ繍琛屾椂杈撳嚭姝e湪鎵弿鐨勭洰褰曞強鎼滅儲鍒扮殑鍏變韓搴? 鐢ㄦ埛鍙互娓呮鍦扮湅鍒拌繍琛岀殑緇撴灉.鎵ц緇撴潫鍚?ldconfig灝嗗埛鏂扮紦瀛樻枃浠?etc/ld.so.cache.


渚?:


# ldconfig /usr/zhsoft/lib
#


娉? 褰撶敤鎴峰湪鏌愪釜鐩綍涓嬮潰鍒涘緩鎴栨嫹璐濅簡涓涓姩鎬侀摼鎺ュ簱,鑻ユ兂浣垮叾琚郴緇熷叡浜?鍙互鎵ц涓涓?ldconfig 鐩綍鍚?榪欎釜鍛戒護.姝ゅ懡浠ょ殑鍔熻兘鍦ㄤ簬璁﹍dconfig灝嗘寚瀹氱洰褰曚笅鐨勫姩鎬侀摼鎺ュ簱琚郴緇熷叡浜搗鏉?鎰忓嵆:鍦ㄧ紦瀛樻枃浠?etc/ld.so.cache涓拷 鍔犺繘鎸囧畾鐩綍涓嬬殑鍏變韓搴?鏈緥璁╃郴緇熷叡浜簡/usr/zhsoft/lib鐩綍涓嬬殑鍔ㄦ侀摼鎺ュ簱.闇瑕佽鏄庣殑鏄?濡傛灉姝ょ洰褰曚笉鍦?lib,/usr/lib 鍙?etc/ld.so.conf鏂囦歡鎵鍒楃殑鐩綍閲岄潰,鍒欏啀搴﹁繍琛宭dconfig鏃?姝ょ洰褰曚笅鐨勫姩鎬侀摼鎺ュ簱鍙兘涓嶈緋葷粺鍏變韓浜?

3.3 鍔ㄦ侀摼鎺ュ簱濡備綍鍏變韓

浜嗚В浜嗕互涓婄煡璇?鎴戜滑鍙互閲囩敤浠ヤ笅涓夌鏂規硶鏉ュ叡浜姩鎬侀摼鎺ュ簱:(娉?鍧囬』鍦ㄨ秴綰х敤鎴風姸鎬佷笅鎿嶄綔,浠ユ垜鐨勫姩鎬侀摼鎺ュ簱libmy.so鍏變韓榪囩▼涓轟緥)


(1)鎷瘋礉鍔ㄦ侀摼鎺ュ簱鍒扮郴緇熷叡浜洰褰曚笅,鎴栧湪緋葷粺鍏變韓鐩綍涓嬩負璇ュ姩鎬侀摼鎺ュ簱寤虹珛涓繛鎺?紜繛鎺ユ垨絎﹀彿榪炴帴鍧囧彲,甯哥敤絎﹀彿榪炴帴).榪欓噷璇寸殑 緋葷粺鍏變韓鐩綍,鎸囩殑鏄疞INUX鍔ㄦ侀摼鎺ュ簱瀛樻斁鐨勭洰褰?瀹冨寘鍚?lib,/usr/lib浠ュ強/etc/ld.so.conf鏂囦歡鍐呮墍鍒楃殑涓緋誨垪鐩綍.


# cp libmy.so /lib
# ldconfig
#


鎴?


# ln -s `pwd`/libmy.so /lib
# ldconfig
#


(2)灝嗗姩鎬侀摼鎺ュ簱鎵鍦ㄧ洰褰曞悕榪藉姞鍒板姩鎬侀摼鎺ュ簱閰嶇疆鏂囦歡/etc/ld.so.conf涓?


# pwd >> /etc/ld.so.conf
# ldconfig
#


(3)鍒╃敤鍔ㄦ侀摼鎺ュ簱綆$悊鍛戒護ldconfig,寮哄埗鍏舵悳绱㈡寚瀹氱洰褰?騫舵洿鏂扮紦瀛樻枃浠?渚夸簬鍔ㄦ佽鍏?


# ldconfig `pwd`
#


闇瑕佽鏄庣殑鏄?榪欑鎿嶄綔鏂規硶铏界劧鏈夋晥,浣嗘晥鏋滄槸鏆傛椂鐨?渚涚▼搴忔祴璇曡繕鍙互,涓鏃﹀啀搴﹁繍琛宭dconfig,鍒欑紦瀛樻枃浠跺唴瀹瑰彲鑳芥敼鍙?鎵闇 鐨勫姩鎬侀摼鎺ュ簱鍙兘涓嶈緋葷粺鍏變韓浜?涓庝箣鐩告瘮杈?鍓嶄袱縐嶆柟娉曟槸鍙潬鐨勬柟娉?鍊煎緱涓氬凡瀹氬瀷鐨勫姩鎬侀摼鎺ュ簱鍏變韓鏃墮噰鐢?鍓嶄袱縐嶆柟娉曡繕鏈変竴涓壒鐐?鍗蟲渶鍚庝竴鏉″懡浠ら兘 鏄?ldconfig,涔熷嵆鍧囬渶瑕佹洿鏂頒竴涓嬬紦瀛樻枃浠?浠ョ‘淇濆姩鎬侀摼鎺ュ簱鐨勫叡浜敓鏁?


鍥涖佸惈鏈夊姩鎬佸嚱鏁扮殑紼嬪簭鐨勭紪璇?


4.1 闃叉緙栬瘧鍥犳湭鎸囧畾鍔ㄦ侀摼鎺ュ簱鑰屽嚭閿?


褰撲竴涓▼搴忎嬌鐢ㄥ姩鎬佸嚱鏁版椂,緙栬瘧璇ョ▼搴忔椂灝卞繀欏繪寚瀹氬惈鎵鐢ㄥ姩鎬佸嚱鏁扮殑鍔ㄦ侀摼鎺ュ簱,鍚﹀垯緙栬瘧灝嗕細鍑洪敊閫鍑?濡傛湰鏂囩ず渚嬬▼搴廰dy.c鐨勭紪璇?鏈槑紜紩鐢ㄥ姩鎬侀摼鎺ュ簱libmy.so):


# cc -o ady ady.c
/tmp/ccL4FsJp.o: In function `main':
/tmp/ccL4FsJp.o(.text+0x43): undefined reference to `gettime'
collect2: ld returned 1 exit status
#


娉? 鍥犱負ady.c鎵鍚殑鍔ㄦ佸嚱鏁癵etdate,gettime涓嶅湪緋葷粺鍑芥暟搴撲腑,鎵浠ヨ繛鎺ユ椂鍑洪敊.


4.2 緙栬瘧鏃跺紩鐢ㄥ姩鎬侀摼鎺ュ簱鐨勫嚑縐嶆柟寮?


(1)褰撴墍鐢ㄧ殑鍔ㄦ侀摼鎺ュ簱鍦ㄧ郴緇熺洰褰?/lib,/usr/lib)涓嬫椂,鍙敤緙栬瘧閫夐」-l鏉ュ紩鐢?鍗?


# cc -lmy -o ady ady.c
#


娉?緙栬瘧鏃剁敤-l閫夐」寮曠敤鍔ㄦ侀摼鎺ュ簱鏃?搴撳悕欏諱嬌鐢ㄥ叾緙╁啓褰㈠紡.鏈緥鐨刴y,琛ㄧず寮曠敤libmy.so搴?鑻ュ紩鐢ㄥ厜鏍囧簱libncurses.so,欏葷敤-lncurses.娉ㄦ剰,-l閫夐」涓庡弬鏁頒箣闂翠笉鑳芥湁絀烘牸,鍚﹀垯浼氬嚭閿?


(2)褰撴墍鐢ㄧ殑鍔ㄦ侀摼鎺ュ簱鍦ㄧ郴緇熺洰褰?/lib,/usr/lib)浠ュ鐨勭洰褰曟椂,欏葷敤緙栬瘧閫夐」-L鏉ユ寚瀹氬姩鎬侀摼鎺ュ簱鎵鍦ㄧ殑鐩綍(渚涚紪璇戝櫒鏌ユ壘鐢?,鍚屾椂鐢?l閫夐」鎸囧畾緙╁啓鐨勫姩鎬侀摼鎺ュ簱鍚?鍗?


# cc -L/usr/zzz/lib -lmy -o ady ady.c
#


(3)鐩存帴寮曠敤鎵闇鐨勫姩鎬侀摼鎺ュ簱.鍗?


# cc -o ady ady.c libmy.so
#


鎴?


# cc -o ady ady.c /lib/libmy.so
#


絳夌瓑.鍏朵腑,鍔ㄦ侀摼鎺ュ簱鐨勫簱鍚嶅彲浠ラ噰鐢ㄧ浉瀵硅礬寰勫艦寮?鏂囦歡鍚嶄笉浠?寮澶?,涔熷彲閲囩敤緇濆璺緞褰㈠紡(鏂囦歡鍚嶄互/寮澶?.


浜斻佸姩鎬侀摼鎺ョ▼搴忕殑榪愯涓庢鏌?


5.1 榪愯


緙栬瘧榪炴帴濂藉惈鍔ㄦ佸嚱鏁扮殑紼嬪簭鍚?灝卞彲浠ヨ繍琛屽畠浜?鍔ㄦ侀摼鎺ョ▼搴忓洜涓哄叡浜簡緋葷粺涓殑鍔ㄦ侀摼鎺ュ簱,鎵浠ュ叾絀洪棿鍗犵敤寰堝皬.浣嗚繖騫朵笉鎰忓懗鍔熻兘鐨勫噺灝?瀹冪殑鎵ц涓庨潤鎬佽繛鎺ョ殑紼嬪簭鎵ц,鏁堟灉瀹屽叏鐩稿悓.鍦ㄥ懡浠ゆ彁紺虹涓嬮敭鍏ョ▼搴忓悕鍙婄浉鍏沖弬鏁板悗鍥炶濺鍗沖彲,濡備笅渚?


$ ady
鍔ㄦ侀摼鎺ュ簱楂樼駭搴旂敤紺鴻寖
褰撳墠鏃ユ湡: 2002-03-11
褰撳墠鏃墮棿: 19:39:06
$


5.2 媯鏌?


媯鏌ヤ粈涔?媯鏌ュ姩鎬侀摼鎺ョ▼搴忕┒绔熼渶瑕佸摢浜涘叡浜簱,緋葷粺涓槸鍚﹀凡鏈夎繖浜涘簱,娌℃湁鐨勮瘽,鐢ㄦ埛濂芥兂鍔炴硶鎶婅繖浜涘簱瑁呬笂.


鎬庝箞媯鏌ュ憿?榪欓噷,鍛婅瘔浣犱竴涓疄鐢ㄧ▼搴?-ldd,榪欎釜紼嬪簭灝辨槸涓撻棬鐢ㄦ潵媯鏌ュ姩鎬侀摼鎺ョ▼搴忎緷璧栧摢浜涘叡浜簱鐨?


ldd鍛戒護琛岀敤娉曞涓?


ldd [--version] [-v|--verbose] [-d|--data-relocs] [-r|--function-relocs] [--help] FILE...


鍚勯夐」璇存槑濡備笅:


(1) --version : 姝ら夐」鐢ㄤ簬鎵撳嵃鍑簂dd鐨勭増鏈彿.


(2) -v 鎴?--verbose : 姝ら夐」鎸囩ずldd杈撳嚭鍏充簬鎵渚濊禆鐨勫姩鎬侀摼鎺ュ簱鐨勫敖鍙兘璇︾粏鐨勪俊鎭?


(3) -d 鎴?--data-relocs : 姝ら夐」鎵ц閲嶅畾浣?騫朵笖鏄劇ず涓嶅瓨鍦ㄧ殑鍑芥暟.


(4) -r 鎴?--function-relocs : 姝ら夐」鎵ц鏁版嵁瀵硅薄涓庡嚱鏁扮殑閲嶅畾浣?鍚屾椂鎶ュ憡涓嶅瓨鍦ㄧ殑瀵硅薄.


(5) --help : 姝ら夐」鐢ㄤ簬鎵撳嵃鍑簂dd鐨勫府鍔╀俊鎭?


娉? 涓婅堪閫夐」涓?甯哥敤-v(鎴?-verbose)閫夐」.


ldd鐨勫懡浠よ鍙傛暟涓篎ILE...,鍗充竴涓垨澶氫釜鏂囦歡鍚?鍔ㄦ侀摼鎺ョ▼搴忔垨鍔ㄦ侀摼鎺ュ簱).


渚?:


$ ldd ady
libmy.so => ./libmy.so (0x40026000)
libc.so.6 => /lib/libc.so.6 (0x40028000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
$


娉? 姣忚=>鍓嶉潰鐨?涓哄姩鎬侀摼鎺ョ▼搴忔墍闇鐨勫姩鎬侀摼鎺ュ簱鐨勫悕瀛?鑰?>鍚庨潰鐨?鍒欐槸榪愯鏃剁郴緇熷疄闄呰皟鐢ㄧ殑鍔ㄦ侀摼鎺ュ簱鐨勫悕瀛?鎵闇鐨勫姩鎬侀摼鎺ュ簱鍦ㄧ郴緇? 涓笉瀛樺湪鏃?=>鍚庨潰灝嗘樉紺?not found",鎷彿鎵鎷殑鏁板瓧涓鴻櫄鎷熺殑鎵ц鍦板潃.鏈緥鍒楀嚭ady鎵闇鐨勪笁涓姩鎬侀摼鎺ュ簱,鍏朵腑libmy.so涓鴻嚜宸辨柊寤虹殑鍔ㄦ侀摼鎺ュ簱,鑰? libc.so.6涓?lib/ld-linux.so.2鍧囦負緋葷粺鐨勫姩鎬侀摼鎺ュ簱,鍓嶄竴涓負鍩烘湰C搴?鍚庝竴涓姩鎬佽鍏ュ簱(鐢ㄤ簬鍔ㄦ侀摼鎺ュ簱鐨勮鍏ュ強榪愯).


渚?:


$ ldd -v ady
libmy.so => ./libmy.so (0x40026000)
libc.so.6 => /lib/libc.so.6 (0x40028000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)


Version information:
./ady:
libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/libc.so.6
./libmy.so:
libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/libc.so.6
/lib/libc.so.6:
ld-linux.so.2 (GLIBC_2.1.1) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.2.3) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.2) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.0) => /lib/ld-linux.so.2
$


娉?鏈緥鐢?v閫夐」浠ユ樉紺哄敖鍙兘澶氱殑淇℃伅,鎵浠ヤ緥涓櫎鍒楀嚭ady鎵闇瑕佺殑鍔ㄦ侀摼鎺ュ簱澶?榪樺垪鍑轟簡紼嬪簭鎵闇鍔ㄦ侀摼鎺ュ簱鐗堟湰鏂歸潰鐨勪俊鎭?


灝忕粨: 鍦↙INUX鍔ㄦ侀摼鎺ュ簱鐨勯珮綰у簲鐢ㄤ腑,鍏抽敭鏈変袱鐐?涓鏄浣曡鍔ㄦ侀摼鎺ュ簱涓篖INUX緋葷粺鎵鍏變韓,浜屾槸緙栬瘧榪炴帴紼嬪簭鏃跺浣曞仛.璁╁姩鎬侀摼鎺ュ簱涓虹郴緇熸墍鍏變韓, 涓昏鏄敤ldconfig綆$悊鍛戒護,緇存姢濂界郴緇熷叡浜簱鐨勭紦瀛樻枃浠?etc/ld.so.cache.緙栬瘧榪炴帴鏃跺浣曞仛?娉ㄦ剰榪炴帴涓婃墍鐢ㄧ殑鍔ㄦ侀摼鎺ュ簱灝卞彲浠? 浜?LINUX鍔ㄦ侀摼鎺ュ簱鐨勯珮綰у簲鐢?鐢ㄤ竴鐢ㄥ氨鏄庣櫧:鍏跺疄,灝辨槸榪欎箞綆鍗?
鐐瑰嚮榪欓噷涓嬭澆紺轟緥紼嬪簭銆?

baidu


]]>
鍔ㄦ佽仈鎺ュ簱http://m.shnenglu.com/mydriverc/articles/33166.html鏃呴?/dc:creator>鏃呴?/author>Fri, 28 Sep 2007 18:03:00 GMThttp://m.shnenglu.com/mydriverc/articles/33166.htmlhttp://m.shnenglu.com/mydriverc/comments/33166.htmlhttp://m.shnenglu.com/mydriverc/articles/33166.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/33166.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/33166.html 鍋囪鎴戜滑鏈変笅闈竴涓潪甯哥畝鍗曠殑婧愮▼搴?hello.c):
int main(int argc,char **argv)
{
printf("Hello Linux\n");
}

瑕佺紪璇戣繖涓▼搴?鎴戜滑鍙鍦ㄥ懡浠よ涓嬫墽琛?
gcc -o hello hello.c
gcc 緙栬瘧鍣ㄥ氨浼氫負鎴戜滑鐢熸垚涓涓猦ello鐨勫彲鎵ц鏂囦歡.鎵ц./hello灝卞彲浠ョ湅鍒扮▼搴忕殑杈撳嚭緇撴灉浜?鍛戒護琛屼腑 gcc琛ㄧず鎴戜滑鏄敤gcc鏉ョ紪璇戞垜浠殑婧愮▼搴?-o 閫夐」琛ㄧず鎴戜滑瑕佹眰緙栬瘧鍣ㄧ粰鎴戜滑杈撳嚭鐨勫彲鎵ц鏂囦歡鍚嶄負hello 鑰宧ello.c鏄垜浠殑婧愮▼搴忔枃浠?
gcc緙栬瘧鍣ㄦ湁璁稿閫夐」,涓鑸潵璇存垜浠彧瑕佺煡閬撳叾涓殑鍑犱釜灝卞浜? -o閫夐」鎴戜滑宸茬粡鐭ラ亾浜?琛ㄧず鎴戜滑瑕佹眰杈撳嚭鐨勫彲鎵ц鏂囦歡鍚? -c閫夐」琛ㄧず鎴戜滑鍙姹傜紪璇戝櫒杈撳嚭鐩爣浠g爜,鑰屼笉蹇呰杈撳嚭鍙墽琛屾枃浠? -g閫夐」琛ㄧず鎴戜滑瑕佹眰緙栬瘧鍣ㄥ湪緙栬瘧鐨勬椂鍊欐彁渚涙垜浠互鍚庡紼嬪簭榪涜璋冭瘯鐨勪俊鎭?
鐭ラ亾浜嗚繖涓変釜閫夐」,鎴戜滑灝卞彲浠ョ紪璇戞垜浠嚜宸辨墍鍐欑殑綆鍗曠殑婧愮▼搴忎簡,濡傛灉浣犳兂瑕佺煡閬撴洿澶氱殑閫夐」,鍙互鏌ョ湅gcc鐨勫府鍔╂枃妗?閭i噷鏈夌潃璁稿瀵瑰叾瀹冮夐」鐨勮緇嗚鏄?
2.Makefile鐨勭紪鍐?
鍋囪鎴戜滑鏈変笅闈㈣繖鏍風殑涓涓▼搴?婧愪唬鐮佸涓?

/* main.c */
#include "mytool1.h"
#include "mytool2.h"

int main(int argc,char **argv)
{
mytool1_print("hello");
mytool2_print("hello");
}

/* mytool1.h */
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H

void mytool1_print(char *print_str);

#endif

/* mytool1.c */
#include "mytool1.h"
void mytool1_print(char *print_str)
{
printf("This is mytool1 print %s\n",print_str);
}

/* mytool2.h */
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H

void mytool2_print(char *print_str);

#endif

/* mytool2.c */
#include "mytool2.h"
void mytool2_print(char *print_str)
{
printf("This is mytool2 print %s\n",print_str);
}


褰撶劧鐢變簬榪欎釜紼嬪簭鏄緢鐭殑鎴戜滑鍙互榪欐牱鏉ョ紪璇?
gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o
榪? 鏍風殑璇濇垜浠篃鍙互浜х敓main紼嬪簭,鑰屼笖涔熶笉鏃跺緢楹葷儲.浣嗘槸濡傛灉鎴戜滑鑰冭檻涓涓嬪鏋滄湁涓澶╂垜浠慨鏀逛簡鍏朵腑鐨勪竴涓枃浠?姣斿璇磎ytool1.c)閭d箞鎴戜滑闅? 閬撹繕瑕侀噸鏂拌緭鍏ヤ笂闈㈢殑鍛戒護?涔熻浣犱細璇?榪欎釜寰堝鏄撹В鍐沖晩,鎴戝啓涓涓猄HELL鑴氭湰,璁╁ス甯垜鍘誨畬鎴愪笉灝卞彲浠ヤ簡.鏄殑瀵逛簬榪欎釜紼嬪簭鏉ヨ,鏄彲浠ヨ搗鍒頒綔鐢? 鐨?浣嗘槸褰撴垜浠妸浜嬫儏鎯崇殑鏇村鏉備竴鐐?濡傛灉鎴戜滑鐨勭▼搴忔湁鍑犵櫨涓簮紼嬪簭鐨勬椂鍊?闅鵑亾涔熻緙栬瘧鍣ㄩ噸鏂頒竴涓竴涓殑鍘葷紪璇?
涓烘,鑱槑鐨勭▼搴忓憳浠兂鍑? 浜嗕竴涓緢濂界殑宸ュ叿鏉ュ仛榪欎歡浜嬫儏,榪欏氨鏄痬ake.鎴戜滑鍙鎵ц浠ヤ笅make,灝卞彲浠ユ妸涓婇潰鐨勯棶棰樿В鍐蟲帀.鍦ㄦ垜浠墽琛宮ake涔嬪墠,鎴戜滑瑕佸厛緙栧啓涓涓潪甯擱噸 瑕佺殑鏂囦歡.--Makefile.瀵逛簬涓婇潰鐨勯偅涓▼搴忔潵璇?鍙兘鐨勪竴涓狹akefile鐨勬枃浠舵槸:
# 榪欐槸涓婇潰閭d釜紼嬪簭鐨凪akefile鏂囦歡
main:main.o mytool1.o mytool2.o
gcc -o main main.o mytool1.o mytool2.o
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c

鏈変簡榪欎釜Makefile鏂囦歡,涓嶈繃鎴戜滑浠涔堟椂鍊欎慨鏀逛簡婧愮▼搴忓綋涓殑浠涔堟枃浠?鎴戜滑鍙鎵цmake鍛戒護,鎴戜滑鐨勭紪璇戝櫒閮藉彧浼氬幓緙栬瘧鍜屾垜浠慨鏀圭殑鏂囦歡鏈夊叧鐨勬枃浠?鍏跺畠鐨勬枃浠跺ス榪炵悊閮戒笉鎯沖幓鐞嗙殑.
涓嬮潰鎴戜滑瀛︿範Makefile鏄浣曠紪鍐欑殑.
鍦∕akefile涓篃#寮濮嬬殑琛岄兘鏄敞閲婅.Makefile涓渶閲嶈鐨勬槸鎻忚堪鏂囦歡鐨勪緷璧栧叧緋葷殑璇存槑.涓鑸殑鏍煎紡鏄?
target: components
TAB rule

絎竴琛岃〃紺虹殑鏄緷璧栧叧緋?絎簩琛屾槸瑙勫垯.
姣斿璇存垜浠笂闈㈢殑閭d釜Makefile鏂囦歡鐨勭浜岃
main:main.o mytool1.o mytool2.o
琛?紺烘垜浠殑鐩爣(target)main鐨勪緷璧栧璞?components)鏄痬ain.o mytool1.o mytool2.o 褰撳氳禆鐨勫璞″湪鐩爣淇敼鍚庝慨鏀圭殑璇?灝辮鍘繪墽琛岃鍒欎竴琛屾墍鎸囧畾鐨勫懡浠?灝辮薄鎴戜滑鐨勪笂闈㈤偅涓狹akefile絎笁琛屾墍璇寸殑涓鏍瘋鎵ц gcc -o main main.o mytool1.o mytool2.o 娉ㄦ剰瑙勫垯涓琛屼腑鐨凾AB琛ㄧず閭i噷鏄竴涓猅AB閿?
Makefile鏈変笁涓潪甯告湁鐢ㄧ殑鍙橀噺.鍒嗗埆鏄?@,$^,$<浠h〃鐨勬剰涔夊垎鍒槸:
$@--鐩爣鏂囦歡,$^--鎵鏈夌殑渚濊禆鏂囦歡,$<--絎竴涓緷璧栨枃浠?
濡傛灉鎴戜滑浣跨敤涓婇潰涓変釜鍙橀噺,閭d箞鎴戜滑鍙互綆鍖栨垜浠殑Makefile鏂囦歡涓?
# 榪欐槸綆鍖栧悗鐨凪akefile
main:main.o mytool1.o mytool2.o
gcc -o $@ $^
main.o:main.c mytool1.h mytool2.h
gcc -c $<
mytool1.o:mytool1.c mytool1.h
gcc -c $<
mytool2.o:mytool2.c mytool2.h
gcc -c $<

緇忚繃綆鍖栧悗鎴戜滑鐨凪akefile鏄畝鍗曚簡涓鐐?涓嶈繃浜轟滑鏈夋椂鍊欒繕鎯崇畝鍗曚竴鐐?榪欓噷鎴戜滑瀛︿範涓涓狹akefile鐨勭己鐪佽鍒?
.c.o:
gcc -c $<


榪欎釜瑙勫垯琛ㄧず鎵鏈夌殑 .o鏂囦歡閮芥槸渚濊禆涓庣浉搴旂殑.c鏂囦歡鐨?渚嬪mytool.o渚濊禆浜巑ytool.c榪欐牱Makefile榪樺彲浠ュ彉涓?
# 榪欐槸鍐嶄竴嬈$畝鍖栧悗鐨凪akefile
main:main.o mytool1.o mytool2.o
gcc -o $@ $^
.c.o:
gcc -c $<

濂戒簡,鎴戜滑鐨凪akefile 涔熷樊涓嶅浜?濡傛灉鎯崇煡閬撴洿澶氱殑鍏充簬Makefile瑙勫垯鍙互鏌ョ湅鐩稿簲鐨勬枃妗?
3.紼嬪簭搴撶殑閾炬帴
璇曠潃緙栬瘧涓嬮潰榪欎釜紼嬪簭

/* temp.c */
#include

int main(int argc,char **argv)
{
double value;
printf("value:%f\n",value);
}

榪欎釜紼嬪簭鐩稿綋綆鍗?浣嗘槸褰撴垜浠敤 gcc -o temp temp.c 緙栬瘧鏃朵細鍑虹幇涓嬮潰鎵紺虹殑閿欒.
/tmp/cc33Kydu.o: In function `main:
/tmp/cc33Kydu.o(.text+0xe): undefined reference to `log
collect2: ld returned 1 exit status

鍑? 鐜拌繖涓敊璇槸鍥犱負緙栬瘧鍣ㄦ壘涓嶅埌log鐨勫叿浣撳疄鐜?铏界劧鎴戜滑鍖呮嫭浜嗘紜殑澶存枃浠?浣嗘槸鎴戜滑鍦ㄧ紪璇戠殑鏃跺欒繕鏄榪炴帴紜畾鐨勫簱.鍦↙inux涓?涓轟簡浣跨敤鏁板鍑? 鏁?鎴戜滑蹇呴』鍜屾暟瀛﹀簱榪炴帴,涓烘鎴戜滑瑕佸姞鍏?-lm 閫夐」. gcc -o temp temp.c -lm榪欐牱鎵嶈兘澶熸紜殑緙栬瘧.涔熻鏈変漢瑕侀棶,鍓嶉潰鎴戜滑鐢╬rintf鍑芥暟鐨勬椂鍊欐庝箞娌℃湁榪炴帴搴撳憿?鏄繖鏍風殑,瀵逛簬涓浜涘父鐢ㄧ殑鍑芥暟鐨勫疄鐜?gcc緙栬瘧鍣ㄤ細鑷? 鍔ㄥ幓榪炴帴涓浜涘父鐢ㄥ簱,榪欐牱鎴戜滑灝辨病鏈夊繀瑕佽嚜宸卞幓鎸囧畾浜? 鏈夋椂鍊欐垜浠湪緙栬瘧紼嬪簭鐨勬椂鍊欒繕瑕佹寚瀹氬簱鐨勮礬寰?榪欎釜鏃跺欐垜浠鐢ㄥ埌緙栬瘧鍣ㄧ殑 -L閫夐」鎸囧畾璺緞.姣斿璇存垜浠湁涓涓簱鍦?/home/hoyt/mylib涓?榪欐牱鎴戜滑緙栬瘧鐨勬椂鍊欒繕瑕佸姞涓? -L/home/hoyt/mylib.瀵逛簬涓浜涙爣鍑嗗簱鏉ヨ,鎴戜滑娌℃湁蹇呰鎸囧嚭璺緞.鍙瀹冧滑鍦ㄨ搗緙虹渷搴撶殑璺緞涓嬪氨鍙互浜?緋葷粺鐨勭己鐪佸簱鐨勮礬寰?lib /usr/lib /usr/local/lib 鍦ㄨ繖涓変釜璺緞涓嬮潰鐨勫簱,鎴戜滑鍙互涓嶆寚瀹氳礬寰?
榪樻湁涓涓棶棰?鏈夋椂鍊欐垜浠嬌鐢ㄤ簡鏌愪釜鍑芥暟,浣? 鏄垜浠笉鐭ラ亾搴撶殑鍚嶅瓧,榪欎釜鏃跺欐庝箞鍔炲憿?寰堟姳姝?瀵逛簬榪欎釜闂鎴戜篃涓嶇煡閬撶瓟妗?鎴戝彧鏈変竴涓偦鍔炴硶.棣栧厛,鎴戝埌鏍囧噯搴撹礬寰勪笅闈㈠幓鎵劇湅鐪嬫湁娌℃湁鍜屾垜鐢ㄧ殑鍑芥暟 鐩稿叧鐨勫簱,鎴戝氨榪欐牱鎵懼埌浜嗙嚎紼?thread)鍑芥暟鐨勫簱鏂囦歡(libpthread.a). 褰撶劧,濡傛灉鎵句笉鍒?鍙湁涓涓鏂規硶.姣斿鎴戣鎵緎in榪欎釜鍑芥暟鎵鍦ㄧ殑搴? 灝卞彧濂界敤 nm -o /lib/*.so|grep sin>~/sin 鍛戒護,鐒跺悗鐪媬/sin鏂囦歡,鍒伴偅閲岄潰鍘繪壘浜? 鍦╯in鏂囦歡褰撲腑,鎴戜細鎵懼埌榪欐牱鐨勪竴琛宭ibm-2.1.2.so:00009fa0 W sin 榪欐牱鎴戝氨鐭ラ亾浜唖in鍦? libm-2.1.2.so搴撻噷闈?鎴戠敤 -lm閫夐」灝卞彲浠ヤ簡(鍘繪帀鍓嶉潰鐨刲ib鍜屽悗闈㈢殑鐗堟湰鏍囧織,灝卞墿涓媘浜嗘墍浠ユ槸 -lm). 濡傛灉浣犵煡閬撴庝箞鎵?璇瘋刀蹇憡璇夋垜,鎴戝洖闈炲父鎰熸縺鐨?璋㈣阿!
4.紼嬪簭鐨勮皟璇?
鎴戜滑緙栧啓鐨勭▼搴忎笉澶彲鑳戒竴嬈℃у氨浼氭垚鍔熺殑,鍦ㄦ垜浠殑紼嬪簭褰撲腑,浼氬嚭鐜拌璁稿澶氭垜浠兂涓嶅埌鐨勯敊璇?榪欎釜鏃跺欐垜浠氨瑕佸鎴戜滑鐨勭▼搴忚繘琛岃皟璇曚簡.
鏈 甯哥敤鐨勮皟璇曡蔣浠舵槸gdb.濡傛灉浣犳兂鍦ㄥ浘褰㈢晫闈笅璋冭瘯紼嬪簭,閭d箞浣犵幇鍦ㄥ彲浠ラ夋嫨xxgdb.璁板緱瑕佸湪緙栬瘧鐨勬椂鍊欏姞鍏? -g閫夐」.鍏充簬gdb鐨勪嬌鐢ㄥ彲浠ョ湅gdb鐨勫府鍔╂枃浠?鐢變簬鎴戞病鏈夌敤榪囪繖涓蔣浠?鎵浠ユ垜涔熶笉鑳藉璇村嚭濡備綍浣跨敤. 涓嶈繃鎴戜笉鍠滄鐢╣db.璺熻釜涓涓▼搴忔槸寰堢儲鐨勪簨鎯?鎴戜竴鑸敤鍦ㄧ▼搴忓綋涓緭鍑轟腑闂村彉閲忕殑鍊兼潵璋冭瘯紼嬪簭鐨?褰撶劧浣犲彲浠ラ夋嫨鑷繁鐨勫姙娉?娌℃湁蹇呰鍘誨鍒漢鐨?鐜? 鍦ㄦ湁浜嗚澶欼DE鐜,閲岄潰宸茬粡鑷繁甯︿簡璋冭瘯鍣ㄤ簡.浣犲彲浠ラ夋嫨鍑犱釜璇曚竴璇曟壘鍑鴻嚜宸卞枩嬈㈢殑涓涓敤.

5.澶存枃浠跺拰緋葷粺姹傚姪
鏈夋椂鍊欐垜浠彧鐭ラ亾涓涓嚱鏁扮殑澶ф褰㈠紡,涓嶈寰楃‘鍒囩殑琛ㄨ揪寮?鎴栬呮槸涓嶈寰楃潃鍑芥暟鍦ㄩ偅涓ご鏂囦歡榪涜浜嗚鏄?榪欎釜鏃跺欐垜浠彲浠ユ眰鍔╃郴緇?
姣?濡傝鎴戜滑鎯崇煡閬揻read榪欎釜鍑芥暟鐨勭‘鍒囧艦寮?鎴戜滑鍙鎵ц man fread 緋葷粺灝變細杈撳嚭鐫鍑芥暟鐨勮緇嗚В閲婄殑.鍜岃繖涓嚱鏁版墍鍦ㄧ殑澶存枃浠惰鏄庝簡. 濡傛灉鎴戜滑瑕亀rite榪欎釜鍑芥暟鐨勮鏄?褰撴垜浠墽琛宮an write鏃?杈撳嚭鐨勭粨鏋滃嵈涓嶆槸鎴戜滑鎵闇瑕佺殑. 鍥犱負鎴戜滑瑕佺殑鏄痺rite榪欎釜鍑芥暟鐨勮鏄?鍙槸鍑烘潵鐨勫嵈鏄痺rite榪欎釜鍛戒護鐨勮鏄?涓轟簡寰楀埌write鐨勫嚱鏁拌鏄庢垜浠鐢?man 2 write. 2琛ㄧず鎴戜滑鐢ㄧ殑write榪欎釜鍑芥暟鏄郴緇熻皟鐢ㄥ嚱鏁?榪樻湁涓涓垜浠父鐢ㄧ殑鏄?琛ㄧず鍑芥暟鏄疌鐨勫簱鍑芥暟.
璁頒綇涓嶇浠涔堟椂鍊?man閮芥槸鎴戜滑鐨勬渶濂藉姪鎵?


----------------------------------------------------------------
濂戒簡,榪欎竴绔犲氨璁茶繖涔堝浜?鏈変簡榪欎簺鐭ヨ瘑鎴戜滑灝卞彲浠ヨ繘鍏ユ縺鍔ㄤ漢蹇冪殑Linux涓嬬殑C紼嬪簭鎺㈤櫓媧誨姩.


Trackback: http://tb.donews.net/TrackBack.aspx?PostId=75642



]]>
Linux鍔ㄦ侀摼鎺ュ簱(鏍囧噯瀵硅薄)緙栫▼鍏ラ棬http://m.shnenglu.com/mydriverc/articles/33164.html鏃呴?/dc:creator>鏃呴?/author>Fri, 28 Sep 2007 17:45:00 GMThttp://m.shnenglu.com/mydriverc/articles/33164.htmlhttp://m.shnenglu.com/mydriverc/comments/33164.htmlhttp://m.shnenglu.com/mydriverc/articles/33164.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/33164.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/33164.htmlLinux鍔ㄦ侀摼鎺ュ簱緙栫▼鍏ラ棬

銆銆鍔ㄦ侀摼鎺ュ簱鏄竴縐嶉氱敤鐨勮蔣浠剁粍浠舵妧鏈紝鏄縐嶆搷浣滅郴緇熶腑鎻愪緵鍩烘湰鏈嶅姟鐨勬柟寮忋傛瘮濡俉in32鍐呮牳灝辨槸3涓狣LL鏂囦歡鏋勬垚銆傝繖縐嶆妧鏈湪Linux鎿嶄綔緋葷粺涓嬩篃鏈夊搴旂殑瀹炵幇錛屽氨鏄疞inux鏍囧噯瀵硅薄Standard Ojbect錛屽搴旂殑鏂囦歡鎵╁睍鍚嶄負.so銆?/font>

銆銆涓嬮潰閫氳繃涓涓畝鍗曠殑渚嬪瓙寮濮嬩粙緇峀inux鏍囧噯瀵硅薄銆?/font>

銆銆鎴戜滑鐨勬爣鍑嗗璞℃枃浠跺惈鏈変竴涓嚱鏁幫紝涓嶉渶瑕佸0鏄巈xport瀵煎嚭絎﹀彿錛屽彧闇瑕佺紪璇戝櫒璁劇疆鍗沖彲銆傚涓嬶細

銆銆#include

銆銆#include

銆銆void show() {

銆銆printf("Standard Object by gashero\n");

銆銆}

銆銆淇濆瓨涓簃yso.c鏂囦歡錛屾寜鐓у涓嬬紪璇戯細

銆銆$ gcc -fPIC -shared -o libmyso.so myso.c

銆銆鎵ц鐢熸垚涓涓猯ibmyso.so鏂囦歡錛屾寜鐓inux鏍囧噯瀵硅薄鐨勫懡鍚嶆儻渚嬶紝搴旇鍦ㄥ簱鍚嶇О涔嬪墠鍔犱笂"lib"鍓嶇紑錛屽敖綆′笉鏄繀欏葷殑銆傜紪璇戝紑鍏?fPIC浠h〃鍑芥暟絎﹀彿鍙互閲嶅畾鍚戯紝-shared浠h〃緙栬瘧緇撴灉鏄竴涓爣鍑嗗璞°?/font>

銆銆涓嶅悓浜嶹in32DLL錛孡inux鏍囧噯瀵硅薄涓殑鎵鏈夊嚱鏁伴兘鏄洿鎺ュ鍑虹殑錛岄兘鍙互琚皟鐢ㄧ▼搴忔墍璁塊棶銆備笅闈㈡垜浠紪鍐欒皟鐢ㄧ▼搴忥細

銆銆#include

銆銆int main() {

銆銆printf("Invoke my so\n");

銆銆show();

銆銆return 0;

銆銆}

銆銆淇濆瓨涓篿nvoke.c錛屾寜鐓у涓媑cc寮鍏崇紪璇戯細

銆銆$ gcc -o test invoke.c ./libmyso.so

銆銆緙栬瘧鐢熸垚test鍙墽琛屾枃浠躲傚涓婄紪璇戞潯浠剁殑鏈鍚庝竴鏉¢渶瑕佹槸鎵璋冪敤鐨勬爣鍑嗗璞℃枃浠跺悕錛屾敞鎰忓繀欏誨惈鏈夎礬寰勩傚鏋滃彧鏄嬌鐢╨ibmyso.so錛屽垯蹇呴』紜繚榪欎釜鏂囦歡鍦ㄥ彲璁塊棶鐨凱ATH涓嬮潰銆傛湰渚嬫墍浣跨敤鐨勬枃浠跺悕"./libmyso.so"鏄綋鍓嶈礬寰勪笅鐨勶紝浣跨敤浜嗙浉瀵硅礬寰勩?/font>

銆銆濡備笅嫻嬭瘯緇撴灉錛?/font>

銆銆$ ./test

銆銆Invoke my so

銆銆Standard Object by gashero



]]>
鐢╣cc緙栬瘧鐢熸垚鍔ㄦ侀摼鎺ュ簱*.so鏂囦歡鐨勬柟娉曘?/title><link>http://m.shnenglu.com/mydriverc/articles/33163.html</link><dc:creator>鏃呴?/dc:creator><author>鏃呴?/author><pubDate>Fri, 28 Sep 2007 17:31:00 GMT</pubDate><guid>http://m.shnenglu.com/mydriverc/articles/33163.html</guid><wfw:comment>http://m.shnenglu.com/mydriverc/comments/33163.html</wfw:comment><comments>http://m.shnenglu.com/mydriverc/articles/33163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/mydriverc/comments/commentRss/33163.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/mydriverc/services/trackbacks/33163.html</trackback:ping><description><![CDATA[鍔ㄦ佸簱*.so鍦╨inux涓嬬敤c鍜宑++緙栫▼鏃剁粡甯鎬細紕板埌錛屾渶榪戝湪緗戠珯鎵句簡鍑犵瘒鏂囩珷浠嬬粛鍔ㄦ佸簱鐨勭紪璇戝拰閾炬帴錛屾葷畻鎼炴噦浜嗚繖涓箣鍓嶄竴鐩翠笉澶簡瑙e緱涓滀笢錛岃繖閲屽仛涓瑪璁幫紝涔熶負鍏跺畠姝d負鍔ㄦ佸簱閾炬帴搴撹岃嫤鎭肩殑鍏勫紵浠彁渚涗竴鐐瑰府鍔┿?br />1銆佸姩鎬佸簱鐨勭紪璇?br /><br />涓嬮潰閫氳繃涓涓緥瀛愭潵浠嬬粛濡備綍鐢熸垚涓涓姩鎬佸簱銆傝繖閲屾湁涓涓ご鏂囦歡錛歴o_test.h錛屼笁涓?c鏂囦歡錛歵est_a.c銆乼est_b.c銆乼est_c.c錛屾垜浠皢榪欏嚑涓枃浠剁紪璇戞垚涓涓姩鎬佸簱錛歭ibtest.so銆?br /><br />so_test.h錛?br /><br /><br /><br />#include <br /><br />#include <br /><br /><br /><br />void test_a();<br /><br />void test_b();<br /><br />void test_c();<br /><br /><br /><br />test_a.c錛?br /><br /><br /><br />#include "so_test.h"<br /><br /><br /><br />void test_a()<br /><br />{<br /><br /> printf("this is in test_a...\n");<br /><br />}<br /><br /><br /><br />test_b.c錛?br /><br /><br /><br />#include "so_test.h"<br /><br /><br /><br />void test_b()<br /><br />{<br /><br /> printf("this is in test_b...\n");<br /><br />}<br /><br /><br /><br />test_a.c錛?br /><br /><br /><br />#include "so_test.h"<br /><br /><br /><br />void test_c()<br /><br />{<br /><br /> printf("this is in test_c...\n");<br /><br />}<br /><br /><br /><br />灝嗚繖鍑犱釜鏂囦歡緙栬瘧鎴愪竴涓姩鎬佸簱錛歭ibtest.so<br /><br /><br /><br />$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so<br /><br /><br />2銆佸姩鎬佸簱鐨勯摼鎺?br /><br />鍦?銆佷腑錛屾垜浠凡緇忔垚鍔熺敓鎴愪簡涓涓嚜宸辯殑鍔ㄦ侀摼鎺ュ簱libtest.so錛屼笅闈㈡垜浠氳繃涓涓▼搴忔潵璋冪敤榪欎釜搴撻噷鐨勫嚱鏁般傜▼搴忕殑婧愭枃浠朵負錛歵est.c銆?br /><br />test.c錛?br /><br /><br /><br />#include "so_test.h"<br /><br /><br /><br />int main()<br /><br />{<br /><br /> test_a();<br /><br /> test_b();<br /><br /> test_c();<br /><br /><br /><br /> return 0;<br /><br />}<br /><br /><br /><br />l 灝唗est.c涓庡姩鎬佸簱libtest.so閾炬帴鐢熸垚鎵ц鏂囦歡test錛?br /><br /><br /><br />$ gcc test.c -L. -ltest -o test<br /><br /><br /><br />l 嫻嬭瘯鏄惁鍔ㄦ佽繛鎺ワ紝濡傛灉鍒楀嚭libtest.so錛岄偅涔堝簲璇ユ槸榪炴帴姝e父浜?br /><br /><br /><br />$ ldd test<br /><br /><br /><br />l 鎵цtest錛屽彲浠ョ湅鍒板畠鏄浣曡皟鐢ㄥ姩鎬佸簱涓殑鍑芥暟鐨勩?br />3銆佺紪璇戝弬鏁拌В鏋?br />鏈涓昏鐨勬槸GCC鍛戒護琛岀殑涓涓夐」:<br /> -shared 璇ラ夐」鎸囧畾鐢熸垚鍔ㄦ佽繛鎺ュ簱錛堣榪炴帴鍣ㄧ敓鎴怲綾誨瀷鐨勫鍑虹鍙瘋〃錛屾湁鏃跺欎篃鐢熸垚寮辮繛鎺綾誨瀷鐨勫鍑虹鍙鳳級錛屼笉鐢ㄨ鏍囧織澶栭儴紼嬪簭鏃犳硶榪炴帴銆傜浉褰撲簬涓涓彲鎵ц鏂囦歡<br /><br />l -fPIC錛氳〃紺虹紪璇戜負浣嶇疆鐙珛鐨勪唬鐮侊紝涓嶇敤姝ら夐」鐨勮瘽緙栬瘧鍚庣殑浠g爜鏄綅緗浉鍏崇殑鎵浠ュ姩鎬佽澆鍏ユ椂鏄氳繃浠g爜鎷瘋礉鐨勬柟寮忔潵婊¤凍涓嶅悓榪涚▼鐨勯渶瑕侊紝鑰屼笉鑳借揪鍒扮湡姝d唬鐮佹鍏變韓鐨勭洰鐨勩?br /><br />l -L.錛氳〃紺鴻榪炴帴鐨勫簱鍦ㄥ綋鍓嶇洰褰曚腑<br /><br />l -ltest錛氱紪璇戝櫒鏌ユ壘鍔ㄦ佽繛鎺ュ簱鏃舵湁闅愬惈鐨勫懡鍚嶈鍒欙紝鍗沖湪緇欏嚭鐨勫悕瀛楀墠闈㈠姞涓妉ib錛屽悗闈㈠姞涓?so鏉ョ‘瀹氬簱鐨勫悕縐?br /><br />l LD_LIBRARY_PATH錛氳繖涓幆澧冨彉閲忔寚紺哄姩鎬佽繛鎺ュ櫒鍙互瑁呰澆鍔ㄦ佸簱鐨勮礬寰勩?br /><br />l 褰撶劧濡傛灉鏈塺oot鏉冮檺鐨勮瘽錛屽彲浠ヤ慨鏀?etc/ld.so.conf鏂囦歡錛岀劧鍚庤皟鐢?/sbin/ldconfig鏉ヨ揪鍒板悓鏍風殑鐩殑錛屼笉榪囧鏋滄病鏈塺oot鏉冮檺錛岄偅涔堝彧鑳介噰鐢ㄨ緭鍑篖D_LIBRARY_PATH鐨勬柟娉曚簡銆?br />4銆佹敞鎰?br /><br /> 璋冪敤鍔ㄦ佸簱鐨勬椂鍊欐湁鍑犱釜闂浼氱粡甯哥鍒幫紝鏈夋椂錛屾槑鏄庡凡緇忓皢搴撶殑澶存枃浠舵墍鍦ㄧ洰褰?閫氳繃 鈥?I鈥?include榪涙潵浜嗭紝搴撴墍鍦ㄦ枃浠墮氳繃 鈥?L鈥濆弬鏁板紩瀵鹼紝騫舵寚瀹氫簡鈥?l鈥濈殑搴撳悕錛屼絾閫氳繃ldd鍛戒護瀵熺湅鏃訛紝灝辨槸姝繪椿鎵句笉鍒頒綘鎸囧畾閾炬帴鐨剆o鏂囦歡錛岃繖鏃朵綘瑕佷綔鐨勫氨鏄氳繃淇敼 LD_LIBRARY_PATH鎴栬?etc/ld.so.conf鏂囦歡鏉ユ寚瀹氬姩鎬佸簱鐨勭洰褰曘傞氬父榪欐牱鍋氬氨鍙互瑙e喅搴撴棤娉曢摼鎺ョ殑闂浜嗐?br /><br />- 浣滆咃細 鍍忛涓鏍鋒祦嫻?璁塊棶緇熻錛?1銆2005騫?0鏈?1鏃? 鏄熸湡浜?17:08 鍔犲叆鍗氶噰<img src ="http://m.shnenglu.com/mydriverc/aggbug/33163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/mydriverc/" target="_blank">鏃呴?/a> 2007-09-29 01:31 <a href="http://m.shnenglu.com/mydriverc/articles/33163.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>LINUX緋葷粺涓姩鎬侀摼鎺ュ簱鐨勫垱寤轟笌浣跨敤http://m.shnenglu.com/mydriverc/articles/33162.html鏃呴?/dc:creator>鏃呴?/author>Fri, 28 Sep 2007 17:21:00 GMThttp://m.shnenglu.com/mydriverc/articles/33162.htmlhttp://m.shnenglu.com/mydriverc/comments/33162.htmlhttp://m.shnenglu.com/mydriverc/articles/33162.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/33162.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/33162.html 絳旀鏄偗瀹氱殑錛孡INUX鐨勫姩鎬侀摼鎺ュ簱涓嶄粎鏈夛紝鑰屼笖涓烘暟涓嶅皯銆傚湪/lib鐩綍涓嬶紝灝辨湁璁稿浠?so浣滃悗緙鐨勬枃浠訛紝榪欏氨鏄疞INUX緋葷粺搴旂敤鐨勫姩鎬侀摼鎺ュ簱錛? 鍙笉榪囦笌WINDOWS鍙硶涓嶅悓錛屽畠鍙玸o錛屽嵆Shared Object錛屽叡浜璞°?鍦↙INUX涓嬶紝闈欐佸嚱鏁板簱鏄互.a浣滃悗緙鐨? X-WINDOW浣滀負LINUX涓嬬殑鏍囧噯鍥懼艦紿楀彛鐣岄潰錛屽畠鏈韓灝遍噰鐢ㄤ簡寰堝鐨勫姩鎬侀摼鎺ュ簱(鍦?usr/X11R6/lib鐩綍涓?錛屼互鏂逛究紼嬪簭闂寸殑鍏變韓錛? 鑺傜渷鍗犵敤絀洪棿銆傝憲鍚嶇殑APACHE緗戦〉鏈嶅姟鍣紝涔熼噰鐢ㄤ簡鍔ㄦ侀摼鎺ュ簱錛屼互渚挎墿鍏呯▼搴忓姛鑳姐備綘鍙渶灝哖HP鍔ㄦ侀摼鎺ュ簱鎷峰埌鍏跺叡浜洰褰曪紝淇敼涓涓嬮厤緗紝 APACHE灝卞彲浠ユ敮鎸丳HP緗戦〉浜嗐傚鏋滀綘鎰挎剰錛屽彲浠ヨ嚜宸辯紪鍐欏姩鎬侀摼鎺ュ簱錛岃APACHE鏀寔浣犺嚜宸卞畾涔夌殑緗戦〉鏍煎紡銆傝繖灝辨槸鍔ㄦ侀摼鎺ョ殑濂藉銆?/td>
1銆丩INUX涓嬪姩鎬侀摼鎺ュ簱鐨勫垱寤?/b>
鍦↙INUX緋葷粺涓嬶紝鍒涘緩鍔ㄦ侀摼鎺ュ簱鏄歡鍐嶇畝鍗曚笉榪囩殑浜嬫儏銆傚彧瑕佸湪緙栬瘧鍑芥暟搴撴簮紼嬪簭鏃跺姞涓?shared閫夐」鍗沖彲錛岃繖鏍鋒墍鐢熸垚鐨勬墽琛岀▼搴忓嵆涓哄姩鎬侀摼鎺ュ簱銆備粠鏌愮鎰忎箟涓婃潵璇達紝鍔ㄦ侀摼鎺ュ簱涔熸槸涓縐嶆墽琛岀▼搴忋傛寜涓鑸鍒欙紝紼嬪簭鍚嶅簲甯?so鍚庣紑銆備笅闈婦涓緥瀛愯璇淬?/td>
鎴戝噯澶囩紪鍐欎袱涓嚱鏁幫紝涓涓敤浜庢煡璇㈠綋鍓嶆棩鏈焔etdate錛屼竴涓敤浜庢煡璇㈠綋鍓嶆椂闂磄ettime錛屽茍灝嗚繖涓や釜鍑芥暟瀛樹簬鍔ㄦ侀摼鎺ュ簱my.so涓備負姝わ紝闇瑕佸仛浠ヤ笅鍑犻」宸ヤ綔銆?/td>
1.1 緙栧啓鐢ㄦ埛鎺ュ彛鏂囦歡datetime.h錛屽唴瀹瑰涓?姣忚鍓嶉潰鐨勬暟瀛椾負琛屽彿)錛?/td>
----------------------------------------------------------------------
1 /* datetime.h : 綰墊í杞歡鍒朵綔涓績闆ㄤ害濂囩紪鍐? 2001-06-28. */
2
3 #ifndef __DATETIME_H
4
5 #define __DATETIME_H
6
7 /* 鏃ユ湡緇撴瀯 */
8 typedef struct
9 {
10 int year;
11 int mon;
12 int day;
13 }DATETYPE;
14
15 /* 鏃墮棿緇撴瀯 */
16 typedef struct
17 {
18 char hour;
19 char min;
20 char sec;
21 }TIMETYPE;
22
23 /* 鍑芥暟鍘熷瀷璇存槑 */
24
25 #ifdef SHARED
26 int (*getdate)(DATETYPE *d);
27 #else
28 int getdate(DATETYPE *d);
29 #endif
30
31 #ifdef SHARED
32 int (*gettime)(TIMETYPE *t);
33 #else
34 int gettime(TIMETYPE *t);
35 #endif
36
37 #endif
38
----------------------------------------------------------------------
榪欎釜鐢ㄦ埛鎺ュ彛鏂囦歡涓紝鍏堝畾涔変簡鏃ユ湡涓庢椂闂寸粨鏋勶紝鎺ョ潃瀹氫箟涓涓嬪嚱鏁扮殑鍘熷瀷銆傚姩鎬佸嚱鏁頒笌闈欐佸嚱鏁扮殑鍘熷瀷璇存槑涓嶅悓鐨勬槸錛屽姩鎬佸嚱鏁板簲浣跨敤(*鍑芥暟鍚?鐨勫艦寮忥紝浠ヤ究寮曠敤鍏舵寚閽堛傝嫢瑕佸紩鐢ㄦ枃浠朵腑鐨勫姩鎬佸嚱鏁拌鏄庯紝鐢ㄦ埛搴旇瀹氫箟涓涓婼HARED瀹忥紝榪欐牱鎵嶈兘浣跨敤銆?/td>
1.2 緙栧啓getdate.c錛屾簮紼嬪簭濡備笅錛?/td>
----------------------------------------------------------------------
1 /* getdate.c : 綰墊í杞歡鍒朵綔涓績闆ㄤ害濂囩紪鍐? 2001-06-28. */
2
3 #include "time.h"
4 #include "datetime.h"
5
6 int getdate(DATETYPE *d)
7 {
8 long ti;
9 struct tm *tm;
10
11 time(&ti);
12 tm=localtime(&ti);
13 d->year=tm->tm_year+1900;
14 d->mon=tm->tm_mon+1;
15 d->day=tm->tm_mday;
16 }
17
----------------------------------------------------------------------
鍦╣etdate鍑芥暟涓紝鍏堣皟鐢╰ime鍙栧緱浠ョ璁$殑緋葷粺鏃墮棿錛屽啀鐢╨ocaltime鍑芥暟杞崲涓涓嬫椂闂寸粨鏋勶紝鏈鍚庤皟鏁村緱鍒版紜殑鏃ユ湡銆?/td>
1.3 緙栧啓gettime.c錛屾簮紼嬪簭濡備笅錛?/td>
----------------------------------------------------------------------
1 /* gettime.c : 綰墊í杞歡鍒朵綔涓績闆ㄤ害濂囩紪鍐? 2001-06-28. */
2
3 #include "time.h"
4 #include "datetime.h"
5
6 int gettime(TIMETYPE *t)
7 {
8 long ti;
9 struct tm *tm;
10
11 time(&ti);
12 tm=localtime(&ti);
13 t->hour=tm->tm_hour;
14 t->min=tm->tm_min;
15 t->sec=tm->tm_sec;
16 }
17
----------------------------------------------------------------------
gettime鍑芥暟涓巊etdate鍑芥暟鐩鎬豢錛屽厛鐢╰ime鍑芥暟鍙栧緱浠ョ璁$殑緋葷粺鏃墮棿錛屽啀鐢╨ocaltime鍑芥暟杞崲涓涓嬫椂闂寸粨鏋勶紝鏈鍚庤繑鍥炲綋鍓嶇殑鏃墮棿(涓嶉渶璋冩暣)銆?/td>
1.4 緙栧啓緇存姢鏂囦歡makefile-lib錛屽唴瀹瑰涓嬶細
----------------------------------------------------------------------
1 # makefile-lib : 綰墊í杞歡鍒朵綔涓績闆ㄤ害濂囩紪鍐? 2001-06-28.
2
3 all : my.so
4
5 SRC = getdate.c gettime.c
6
7 TGT = $(SRC:.c=.o)
8
9 $(SRC) : datetime.h
10 @touch $@
11
12 %.o : %.c
13 cc -c $?
14
15 # 鍔ㄦ佸嚱鏁板簱(my.so)鐢熸垚
16 my.so : $(TGT)
17 cc -shared -o $@ $(TGT)
18
----------------------------------------------------------------------
緙栧啓緇存姢鏂囦歡鐨勭洰鐨勶紝鍦ㄤ簬鏂逛究紼嬪簭鍛樼淮鎶ょ▼搴忥紝灝ゅ叾鏄淮鎶ゆ瘮杈冨ぇ鐨勫伐紼嬮」鐩備竴涓礌璐ㄨ壇濂界殑紼嬪簭鍛樺簲璇ュ浼氱啛緇冨湴緙栧啓緇存姢鏂囦歡makefile銆傚畾涔変簡鏂? 浠墮棿鐨勪緷璧栧叧緋誨悗錛屼竴鏃︽簮鏂囦歡鍙戠敓鍙樺寲錛屼粎闇make涓涓嬶紝鍏剁洰鏍囨枃浠剁淮鎶や唬鐮佷細鑷姩鎵ц錛屼粠鑰岃嚜鍔ㄦ洿鏂扮洰鏍囨枃浠訛紝鍑忓皯浜嗚澶氬伐浣滈噺銆傛敞鎰? 姣忚緇存姢浠g爜蹇呴』浠AB(璺蟲牸閿?寮濮嬶紝涓嶆槸鐨勮瘽make鏃跺皢鍑洪敊銆?/td>
鏈淮鎶ゆ枃浠剁1琛屾槸娉ㄩ噴琛岋紝浠?鍙峰紑澶達紱鏂囦歡絎?琛屽畾涔夋墍鏈夐渶瑕佺淮鎶ょ殑鍑芥暟搴擄紱絎?琛屽畾涔夌浉鍏蟲簮紼嬪簭鏂囦歡錛涚7琛屽畾涔夌洰鏍囨枃浠訛紱絎?-10琛岃鏄庢墍鏈夋簮紼? 搴忎緷璧栦簬datetime.h澶存枃浠訛紝騫舵湁鐩稿簲緇存姢浠g爜錛屽嵆touch涓涓嬶紝鏇存柊涓涓嬫簮鏂囦歡鐨勬椂闂達紱絎?2-13琛屽畾涔?o鏂囦歡渚濊禆浜庣浉搴旂殑.c鏂囦歡錛屽茍 鎸囧畾浜嗙淮鎶や唬鐮侊紝鍗崇敤cc緙栬瘧涓涓嬶紱絎?6-17琛屽畾涔夊叡浜簱my.so渚濊禆鐨勭洰鏍囨枃浠訛紝緇存姢浠g爜涓敤-shared緙栬瘧閫夐」錛屼互鐢熸垚鍔ㄦ侀摼鎺ュ簱 my.so銆?/td>
1.5 榪愯make -f makefile-lib 鍛戒護
make榪愯鍚庯紝鍔ㄦ侀摼鎺ュ簱my.so灝變駭鐢熶簡錛屾垜浠氨鍙互鍦ㄧ▼搴忎腑璋冪敤浜嗐傚鏋滄兂璁╃郴緇熸墍鏈夌敤鎴烽兘鍙互浣跨敤錛屽垯搴斾互root鐢ㄦ埛鐧誨綍緋葷粺錛屽皢榪欎釜搴撴嫹璐? 鍒?lib鐩綍涓?鍛戒護錛歝p my.so /lib)錛屾垨鑰呭湪/lib鐩綍涓嬪緩涓鍙瘋繛鎺ュ嵆鍙?鍛戒護錛歭n -s `pwd`/my.so /lib)銆?/td>
2銆丩INUX涓嬪姩鎬侀摼鎺ュ簱鐨勪嬌鐢?/b>
2.1 閲嶈鐨刣lfcn.h澶存枃浠?/td>
LINUX涓嬩嬌鐢ㄥ姩鎬侀摼鎺ュ簱錛屾簮紼嬪簭闇瑕佸寘鍚玠lfcn.h澶存枃浠訛紝姝ゆ枃浠跺畾涔変簡璋冪敤鍔ㄦ侀摼鎺ュ簱鐨勫嚱鏁扮殑鍘熷瀷銆備笅闈㈣緇嗚鏄庝竴涓嬭繖浜涘嚱鏁般?/td>
2.1.1 dlerror
鍘熷瀷涓? const char *dlerror(void);
褰撳姩鎬侀摼鎺ュ簱鎿嶄綔鍑芥暟鎵ц澶辮觸鏃訛紝dlerror鍙互榪斿洖鍑洪敊淇℃伅錛岃繑鍥炲間負NULL鏃惰〃紺烘搷浣滃嚱鏁版墽琛屾垚鍔熴?/td>
2.1.2 dlopen
鍘熷瀷涓? void *dlopen (const char *filename, int flag);
dlopen鐢ㄤ簬鎵撳紑鎸囧畾鍚嶅瓧(filename)鐨勫姩鎬侀摼鎺ュ簱錛屽茍榪斿洖鎿嶄綔鍙ユ焺銆?/td>
filename: 濡傛灉鍚嶅瓧涓嶄互/寮澶達紝鍒欓潪緇濆璺緞鍚嶏紝灝嗘寜涓嬪垪鍏堝悗欏哄簭鏌ユ壘璇ユ枃浠躲?/td>
(1) 鐢ㄦ埛鐜鍙橀噺涓殑LD_LIBRARY鍊鹼紱
(2) 鍔ㄦ侀摼鎺ョ紦鍐叉枃浠?etc/ld.so.cache
(3) 鐩綍/lib錛?usr/lib
flag琛ㄧず鍦ㄤ粈涔堟椂鍊欒В鍐蟲湭瀹氫箟鐨勭鍙?璋冪敤)銆傚彇鍊兼湁涓や釜:
1) RTLD_LAZY : 琛ㄦ槑鍦ㄥ姩鎬侀摼鎺ュ簱鐨勫嚱鏁頒唬鐮佹墽琛屾椂瑙e喅銆?/td>
2) RTLD_NOW : 琛ㄦ槑鍦╠lopen榪斿洖鍓嶅氨瑙e喅鎵鏈夋湭瀹氫箟鐨勭鍙鳳紝涓鏃︽湭瑙e喅錛宒lopen灝嗚繑鍥為敊璇?/td>
dlopen璋冪敤澶辮觸鏃訛紝灝嗚繑鍥濶ULL鍊鹼紝鍚﹀垯榪斿洖鐨勬槸鎿嶄綔鍙ユ焺銆?/td>
2.1.3 dlsym : 鍙栧嚱鏁版墽琛屽湴鍧
鍘熷瀷涓? void *dlsym(void *handle, char *symbol);
dlsym鏍規嵁鍔ㄦ侀摼鎺ュ簱鎿嶄綔鍙ユ焺(handle)涓庣鍙?symbol)錛岃繑鍥炵鍙峰搴旂殑鍑芥暟鐨勬墽琛屼唬鐮佸湴鍧銆傜敱姝ゅ湴鍧錛屽彲浠ュ甫鍙傛暟鎵ц鐩稿簲鐨勫嚱鏁般?/td>
濡傜▼搴忎唬鐮? void (*add)(int x,int y); /* 璇存槑涓涓嬭璋冪敤鐨勫姩鎬佸嚱鏁癮dd */
add=dlsym("xxx.so","add"); /* 鎵撳紑xxx.so鍏變韓搴?鍙朼dd鍑芥暟鍦板潃 */
add(89,369); /* 甯︿袱涓弬鏁?9鍜?69璋冪敤add鍑芥暟 */
2.1.4 dlclose : 鍏抽棴鍔ㄦ侀摼鎺ュ簱
鍘熷瀷涓? int dlclose (void *handle);
dlclose鐢ㄤ簬鍏抽棴鎸囧畾鍙ユ焺鐨勫姩鎬侀摼鎺ュ簱錛屽彧鏈夊綋姝ゅ姩鎬侀摼鎺ュ簱鐨勪嬌鐢ㄨ鏁頒負0鏃?鎵嶄細鐪熸琚郴緇熷嵏杞姐?/td>
2.2 鍦ㄧ▼搴忎腑浣跨敤鍔ㄦ侀摼鎺ュ簱鍑芥暟
2.2.1 紼嬪簭鑼冧緥
涓嬮潰鐨勭▼搴忚杞戒簡鍔ㄦ侀摼鎺ュ簱my.so錛屽茍鐢╣etdate,gettime鍙栧緱褰撳墠鏃ユ湡涓庢椂闂村悗杈撳嚭銆?/td>
----------------------------------------------------------------------
1 /************************************/
2 /* 鏂囦歡鍚嶇О: dy.c */
3 /* 鍔熻兘鎻忚堪: 鍔ㄦ侀摼鎺ュ簱搴旂敤紺鴻寖紼嬪簭 */
4 /* 紼嬪簭緙栧啓: 綰墊í杞歡鍒朵綔涓績闆ㄤ害濂?*/
5 /* 緙栧啓鏃墮棿: 2001-06-28 */
6 /************************************/
7
8 #include "stdio.h" /* 鍖呭惈鏍囧噯杈撳叆杈撳嚭鏂囦歡 */
9
10 #include "dlfcn.h" /* 鍖呭惈鍔ㄦ侀摼鎺ュ姛鑳芥帴鍙f枃浠?*/
11 #define SOFILE "./my.so" /* 鎸囧畾鍔ㄦ侀摼鎺ュ簱鍚嶇О */
12
13 #define SHARED /* 瀹氫箟瀹?紜鍏變韓,浠ヤ究寮曠敤鍔ㄦ佸嚱鏁?*/
14 #include "datetime.h" /* 鍖呭惈鐢ㄦ埛鎺ュ彛鏂囦歡 */
15
16 main()
17 {
18 DATETYPE d;
19 TIMETYPE t;
20 void *dp;
21 char *error;
22
23 puts("鍔ㄦ侀摼鎺ュ簱搴旂敤紺鴻寖");
24
25 dp=dlopen(SOFILE,RTLD_LAZY); /* 鎵撳紑鍔ㄦ侀摼鎺ュ簱 */
26
27 if (dp==NULL) /* 鑻ユ墦寮澶辮觸鍒欓鍑?*/
28 {
29 fputs(dlerror(),stderr);
30 exit(1);
31 }
32
33 getdate=dlsym(dp,"getdate"); /* 瀹氫綅鍙栨棩鏈熷嚱鏁?*/
34
35 error=dlerror(); /* 媯嫻嬮敊璇?*/
36 if (error) /* 鑻ュ嚭閿欏垯閫鍑?*/
37 {
38 fputs(error,stderr);
39 exit(1);
40 }
41
42 getdate(&d); /* 璋冪敤姝ゅ叡浜嚱鏁?*/
43 printf("褰撳墠鏃ユ湡: %04d-%02d-%02d\n",d.year,d.mon,d.day);
44
45 gettime=dlsym(dp,"gettime"); /* 瀹氫綅鍙栨椂闂村嚱鏁?*/
46
47 error=dlerror(); /* 媯嫻嬮敊璇?*/
48 if (error) /* 鑻ュ嚭閿欏垯閫鍑?*/
49 {
50 fputs(error,stderr);
51 exit(1);
52 }
53
54 gettime(&t); /* 璋冪敤姝ゅ叡浜嚱鏁?*/
55 printf("褰撳墠鏃墮棿: %02d:%02d:%02d\n",t.hour,t.min,t.sec);
56
57 dlclose(dp); /* 鍏抽棴鍏變韓搴?*/
58
59 exit(0); /* 鎴愬姛榪斿洖 */
60
61 }
----------------------------------------------------------------------
紼嬪簭璇存槑:
絎?琛? 鍖呭惈鏍囧噯杈撳叆杈撳嚭澶存枃浠?鍥犱負紼嬪簭涓嬌鐢ㄤ簡printf,puts,fputs絳夋爣鍑嗚緭鍏ヨ緭鍑哄嚱鏁?闇瑕佽緙栬瘧鍣ㄦ牴鎹ご鏂囦歡涓嚱鏁扮殑鍘熷瀷,媯鏌ヤ竴涓嬭娉?
絎?0-11琛? 鍖呭惈鍔ㄦ侀摼鎺ュ簱鍔熻兘澶存枃浠?騫跺畾涔夊姩鎬侀摼鎺ュ簱鍚嶇О;
絎?3-14琛? 瀹氫箟瀹廠HARED浠ヤ究寮曠敤14琛岀殑澶存枃浠禿atetime.h涓殑鍔ㄦ佸嚱鏁拌鏄?
絎?5琛? 鐢╠lopen鎵撳紑SOFILE鍏變韓搴?榪斿洖鍙ユ焺dp;
絎?7-31琛? 媯嫻媎p鏄惁涓虹┖,涓虹┖鍒欐樉紺洪敊璇悗閫鍑?
絎?3琛? 鐢╠lsym鍙栧緱getdate鍑芥暟鍔ㄦ佸湴鍧;
絎?5-40琛? 濡傛灉dlerror榪斿洖鍊間笉涓虹┖,鍒檇lsym鎵ц鍑洪敊,紼嬪簭鏄劇ず閿欒鍚庨鍑?
絎?2-43琛? 鎵цgetdate璋冪敤,杈撳嚭褰撳墠鏃ユ湡;
絎?5琛? 鐢╠lsym鍙栧緱gettime鍑芥暟鍔ㄦ佸湴鍧;
絎?7-52琛? 濡傛灉dlerror榪斿洖鍊間笉涓虹┖,鍒檇lsym鎵ц鍑洪敊,紼嬪簭鏄劇ず閿欒鍚庨鍑?
絎?4-55琛? 鎵цgettime璋冪敤,杈撳嚭褰撳墠鏃墮棿;
絎?7琛? 鐢╠lclose鍏抽棴dp鎵鎸囩ず鐨勫姩鎬侀摼鎺ュ簱;
絎?9琛? 紼嬪簭閫鍑?榪斿洖0鍊箋?/td>
2.2.2 緙栧啓緇存姢鏂囦歡
緇存姢鏂囦歡makefile鍐呭濡備笅:
----------------------------------------------------------------------
1 # makefile : 綰墊í杞歡鍒朵綔涓績闆ㄤ害濂囩紪鍐? 2001-06-28.
2
3 all : dy
4
5 DYSRC = dy.c
6
7 DYTGT = $(DYSRC:.c=.o)
8
9 %.o : %.c
10 cc -c $?
11
12 # 鍔ㄦ佸簱搴旂敤紺鴻寖紼嬪簭
13 dy : $(DYTGT)
14 cc -rdynamic -s -o $@ $(DYTGT) -ldl
15
----------------------------------------------------------------------
緇存姢鏂囦歡璇存槑:
絎?琛? 瀹氫箟鎵鏈夐渶瑕佺淮鎶ょ殑妯″潡;
絎?琛? 瀹氫箟婧愮▼搴?
絎?琛? 瀹氫箟鐩爣鏂囦歡;
絎?-10琛? 瀹氫箟.o鏂囦歡渚濊禆浜?c鏂囦歡,緇存姢浠g爜涓衡渃c -c 鍙樺姩鐨勬簮鏂囦歡鍚嶁?
絎?3-14琛? 瀹氫箟dy渚濊禆浜庡彉閲廌YTGT鎸囩ず鐨勫?緇存姢浠g爜涓噰鐢?rdynamic閫夐」浠ユ寚瀹氳緭鍑烘枃浠朵負鍔ㄦ侀摼鎺ョ殑鏂瑰紡錛岄夐」-s鎸囧畾鍒犻櫎鐩爣鏂囦歡涓殑絎﹀彿琛?鏈鍚庣殑閫夐」-ldl鍒欐寚紺鴻閰嶇▼搴弆d闇瑕佽杞絛l鍑芥暟搴撱?/td>
2.2.3 榪愯make鍛戒護
榪愯make鍚庡皢浜х敓鎵ц鏂囦歡dy錛岃繍琛屽悗灝嗕駭鐢熷涓嬬被浼間俊鎭細
鍔ㄦ侀摼鎺ュ簱搴旂敤紺鴻寖
褰撳墠鏃ユ湡: 2001-06-28
褰撳墠鏃墮棿: 10:06:21
褰撳垹闄y.so鏂囦歡鏃?灝嗗嚭鐜頒互涓嬩俊鎭?
鍔ㄦ侀摼鎺ュ簱搴旂敤紺鴻寖
my.so: cannot open shared object file: 鏂囦歡鎴栫洰褰曚笉瀛樺湪
3銆佸皬緇?/b>
LINUX鍒涘緩涓庝嬌鐢ㄥ姩鎬侀摼鎺ュ簱騫朵笉鏄竴浠墮毦浜嬨?/td>
緙栬瘧鍑芥暟婧愮▼搴忔椂閫夌敤-shared閫夐」鍗沖彲鍒涘緩鍔ㄦ侀摼鎺ュ簱錛屾敞鎰忓簲浠?so鍚庣紑鍛藉悕錛屾渶濂芥斁鍒板叕鐢ㄥ簱鐩綍(濡?lib,/usr/lib絳?涓嬮潰錛屽茍瑕佸啓濂界敤鎴鋒帴鍙f枃浠訛紝浠ヤ究鍏跺畠鐢ㄦ埛鍏變韓銆?/td>
浣跨敤鍔ㄦ侀摼鎺ュ簱錛屾簮紼嬪簭涓鍖呭惈dlfcn.h澶存枃浠訛紝鍐欑▼搴忔椂娉ㄦ剰dlopen絳夊嚱鏁扮殑姝g‘璋冪敤錛岀紪璇戞椂瑕侀噰鐢?rdynamic閫夐」涓?ldl閫夐」錛屼互浜х敓鍙皟鐢ㄥ姩鎬侀摼鎺ュ簱鐨勬墽琛屼唬鐮併?/td>
鐐瑰嚮榪欓噷涓嬭澆婧愮▼搴?/font>銆?img src ="http://m.shnenglu.com/mydriverc/aggbug/33162.html" width = "1" height = "1" />

]]>
璺熸垜涓璧峰啓 Makefilehttp://m.shnenglu.com/mydriverc/articles/33161.html鏃呴?/dc:creator>鏃呴?/author>Fri, 28 Sep 2007 17:20:00 GMThttp://m.shnenglu.com/mydriverc/articles/33161.htmlhttp://m.shnenglu.com/mydriverc/comments/33161.htmlhttp://m.shnenglu.com/mydriverc/articles/33161.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/33161.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/33161.html闃呰鍏ㄦ枃

]]>
GCC緙栬瘧閫夐」http://m.shnenglu.com/mydriverc/articles/33144.html鏃呴?/dc:creator>鏃呴?/author>Fri, 28 Sep 2007 15:29:00 GMThttp://m.shnenglu.com/mydriverc/articles/33144.htmlhttp://m.shnenglu.com/mydriverc/comments/33144.htmlhttp://m.shnenglu.com/mydriverc/articles/33144.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/33144.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/33144.htmlgcc 緙栬瘧閫夐」,鑷繁緲昏瘧鐨?- -
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽

gcc 緙栬瘧閫夐」,鑷繁緲昏瘧鐨?

-o 璁懼畾杈撳嚭鏂囦歡鍚?
-c 鍙紪璇?涓嶈繛鎺?
-E 鍙仛棰勭紪璇?
-pipe 鍦ㄥ涓紪璇戣繃紼嬩箣闂翠嬌鐢ㄧ閬?
--version 鏄劇ず鐗堟湰.
-static 闈欐佽繛鎺?
-ansi C 妯″紡涓嬫敮鎸佹墍鏈?ISO C90 鏍囧噯鐨?C 紼嬪簭, C++ 妯″紡涓嬪幓闄ゅ GNU C++ 鎵╁睍鐨勬敮鎸?GNU鎵╁睍浼氫笌 ISO C++ 鍐茬獊)
-std= 紜畾緙栬瘧璇█鐨勬爣鍑?鐩墠鍙湪緙栬瘧 C 鍜?C++ 鏃舵湁鏁?-fno-asm 涓嶅皢 "asm" "inline" "typeof" 浣滀負鍏抽敭瀛?鍙互鐢ㄤ粬浠仛鍙橀噺鍚嶇瓑. -funsigned-char 灝?char"鐨勬暟鎹被鍨嬭涓?unsigned",鍗蟲棤絎﹀彿.
-fsigned-char 姝eソ鐩稿弽,灝?char"璁句負"signed".
-fsyntax-only 鍙鏌ヨ娉曢敊璇?涓嶅仛鍏朵粬浠諱綍浜?
-pedantic 鏄劇ず鎵鏈夌殑 ISO C 鍜?ISO C++ 鐨勮鍛?騫朵笖鎷掔粷鎵鏈変嬌鐢ㄧ姝㈡墿灞曠殑紼嬪簭
-Wall 鏄劇ず鎵鏈夎鍛?
-g 灝嗙紪璇戞椂鐨勮皟璇曚俊鎭繚瀛樺埌鏈湴鏂囦歡涓? stabs,COFF,XCOFF,DWARF)
-ggdb 涓?GDB 浜х敓璋冭瘯淇℃伅,鍖呭惈 GDB 鐨勬墿灞?
-ggdb(level) 璁懼畾浜х敓浣曠絳夌駭鐨勮皟璇曚俊鎭? level 涓?1-3, 1 鏈灝?3 鏈澶?
-ftime-reprot 緇熻緙栬瘧娑堣楃殑鏃墮棿騫舵樉紺烘姤鍛?
-fmem-report 鏄劇ず鎵鏈夌殑闈欐佸唴瀛樺垎閰?
-ftest-coverages 涓?gcov宸ュ叿浜х敓鏁版嵁鏂囦歡.
gcc 緙栬瘧閫夐」,緲昏瘧鍑烘潵鐢ㄨ搗鏉ユ柟渚?

VC緙栬瘧閫夐」錛堣漿杞斤級- -
Tag錛?緙栫▼聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
/***********************************************************************************************/
VC緙栬瘧閫夐」 csdnb3a [鍘熶綔]

鍏抽敭瀛?VC緙栬瘧閫夐」 鍑哄
-浼樺寲-
/O1 鏈灝忓寲絀洪棿 minimize space
/Op[-] 鏀瑰杽嫻偣鏁頒竴鑷存?improve floating-pt consistency
/O2 鏈澶у寲閫熷害 maximize speed
/Os 浼橀変唬鐮佺┖闂?favor code space
/Oa 鍋囪娌℃湁鍒悕 assume no aliasing
/Ot 浼橀変唬鐮侀熷害 favor code speed
/Ob 鍐呰仈灞曞紑錛堥粯璁?n=0錛?inline expansion (default n=0)
/Ow 鍋囪浜ゅ弶鍑芥暟鍒悕 assume cross-function aliasing
/Od 紱佺敤浼樺寲錛堥粯璁ゅ鹼級 disable optimizations (default)
/Ox 鏈澶у寲閫夐」銆?/Ogityb2 /Gs) maximum opts. (/Ogityb1 /Gs)
/Og 鍚敤鍏ㄥ眬浼樺寲 enable global optimization
/Oy[-] 鍚敤妗嗘灦鎸囬拡鐪佺暐 enable frame pointer omission
/Oi 鍚敤鍐呭緩鍑芥暟 enable intrinsic functions

-浠g爜鐢熸垚-
/G3 涓?80386 榪涜浼樺寲 optimize for 80386
/G4 涓?80486 榪涜浼樺寲 optimize for 80486
/GR[-] 鍚敤 C++ RTTI enable C++ RTTI
/G5 涓?Pentium 榪涜浼樺寲 optimize for Pentium
/G6 涓?Pentium Pro 榪涜浼樺寲 optimize for Pentium Pro
/GX[-] 鍚敤 C++ 寮傚父澶勭悊錛堜笌 /EHsc 鐩稿悓錛?enable C++ EH (same as /EHsc)
/EHs 鍚敤鍚屾 C++ 寮傚父澶勭悊 enable synchronous C++ EH
/GD 涓?Windows DLL 榪涜浼樺寲 optimize for Windows DLL
/GB 涓烘販鍚堟ā鍨嬭繘琛屼紭鍖栵紙榛樿錛?optimize for blended model (default)
/EHa 鍚敤寮傛 C++ 寮傚父澶勭悊 enable asynchronous C++ EH
/Gd __cdecl 璋冪敤綰﹀畾 __cdecl calling convention
/EHc extern鈥淐鈥濋粯璁や負 nothrow extern "C" defaults to nothrow
/Gr __fastcall 璋冪敤綰﹀畾 __fastcall calling convention
/Gi[-] 鍚敤澧為噺緙栬瘧 enable incremental compilation
/Gz __stdcall 璋冪敤綰﹀畾 __stdcall calling convention
/Gm[-] 鍚敤鏈灝忛噸鏂扮敓鎴?enable minimal rebuild
/GA 涓?Windows 搴旂敤紼嬪簭榪涜浼樺寲 optimize for Windows Application
/Gf 鍚敤瀛楃涓叉睜 enable string pooling
/QIfdiv[-] 鍚敤 Pentium FDIV 淇 enable Pentium FDIV fix
/GF 鍚敤鍙瀛楃涓叉睜 enable read-only string pooling
/QI0f[-] 鍚敤 Pentium 0x0f 淇 enable Pentium 0x0f fix
/Gy 鍒嗛殧閾炬帴鍣ㄥ嚱鏁?separate functions for linker
/GZ 鍚敤榪愯鏃惰皟璇曟鏌?enable runtime debug checks
/Gh 鍚敤閽╁瓙鍑芥暟璋冪敤 enable hook function call
/Ge 瀵規墍鏈夊嚱鏁板己鍒跺爢鏍堟鏌?force stack checking for all funcs
/Gs[num] 紱佺敤鍫嗘爤媯鏌ヨ皟鐢?disable stack checking calls

-杈撳嚭鏂囦歡-
/Fa[file] 鍛藉悕紼嬪簭闆嗗垪琛ㄦ枃浠?name assembly listing file
/Fo 鍛藉悕瀵硅薄鏂囦歡 name object file
/FA[sc] 閰嶇疆紼嬪簭闆嗗垪琛?configure assembly listing
/Fp 鍛藉悕棰勭紪璇戝ご鏂囦歡 name precompiled header file
/Fd[file] 鍛藉悕 .PDB 鏂囦歡 name .PDB file
/Fr[file] 鍛藉悕婧愭祻瑙堝櫒鏂囦歡 name source browser file
/Fe 鍛藉悕鍙墽琛屾枃浠?name executable file
/FR[file] 鍛藉悕鎵╁睍 .SBR 鏂囦歡 name extended .SBR file
/Fm[file] 鍛藉悕鏄犲皠鏂囦歡 name map file

-棰勫鐞嗗櫒-
/FI 鍛藉悕寮哄埗鍖呭惈鏂囦歡 name forced include file
/C 涓嶅惛鍙栨敞閲?don't strip comments
/U 縐婚櫎棰勫畾涔夊畯 remove predefined macro
/D{=|#} 瀹氫箟瀹?define macro
/u 縐婚櫎鎵鏈夐瀹氫箟瀹?remove all predefined macros
/E 灝嗛澶勭悊瀹氬悜鍒版爣鍑嗚緭鍑?preprocess to stdout
/I 娣誨姞鍒板寘鍚枃浠剁殑鎼滅儲璺緞 add to include search path
/EP 灝嗛澶勭悊瀹氬悜鍒版爣鍑嗚緭鍑猴紝涓嶈甯﹁鍙?preprocess to stdout, no #line
/X 蹇界暐鈥滄爣鍑嗕綅緗?ignore "standard places"
/P 棰勫鐞嗗埌鏂囦歡 preprocess to file

-璇█-
/Zi 鍚敤璋冭瘯淇℃伅 enable debugging information
/Zl 蹇界暐 .OBJ 涓殑榛樿搴撳悕 omit default library name in .OBJ
/ZI 鍚敤璋冭瘯淇℃伅鐨勨滅紪杈戝茍緇х畫鈥濆姛鑳?enable Edit and Continue debug info
/Zg 鐢熸垚鍑芥暟鍘熷瀷 generate function prototypes
/Z7 鍚敤鏃у紡璋冭瘯淇℃伅 enable old-style debug info
/Zs 鍙繘琛岃娉曟鏌?syntax check only
/Zd 浠呰琛屽彿璋冭瘯淇℃伅 line number debugging info only
/vd{0|1} 紱佺敤/鍚敤 vtordisp disable/enable vtordisp
/Zp[n] 鍦?n 瀛楄妭杈圭晫涓婂寘瑁呯粨鏋?pack structs on n-byte boundary
/vm 鎸囧悜鎴愬憳鐨勬寚閽堢被鍨?type of pointers to members
/Za 紱佺敤鎵╁睍錛堟殫鎸?/Op錛?disable extensions (implies /Op)
/noBool 紱佺敤鈥渂ool鈥濆叧閿瓧 disable "bool" keyword
/Ze 鍚敤鎵╁睍錛堥粯璁わ級 enable extensions (default)

- 鏉傞」 -
/?, /help 鎵撳嵃姝ゅ府鍔╂秷鎭?print this help message
/c 鍙紪璇戯紝涓嶉摼鎺?compile only, no link
/W 璁劇疆璀﹀憡絳夌駭錛堥粯璁?n=1錛?set warning level (default n=1)
/H 鏈澶у寲澶栭儴鍚嶇О闀垮害 max external name length
/J 榛樿 char 綾誨瀷鏄?unsigned default char type is unsigned
/nologo 鍙栨秷鏄劇ず鐗堟潈娑堟伅 suppress copyright message
/WX 灝嗚鍛婅涓洪敊璇?treat warnings as errors
/Tc 灝嗘枃浠剁紪璇戜負 .c compile file as .c
/Yc[file] 鍒涘緩 .PCH 鏂囦歡 create .PCH file
/Tp 灝嗘枃浠剁紪璇戜負 .cpp compile file as .cpp
/Yd 灝嗚皟璇曚俊鎭斁鍦ㄦ瘡涓?.OBJ 涓?put debug info in every .OBJ
/TC 灝嗘墍鏈夋枃浠剁紪璇戜負 .c compile all files as .c
/TP 灝嗘墍鏈夋枃浠剁紪璇戜負 .cpp compile all files as .cpp
/Yu[file] 浣跨敤 .PCH 鏂囦歡 use .PCH file
/V 璁劇疆鐗堟湰瀛楃涓?set version string
/YX[file] 鑷姩鐨?.PCH 鏂囦歡 automatic .PCH
/w 紱佺敤鎵鏈夎鍛?disable all warnings
/Zm 鏈澶у唴瀛樺垎閰嶏紙榛樿涓?%錛?max memory alloc (% of default)

-閾炬帴-
/MD 涓?MSVCRT.LIB 閾炬帴 link with MSVCRT.LIB
/MDd 涓?MSVCRTD.LIB 璋冭瘯搴撻摼鎺?link with MSVCRTD.LIB debug lib
/ML 涓?LIBC.LIB 閾炬帴 link with LIBC.LIB
/MLd 涓?LIBCD.LIB 璋冭瘯搴撻摼鎺?link with LIBCD.LIB debug lib
/MT 涓?LIBCMT.LIB 閾炬帴 link with LIBCMT.LIB
/MTd 涓?LIBCMTD.LIB 璋冭瘯搴撻摼鎺?link with LIBCMTD.LIB debug lib
/LD 鍒涘緩 .DLL Create .DLL
/F 璁劇疆鍫嗘爤澶у皬 set stack size
/LDd 鍒涘緩 .DLL 璋冭瘯搴?Create .DLL debug libary
/link [閾炬帴鍣ㄩ夐」鍜屽簱] [linker options and libraries]



]]>
qmake姒傚康http://m.shnenglu.com/mydriverc/articles/32728.html鏃呴?/dc:creator>鏃呴?/author>Sun, 23 Sep 2007 08:44:00 GMThttp://m.shnenglu.com/mydriverc/articles/32728.htmlhttp://m.shnenglu.com/mydriverc/comments/32728.htmlhttp://m.shnenglu.com/mydriverc/articles/32728.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/32728.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/32728.html浠嬬粛qmake

qmake鏄敤鏉ヤ負涓嶅悓鐨勫鉤鍙扮殑寮鍙戦」鐩垱寤簃akefile鐨凾rolltech寮鍙戜竴涓槗浜庝嬌鐢ㄧ殑宸ュ叿銆?em>qmake綆鍖栦簡makefile鐨勭敓鎴愶紝鎵浠ヤ負浜嗗垱寤轟竴涓猰akefile鍙渶瑕佷竴涓彧鏈夊嚑琛屼俊鎭殑鏂囦歡銆?em>qmake鍙互渚涗換浣曚竴涓蔣浠墮」鐩嬌鐢紝鑰屼笉鐢ㄧ瀹冩槸涓嶆槸鐢≦t鍐欑殑錛屽敖綆″畠鍖呭惈浜嗕負鏀寔Qt寮鍙戞墍鎷ユ湁鐨勯澶栫殑鐗瑰緛銆?/p>

qmake鍩轟簬涓涓」鐩枃浠惰繖鏍風殑淇℃伅鏉ョ敓鎴恗akefile銆傞」鐩枃浠跺彲浠ョ敱寮鍙戣呯敓鎴愩傞」鐩枃浠墮氬父寰堢畝鍗曪紝浣嗘槸濡傛灉闇瑕佸畠鏄潪甯稿畬鍠勭殑銆備笉鐢ㄤ慨鏀歸」鐩枃浠訛紝qmake涔熷彲浠ヤ負涓篗icrosoft Visual Studio鐢熸垚欏圭洰銆?/p>

qmake鐨勬蹇?/h3>

QMAKESPEC鐜鍙橀噺

涓句緥鏉ヨ錛屽鏋滀綘鍦╓indows涓嬩嬌鐢∕icrosoft Visual Studio錛岀劧鍚庝綘闇瑕佹妸QMAKESPEC鐜鍙橀噺璁劇疆涓?em>win32-msvc銆傚鏋滀綘鍦⊿olaris涓婁嬌鐢╣cc錛屼綘闇瑕佹妸QMAKESPEC鐜鍙橀噺璁劇疆涓?em>solaris-g++銆?/p>

鍦╭t/mkspecs涓殑姣忎竴涓洰褰曢噷闈紝閮芥湁涓涓寘鍚簡騫沖彴鍜岀紪璇戝櫒鐗瑰畾淇℃伅鐨?em>qmake.conf鏂囦歡銆傝繖浜涜緗傜敤浜庝綘瑕佷嬌鐢?em>qmake鐨勪換浣曢」鐩紝璇蜂笉瑕佷慨鏀瑰畠錛岄櫎闈炰綘鏄竴涓笓瀹躲備緥濡傦紝鍋囧浣犳墍鏈夌殑搴旂敤紼嬪簭閮藉繀欏誨拰涓涓壒瀹氱殑搴撹繛鎺ワ紝浣犲彲浠ユ妸榪欎釜淇℃伅娣誨姞鍒扮浉搴旂殑qmake.conf鏂囦歡涓?/p>

欏圭洰(.pro)鏂囦歡

涓涓」鐩枃浠舵槸鐢ㄦ潵鍛婅瘔qmake鍏充簬涓鴻繖涓簲鐢ㄧ▼搴忓垱寤簃akefile鎵闇瑕佺殑緇嗚妭銆備緥濡傦紝涓涓簮鏂囦歡鍜屽ご鏂囦歡鐨勫垪琛ㄣ佷換浣曞簲鐢ㄧ▼搴忕壒瀹氶厤緗佷緥濡備竴涓繀闇瑕佽繛鎺ョ殑棰濆搴撱佹垨鑰呬竴涓澶栫殑鍖呭惈璺緞錛岄兘搴旇鏀懼埌欏圭洰鏂囦歡涓?/p>

鈥?鈥濇敞閲?/h5>

浣犲彲浠ヤ負欏圭洰鏂囦歡娣誨姞娉ㄩ噴銆傛敞閲婄敱鈥?鈥濈鍙峰紑濮嬶紝涓鐩村埌榪欎竴琛岀殑緇撴潫銆?/p>

妯℃澘

妯℃澘鍙橀噺鍛婅瘔qmake涓鴻繖涓簲鐢ㄧ▼搴忕敓鎴愬摢縐峬akefile銆備笅闈㈡槸鍙緵浣跨敤鐨勯夋嫨錛?/p>

  • app - 寤虹珛涓涓簲鐢ㄧ▼搴忕殑makefile銆傝繖鏄粯璁ゅ鹼紝鎵浠ュ鏋滄ā鏉挎病鏈夎鎸囧畾錛岃繖涓皢琚嬌鐢ㄣ?/p>

  • lib - 寤虹珛涓涓簱鐨刴akefile銆?/p>

  • vcapp - 寤虹珛涓涓簲鐢ㄧ▼搴忕殑Visual Studio欏圭洰鏂囦歡銆?/p>

  • vclib - 寤虹珛涓涓簱鐨刅isual Studio欏圭洰鏂囦歡銆?/p>

  • subdirs - 榪欐槸涓涓壒孌婄殑妯℃澘錛屽畠鍙互鍒涘緩涓涓兘澶熻繘鍏ョ壒瀹氱洰褰曞茍涓斾負涓涓」鐩枃浠剁敓鎴恗akefile騫朵笖涓哄畠璋冪敤make鐨刴akefile銆?/p>

鈥渁pp鈥濇ā鏉?/h5>

鈥渁pp鈥濇ā鏉垮憡璇?em>qmake涓哄緩绔嬩竴涓簲鐢ㄧ▼搴忕敓鎴愪竴涓猰akefile銆傚綋浣跨敤榪欎釜妯℃澘鏃訛紝涓嬮潰榪欎簺qmake緋葷粺鍙橀噺鏄鎵胯鐨勩備綘搴旇鍦ㄤ綘鐨?pro鏂囦歡涓嬌鐢ㄥ畠浠潵涓轟綘鐨勫簲鐢ㄧ▼搴忔寚瀹氱壒瀹氫俊鎭?/p>

  • HEADERS - 搴旂敤紼嬪簭涓殑鎵鏈夊ご鏂囦歡鐨勫垪琛ㄣ?/p>

  • SOURCES - 搴旂敤紼嬪簭涓殑鎵鏈夋簮鏂囦歡鐨勫垪琛ㄣ?/p>

  • FORMS - 搴旂敤紼嬪簭涓殑鎵鏈?ui鏂囦歡錛堢敱Qt璁捐鍣?/em>鐢熸垚錛夌殑鍒楄〃銆?/p>

  • LEXSOURCES - 搴旂敤紼嬪簭涓殑鎵鏈塴ex婧愭枃浠剁殑鍒楄〃銆?/p>

  • YACCSOURCES - 搴旂敤紼嬪簭涓殑鎵鏈墆acc婧愭枃浠剁殑鍒楄〃銆?/p>

  • TARGET - 鍙墽琛屽簲鐢ㄧ▼搴忕殑鍚嶇О銆傞粯璁ゅ間負欏圭洰鏂囦歡鐨勫悕縐般傦紙濡傛灉闇瑕佹墿灞曞悕錛屼細琚嚜鍔ㄥ姞涓娿傦級

  • DESTDIR - 鏀劇疆鍙墽琛岀▼搴忕洰鏍囩殑鐩綍銆?/p>

  • DEFINES - 搴旂敤紼嬪簭鎵闇鐨勯澶栫殑棰勫鐞嗙▼搴忓畾涔夌殑鍒楄〃銆?/p>

  • INCLUDEPATH - 搴旂敤紼嬪簭鎵闇鐨勯澶栫殑鍖呭惈璺緞鐨勫垪琛ㄣ?/p>

  • DEPENDPATH - 搴旂敤紼嬪簭鎵渚濊禆鐨勬悳绱㈣礬寰勩?/p>

  • VPATH - 瀵繪壘琛ュ厖鏂囦歡鐨勬悳绱㈣礬寰勩?/p>

  • DEF_FILE - 鍙湁Windows闇瑕侊細搴旂敤紼嬪簭鎵瑕佽繛鎺ョ殑.def鏂囦歡銆?/p>

  • RC_FILE - 鍙湁Windows闇瑕侊細搴旂敤紼嬪簭鐨勮祫婧愭枃浠躲?/p>

  • RES_FILE - 鍙湁Windows闇瑕侊細搴旂敤紼嬪簭鎵瑕佽繛鎺ョ殑璧勬簮鏂囦歡銆?/p>

浣犲彧闇瑕佷嬌鐢ㄩ偅浜涗綘宸茬粡鏈夊肩殑緋葷粺鍙橀噺錛屼緥濡傦紝濡傛灉浣犱笉闇瑕佷換浣曢澶栫殑INCLUDEPATH錛岄偅涔堜綘灝變笉闇瑕佹寚瀹氬畠錛?em>qmake浼氫負鎵闇鐨勬彁渚涢粯璁ゅ箋備緥濡傦紝涓涓疄渚嬮」鐩枃浠朵篃璁稿氨鍍忚繖鏍鳳細

TEMPLATE = app
DESTDIR = c:\helloapp
HEADERS += hello.h
SOURCES += hello.cpp
SOURCES += main.cpp
DEFINES += QT_DLL
CONFIG += qt warn_on release

濡傛灉鏉$洰鏄崟鍊肩殑錛屾瘮濡倀emplate鎴栬呯洰鐨勭洰褰曪紝鎴戜滑鏄敤鈥?鈥濓紝浣嗗鏋滄槸澶氬兼潯鐩紝鎴戜滑浣跨敤鈥?=鈥濇潵涓鴻繖涓被鍨?em>娣誨姞鐜版湁鐨勬潯鐩備嬌鐢ㄢ?鈥濅細鐢ㄦ柊鍊兼浛鎹㈠師鏈夌殑鍊鹼紝渚嬪錛屽鏋滄垜浠啓浜?tt>DEFINES=QT_DLL錛屽叾瀹冩墍鏈夌殑瀹氫箟閮藉皢琚垹闄ゃ?/p>

鈥渓ib鈥濇ā鏉?/h5>

鈥渓ib鈥濇ā鏉垮憡璇?em>qmake涓哄緩绔嬩竴涓簱鑰岀敓鎴恗akefile銆傚綋浣跨敤榪欎釜妯℃澘鏃訛紝闄や簡鈥渁pp鈥濇ā鏉夸腑鎻愬埌緋葷粺鍙橀噺錛岃繕鏈変竴涓?em>VERSION鏄鏀寔鐨勩備綘闇瑕佸湪涓哄簱鎸囧畾鐗瑰畾淇℃伅鐨?pro鏂囦歡涓嬌鐢ㄥ畠浠?/p>

  • VERSION - 鐩爣搴撶殑鐗堟湰鍙鳳紝姣斿錛?.3.1銆?/p>

鈥渟ubdirs鈥濇ā鏉?/h5>

鈥渟ubdirs鈥濇ā鏉垮憡璇塹make鐢熸垚涓涓猰akefile錛屽畠鍙互榪涘叆鍒扮壒瀹氬瓙鐩綍騫朵負榪欎釜鐩綍涓殑欏圭洰鏂囦歡鐢熸垚makefile騫朵笖涓哄畠璋冪敤make銆?/p>

鍦ㄨ繖涓ā鏉夸腑鍙湁涓涓郴緇熷彉閲?em>SUBDIRS鍙互琚瘑鍒傝繖涓彉閲忎腑鍖呭惈浜嗘墍瑕佸鐞嗙殑鍚湁欏圭洰鏂囦歡鐨勫瓙鐩綍鐨勫垪琛ㄣ傝繖涓」鐩枃浠剁殑鍚嶇О鏄拰瀛愮洰褰曞悓鍚嶇殑錛岃繖鏍?em>qmake灝卞彲浠ュ彂鐜板畠銆備緥濡傦紝濡傛灉瀛愮洰閲屾槸鈥渕yapp鈥濓紝閭d箞鍦ㄨ繖涓洰褰曚腑鐨勯」鐩枃浠跺簲璇ヨ鍙仛myapp.pro銆?/p>

CONFIG鍙橀噺

閰嶇疆鍙橀噺鎸囧畾浜嗙紪璇戝櫒鎵瑕佷嬌鐢ㄧ殑閫夐」鍜屾墍闇瑕佽榪炴帴鐨勫簱銆傞厤緗彉閲忎腑鍙互娣誨姞浠諱綍涓滆タ錛屼絾鍙湁涓嬮潰榪欎簺閫夐」鍙互琚玵make璇嗗埆銆?/p>

涓嬮潰榪欎簺閫夐」鎺у埗鐫浣跨敤鍝簺緙栬瘧鍣ㄦ爣蹇楋細

  • release - 搴旂敤紼嬪簭灝嗕互release妯″紡榪炵紪銆傚鏋溾渄ebug鈥濊鎸囧畾錛屽畠灝嗚蹇界暐銆?/p>

  • debug - 搴旂敤紼嬪簭灝嗕互debug妯″紡榪炵紪銆?/p>

  • warn_on - 緙栬瘧鍣ㄤ細杈撳嚭灝藉彲鑳藉鐨勮鍛婁俊鎭傚鏋溾渨arn_off鈥濊鎸囧畾錛屽畠灝嗚蹇界暐銆?/p>

  • warn_off - 緙栬瘧鍣ㄤ細杈撳嚭灝藉彲鑳藉皯鐨勮鍛婁俊鎭?/p>

涓嬮潰榪欎簺閫夐」瀹氫箟浜嗘墍瑕佽繛緙栫殑搴?搴旂敤紼嬪簭鐨勭被鍨嬶細

  • qt - 搴旂敤紼嬪簭鏄竴涓猀t搴旂敤紼嬪簭錛屽茍涓擰t搴撳皢浼氳榪炴帴銆?/p>

  • thread - 搴旂敤紼嬪簭鏄竴涓綰跨▼搴旂敤紼嬪簭銆?/p>

  • x11 - 搴旂敤紼嬪簭鏄竴涓猉11搴旂敤紼嬪簭鎴栧簱銆?/p>

  • windows - 鍙敤浜庘渁pp鈥濇ā鏉匡細搴旂敤紼嬪簭鏄竴涓猈indows涓嬬殑紿楀彛搴旂敤紼嬪簭銆?/p>

  • console - 鍙敤浜庘渁pp鈥濇ā鏉匡細搴旂敤紼嬪簭鏄竴涓猈indows涓嬬殑鎺у埗鍙板簲鐢ㄧ▼搴忋?/p>

  • dll - 鍙敤浜庘渓ib鈥濇ā鏉匡細搴撴槸涓涓叡浜簱錛坉ll錛夈?/p>

  • staticlib - 鍙敤浜庘渓ib鈥濇ā鏉匡細搴撴槸涓涓潤鎬佸簱銆?/p>

  • plugin - 鍙敤浜庘渓ib鈥濇ā鏉匡細搴撴槸涓涓彃浠訛紝榪欏皢浼氫嬌dll閫夐」鐢熸晥銆?/p>

渚嬪錛屽鏋滀綘鐨勫簲鐢ㄧ▼搴忎嬌鐢≦t搴擄紝騫朵笖浣犳兂鎶婂畠榪炵紪涓轟竴涓彲璋冭瘯鐨勫綰跨▼鐨勫簲鐢ㄧ▼搴忥紝浣犵殑欏圭洰鏂囦歡搴旇浼氭湁涓嬮潰榪欒錛?/p>

    CONFIG += qt thread debug

娉ㄦ剰錛屼綘蹇呴』浣跨敤鈥?=鈥濓紝涓嶈浣跨敤鈥?鈥濓紝鍚﹀垯qmake灝變笉鑳芥紜嬌鐢ㄨ繛緙朡t鐨勮緗簡錛屾瘮濡傛病娉曡幏寰楁墍緙栬瘧鐨凲t搴撶殑綾誨瀷浜嗐?/p>

]]>
鐢╭make蹇熺敓鎴恗akefilehttp://m.shnenglu.com/mydriverc/articles/32720.html鏃呴?/dc:creator>鏃呴?/author>Sun, 23 Sep 2007 07:35:00 GMThttp://m.shnenglu.com/mydriverc/articles/32720.htmlhttp://m.shnenglu.com/mydriverc/comments/32720.htmlhttp://m.shnenglu.com/mydriverc/articles/32720.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/32720.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/32720.html
鎽樿
qmake鏄疶rolltech鍏徃鍒涘緩鐨勭敤鏉ヤ負涓嶅悓鐨勫鉤鍙板拰緙栬瘧鍣ㄤ功鍐橫akefile鐨勫伐鍏楓傛槸qt宸ュ叿鍖呯殑涓閮ㄥ垎.鍦║nix&linux 涓婂啓紼嬪紡鐨勪漢澶ф閮界榪嘙akefile銆傜敤 make 鏉ュ紑鍙戝拰緙栬瘧紼嬪紡鐨勭‘寰堟柟渚匡紝鍙槸瑕佸啓鍑轟竴涓? Makefile灝變笉綆鍗曚簡,鎵嬪啓Makefile鏄瘮杈冨洶闅懼茍涓斿鏄撳嚭閿欑殑錛岃繖闃繪尅浜嗗緢澶氫竴閮ㄥ垎鐨刲inux鐖卞ソ鑰呭姞鍏inux紼嬪簭寮鍙戠殑闃佃惀銆? (2004-05-17 02:14:46)

--------------------------------------------------------------------------------
By lanf, 鍑哄錛歨ttp://mylottery.cosoft.org.cn/news/show.php?type=linuxprg&id=1081842801

浣滆咃細瀛欓珮鍕?
1.綆浠?
qmake鏄疶rolltech鍏徃鍒涘緩鐨勭敤鏉ヤ負涓嶅悓鐨勫鉤鍙板拰緙栬瘧鍣ㄤ功鍐橫akefile鐨勫伐鍏楓傛槸qt宸ュ叿鍖呯殑涓閮ㄥ垎.鍦║nix&linux 涓婂啓紼嬪紡鐨勪漢澶ф閮界榪嘙akefile銆傜敤 make 鏉ュ紑鍙戝拰緙栬瘧紼嬪紡鐨勭‘寰堟柟渚匡紝鍙槸瑕佸啓鍑轟竴涓? Makefile灝變笉綆鍗曚簡,鎵嬪啓Makefile鏄瘮杈冨洶闅懼茍涓斿鏄撳嚭閿欑殑錛岃繖闃繪尅浜嗗緢澶氫竴閮ㄥ垎鐨刲inux鐖卞ソ鑰呭姞鍏inux紼嬪簭寮鍙戠殑闃佃惀銆?
铏界劧Open Source Software涔熸湁GNU Automake鍜孏NU Autoconf涓や釜杞歡鍙互鐢熸垚makefile鏂囦歡,浣嗘槸瀵逛簬涓涓畝鍗曠殑欏圭洰,浣跨敤Automake鍜孉utoconf灝辨湁鐐規潃楦′篃鐢ㄥ鐗涘垁浜?浣跨敤 qmake瀹屽叏鍙互絎﹀悎浣犵殑瑕佹眰.Trolltech鍏徃浣跨敤qmake浣滀負Qt搴撳拰Qt鎵鎻愪緵鐨勫伐鍏風殑涓昏榪炵紪宸ュ叿銆?
2.瀹夎qmake
鍦╨inux騫沖彴涓?瀹夎瀹宷t浠ュ強鐩稿叧鐨剄t宸ュ叿鍖?qmake灝卞凡緇忚瀹夎濂戒簡.浣犲敮涓瑕佹敞鎰忕殑灝辨槸QTDIR鍊肩殑璁懼畾,榪欎釜蹇呴』璁劇疆鍒癚t琚畨瑁呭埌鐨勫湴鏂廣傚:/usr/lib/qt3/,浠ュ強qmake鍙墽琛屾枃浠剁殑璺緞鍔犲埌PATH璺緞涓?
3. 涓涓畝鍗曠殑渚嬪瓙
鐢╲i鍐欎釜hello.c 錛?
#include
int main(int argc, char** argv)
{
printf(\"Hello, world!\\n\");
return 0;
}
鍒涘緩qmake闇瑕佺殑欏圭洰鏂囦歡(hello.pro),
SOURCES = hello.cpp
CONFIG += qt warn_on release
Makefile鍙互鍍忚繖鏍風敱\".pro\"鏂囦歡鐢熸垚錛?
qmake -o Makefile hello.pro
鐜板湪浣犵殑鐩綍涓嬪凡緇忎駭鐢熶簡涓涓?Makefile 鏂囦歡錛岃緭鍏"make\" 鎸囦護灝卞彲浠ュ紑濮嬬紪璇?hello.c 鎴愭墽琛屾枃浠訛紝鎵ц ./hello 鍜?world 鎵撳0鎷涘懠鍚э紒鎵撳紑榪欎釜Makefile鏂囦歡鐪嬬湅錛屾槸涓嶆槸寰堜笓涓氬晩錛?
4.楂樼駭鎿嶄綔鎶宸?
褰撶劧錛屽湪瀹為檯浣跨敤榪囩▼涓紝鎴戜滑鐨勫伐紼嬩笉鍙兘璞¤繖涓▼搴忚繖鏍風畝鍗曠殑錛屽畠鍙兘鏈夊涓洰褰曪紝澶氫釜澶存枃浠訛紝澶氫釜婧愭枃浠訛紝闇瑕侀摼鎺ュ櫒瀹冧笉鍚岀殑閾炬帴搴撶瓑絳夋儏鍐點傚埆鎬ワ紝 璁╂垜鍜屼綘鎱㈡參閬撴潵銆傝繖浜涢兘鏄潪甯稿鏄撶敤qmake鏉ュ疄鐜扮殑銆傛垜浠粠涓涓洿鍔犲鏉傜殑欏圭洰鏂囦歡涓轟緥鍜屼綘璇︾粏鐨勮璇塹make鐨勯珮綰ф妧宸э細
欏圭洰鏂囦歡紺轟緥錛?
SOURCES += myqt.cpp
SOURCES += main.cpp
HEADERS += myqt.h
FORMS += xsimform.ui
TEMPLATE = lib
CONFIG += debug \\
warn_on \\
qt \\
thread \\
x11 \\
plugin
TARGET = ../bin/panel_qt
INCLUDEPATH = ../../../../xsim \\
../../../../xsim/IMdkit
DEFINES = BDB_VERSION4 \\
OS_LINUX
浠庤繖涓枃浠跺彲浠ョ煡閬擄紝SOURCES鍙橀噺鎸囧悜欏圭洰涓殑婧愭枃浠訛紝褰撻」鐩腑鏈夊涓簮鏂囦歡鏃訛紝鎴戜滑闇瀵歸」鐩腑鐨勬瘡涓涓簮鏂囦歡閮借繖鏍峰仛錛岀洿鍒扮粨鏉燂細
SOURCES += hello.cpp
SOURCES += main.cpp
褰撶劧錛屽鏋滀綘鍠滄浣跨敤鍍廙ake涓鏍烽鏍肩殑璇硶錛屼綘涔熷彲浠ュ啓鎴愯繖鏍鳳紝涓琛屽啓涓涓簮鏂囦歡錛屽茍鐢ㄥ弽鏂滅嚎緇撳熬錛岀劧鍚庡啀璧鋒柊鐨勪竴琛岋細
SOURCES = hello.cpp \\
main.cpp
HEADERS鍙橀噺鎸囧悜欏圭洰涓殑澶存枃浠訛紝澶氫釜澶存枃浠剁殑鏃跺欙紝鍜屽涓簮鏂囦歡鐨勮В鍐蟲柟娉曚竴鑷淬?
FORMS鍙橀噺鎸囧悜欏圭洰涓嬌鐢ㄥ埌鐨勭獥浣撴枃浠?qtdesign璁捐鐨?ui鏂囦歡)錛宷make涔熸敞鎰忎簡Qt鐨勭壒孌婇渶姹傦紝鍙互鑷姩鐨勫寘鍚玬oc鍜寀ic鐨勮繛緙栬鍒欍傛病鏈夌殑璇濇垨鑰呴潪qt紼嬪簭鍙互涓嶅啓銆?
TEMPLATE鍙橀噺鍛婅瘔qmake涓鴻繖涓簲鐢ㄧ▼搴忕敓鎴愬摢縐峬akefile銆備笅闈㈡槸鍙緵浣跨敤鐨勯夋嫨錛?
app - 寤虹珛涓涓簲鐢ㄧ▼搴忕殑makefile銆傝繖鏄粯璁ゅ鹼紝鎵浠ュ鏋滄ā鏉挎病鏈夎鎸囧畾錛岃繖涓皢琚嬌鐢ㄣ?
lib - 寤虹珛涓涓摼鎺ュ簱鐨刴akefile銆?
vcapp - 寤虹珛涓涓簲鐢ㄧ▼搴忕殑Visual Studio欏圭洰鏂囦歡銆?
vclib - 寤虹珛涓涓簱鐨刅isual Studio欏圭洰鏂囦歡銆?
subdirs - 榪欐槸涓涓壒孌婄殑妯℃澘錛屽畠鍙互鍒涘緩涓涓兘澶熻繘鍏ョ壒瀹氱洰褰曞茍涓斾負涓涓」鐩枃浠剁敓鎴恗akefile騫朵笖涓哄畠璋冪敤make鐨刴kefile銆?
CONFIG鍙橀噺鍙橀噺鎸囧畾浜嗙紪璇戝櫒鎵瑕佷嬌鐢ㄧ殑閫夐」鍜屾墍闇瑕佽榪炴帴鐨勫簱銆傞厤緗彉閲忎腑鍙互娣誨姞浠諱綍涓滆タ錛屼絾鍙湁涓嬮潰榪欎簺閫夐」鍙互琚玵make璇嗗埆銆?
涓嬮潰榪欎簺閫夐」鎺у埗鐫浣跨敤鍝簺緙栬瘧鍣ㄦ爣蹇楋細
release - 搴旂敤紼嬪簭灝嗕互release妯″紡榪炵紪銆傚鏋淺"debug\"琚寚瀹氾紝瀹冨皢琚拷鐣ャ?
debug - 搴旂敤紼嬪簭灝嗕互debug妯″紡榪炵紪銆?
warn_on - 緙栬瘧鍣ㄤ細杈撳嚭灝藉彲鑳藉鐨勮鍛婁俊鎭傚鏋淺"warn_off\"琚寚瀹氾紝瀹冨皢琚拷鐣ャ?
warn_off - 緙栬瘧鍣ㄤ細杈撳嚭灝藉彲鑳藉皯鐨勮鍛婁俊鎭?
涓嬮潰榪欎簺閫夐」瀹氫箟浜嗘墍瑕佽繛緙栫殑搴?搴旂敤紼嬪簭鐨勭被鍨嬶細
qt - 搴旂敤紼嬪簭鏄竴涓猀t搴旂敤紼嬪簭錛屽茍涓擰t搴撳皢浼氳榪炴帴銆?
thread - 搴旂敤紼嬪簭鏄竴涓綰跨▼搴旂敤紼嬪簭銆?
x11 - 搴旂敤紼嬪簭鏄竴涓猉11搴旂敤紼嬪簭鎴栧簱銆?
windows - 鍙敤浜嶾"app\"妯℃澘錛氬簲鐢ㄧ▼搴忔槸涓涓猈indows涓嬬殑紿楀彛搴旂敤紼嬪簭銆?
console - 鍙敤浜嶾"app\"妯℃澘錛氬簲鐢ㄧ▼搴忔槸涓涓猈indows涓嬬殑鎺у埗鍙板簲鐢ㄧ▼搴忋?
dll - 鍙敤浜嶾"lib\"妯℃澘錛氬簱鏄竴涓叡浜簱錛坉ll錛夈?
staticlib - 鍙敤浜嶾"lib\"妯℃澘錛氬簱鏄竴涓潤鎬佸簱銆?
plugin - 鍙敤浜嶾"lib\"妯℃澘錛氬簱鏄竴涓彃浠訛紝榪欏皢浼氫嬌dll閫夐」鐢熸晥銆?
TARGET鍙橀噺鎸囧畾鐢熸垚鐨勪簩榪涘埗浠g爜鐨勮礬寰勫拰鏂囦歡鍚嶏紝濡傛灉寤虹珛鐨勬槸涓涓摼鎺ュ簱鐨勮瘽錛屽畠浼氬湪鏂囦歡鍚嶅墠闈㈣嚜鍔ㄥ姞涓奬"lib\"鍜屽湪鏈鍚庤嚜鍔ㄥ姞涓奬".so\".
鎴戜滑鍦ㄤ嬌鐢ㄨ繃紼嬩腑鍙兘浼氫嬌鐢ㄥ埌鍙﹀鐨勪竴浜涘嚱鏁板簱錛岄摼鎺ュ簱絳夈傚嚱鏁板簱鐨勫ご鏂囦歡鎸囧畾浣跨敤INCLUDEPATH鍙橀噺錛屽叾瀹冮摼鎺ュ簱鐨勬寚瀹氬彲浠ラ氳繃LIBS 鍙橀噺鏉ユ寚瀹氾紝渚婰IBS += -lmath -L/usr/local/lib
DEFINES鍙橀噺鐨勬寚瀹氬氨濡傚悓make鐨?D閫夐」涓鏍楓?
緇撴潫璇?
Autoconf 鍜?Automake 鍔熻兘鍗佸垎寮哄ぇ錛屼絾瀵逛簬鏅氱敤鎴鋒潵璇達紝澶繃澶嶆潅銆俼make鏂逛究銆佺畝鍗曘佸揩鎹鳳紝鏄竴涓交閲忕駭鐨刴akefile鐢熸垚宸ュ叿錛岃櫧鐒跺畠鏄痲t宸ュ叿鍖呯殑涓閮ㄥ垎錛屼絾瀹? 涔熷畬鍏ㄥ彲浠ョ敤鏉ヨ繘琛屽叾瀹冪▼搴弇akefile鏂囦歡鐨勭敓鎴愶紝瀵逛簬澶у鏁頒漢鏉ヨ錛屽畠宸茬粡鏄潪甯哥殑澶熺敤浜嗐備綘涔熷彲浠ヤ粠qt鎻愪緵鐨勮澶氱幇瀛樼殑婧愮▼搴忎腑鎵懼埌鐩稿叧鐨? pro欏圭洰鏂囦歡錛屽畠浠槸瀛︿範qmake 鏇村鎶宸х殑鏈浣寵寖渚嬨?
榪欑瘒綆浠嬪彧鐢ㄥ埌浜?qmake 鐨勪竴浜涚毊姣涚艦浜嗭紝甯屾湜榪欑瘒鏂囦歡鑳藉府鍔╀綘瀵逛駭鐢?Makefile鏈変釜綆鍗曠殑渚濇嵁銆?

]]>
QT鍏ラ棬 浜?寤虹珛鑿滃崟http://m.shnenglu.com/mydriverc/articles/32719.html鏃呴?/dc:creator>鏃呴?/author>Sun, 23 Sep 2007 07:30:00 GMThttp://m.shnenglu.com/mydriverc/articles/32719.htmlhttp://m.shnenglu.com/mydriverc/comments/32719.htmlhttp://m.shnenglu.com/mydriverc/articles/32719.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/32719.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/32719.html#define WIN_H

#include <qmainwindow.h>

class QAction;
class QPopupMenu;
class Mywin: public QMainWindow
{
聽聽聽 Q_OBJECT
聽聽聽 public:
聽聽聽 Mywin(QWidget *parent=0,const char * name=0);
聽聽 聽
聽聽聽 private:
聽聽聽聽聽聽 void createActions();
聽聽聽聽聽聽 void createMenus();
聽聽 聽
聽聽聽 private slots:
聽聽 聽void newFile();
聽聽 聽
聽聽聽 private:
聽聽聽聽聽聽 QAction *newAct;
聽聽聽聽聽聽 QPopupMenu *fileMenu;
};

#endif


#include "win.h"
#include <qapplication.h>
#include <qaction.h>
#include <qmessagebox.h>
#include <qpopupmenu.h>
#include <qmenubar.h>
Mywin::Mywin(QWidget *parent,const char * name):QMainWindow(parent,name)
{
聽聽 createActions();聽
聽聽 createMenus();
}

void Mywin::createActions()
{
聽 newAct=new QAction(NULL,tr("&New"),0,this);
聽// newAct->setStatusTip(tr("Create a new file"));
聽 connect(newAct,SIGNAL(activated()),this,SLOT(newFile()));
}
void Mywin::createMenus()
{#include "win.h"
#include <qapplication.h>
#include <qaction.h>
#include <qmessagebox.h>
#include <qpopupmenu.h>
#include <qmenubar.h>
Mywin::Mywin(QWidget *parent,const char * name):QMainWindow(parent,name)
{
聽聽 createActions();聽
聽聽 createMenus();
}

void Mywin::createActions()
{
聽 newAct=new QAction(NULL,tr("&New"),0,this);
聽 connect(newAct,SIGNAL(activated()),this,SLOT(newFile()));
}

void Mywin::createMenus()
{
聽聽聽 fileMenu=new QPopupMenu(this);
聽聽聽 newAct->addTo(fileMenu);
聽聽聽
聽聽聽
聽聽聽 menuBar()->insertItem(tr("&File"),fileMenu);
}

void Mywin::newFile()
{
聽聽聽 QMessageBox::warning(this,tr("Hello"),tr("Hello \n World!"),QMessageBox::Yes|QMessageBox::Default,QMessageBox::No,QMessageBox::Cancel|QMessageBox::Escape);聽聽聽聽
}



#include <qapplication.h>
#include "win.h"
int main(int argc,char* argv[])
{
聽聽聽聽 QApplication app(argc,argv);

聽聽聽聽 Mywin *mywin=new Mywin;
聽聽聽聽 app.setMainWidget(mywin);
聽聽聽聽 mywin->show();
聽聽聽 return app.exec();
}
1





1 newAct=new QAction(NULL,tr("&New"),0,this);
聽 connect(newAct,SIGNAL(activated()),this,SLOT(newFile()));
聽 寤虹珛涓涓彍鍗曢」,騫跺皢鐐瑰嚮淇″彿榪炴帴鍒版ЫnewFile()
2 fileMenu=new QPopupMenu(this);
聽 newAct->addTo(fileMenu);
聽 寤虹珛涓涓彍鍗?br />3 menuBar()榪斿洖涓涓狹enuBar
聽 menuBar()->insertItem(tr("&File"),fileMenu);
聽 灝嗚彍鍗曟坊鍔犲埌MenuBar涓?


]]>
QT 浜洪棬 1http://m.shnenglu.com/mydriverc/articles/32696.html鏃呴?/dc:creator>鏃呴?/author>Sat, 22 Sep 2007 18:04:00 GMThttp://m.shnenglu.com/mydriverc/articles/32696.htmlhttp://m.shnenglu.com/mydriverc/comments/32696.htmlhttp://m.shnenglu.com/mydriverc/articles/32696.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/32696.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/32696.html

]]>
QT緙栬瘧---鎴戣嚜宸辯殑http://m.shnenglu.com/mydriverc/articles/30900.html鏃呴?/dc:creator>鏃呴?/author>Sun, 26 Aug 2007 17:03:00 GMThttp://m.shnenglu.com/mydriverc/articles/30900.htmlhttp://m.shnenglu.com/mydriverc/comments/30900.htmlhttp://m.shnenglu.com/mydriverc/articles/30900.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/30900.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/30900.htmlqmake -project
qmake
make
涓夋潯鍛戒護


]]>
LINUX涓嬪垱寤哄拰緙栬瘧Qt欏圭洰http://m.shnenglu.com/mydriverc/articles/29953.html鏃呴?/dc:creator>鏃呴?/author>Mon, 13 Aug 2007 16:35:00 GMThttp://m.shnenglu.com/mydriverc/articles/29953.htmlhttp://m.shnenglu.com/mydriverc/comments/29953.htmlhttp://m.shnenglu.com/mydriverc/articles/29953.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/29953.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/29953.htmlLINUX涓嬪垱寤哄拰緙栬瘧Qt欏圭洰

1,鐢≦t designer鍒涘緩 BaseClass.ui 鏂囦歡 鍜?BaseClass.ui.h 錛堝鏈夊繀瑕侊級銆?/p>

2,鐢?ui鏂囦歡鐢熸垚鐩稿簲鐨?.h 鍜?.cpp 鏂囦歡錛?br />uic -o BaseClass.h BaseClass.ui
uic -o BaseClass.cpp -i(-impl) BaseClass.h BaseClass.ui

3,鐢熸垚瀛愮被鐨?.h 鍜?.cpp 鏂囦歡錛堝鏈夊繀瑕侊級錛?br />uic -o SubClass.h -subdecl SubClassBaseClassBaseClass.ui
uic -o SubClass.cpp -subimpl SubclassSubClass.h BaseClass.ui

4,鐢熸垚moc鏂囦歡錛?br />moc -o moc_BaseClass.cpp BaseClass.h
moc -o moc_SubClass.cpp SubClass.h

5,鐢熸垚欏圭洰鏂囦歡.pro錛?br />qmake -o Project.pro -project
濡備笉鎸囧畾鏂囦歡鍚嶏紝鍒欐枃浠跺悕榛樿涓哄綋鍓嶇洰褰曠殑鍚嶅瓧銆?/p>

6,鐢熸垚Makefile
qmake

7,緙栬瘧閾炬帴錛歮ake

娉細Linux Redhat 9.0, Qt3.3銆傜豢鑹插彲鏍規嵁瀹為檯欏圭洰鑷鏇存敼銆?/p>

鍙傝錛?br />Integrating Qt Designer Files Into Your Project

http://docsrv.caldera.com:8457/en/QtTutorial/chap5_4.html



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=933964



]]>
鐢≦tE瀹炵幇SBC涓241OX涓婄殑LED鎺у埗http://m.shnenglu.com/mydriverc/articles/29951.html鏃呴?/dc:creator>鏃呴?/author>Mon, 13 Aug 2007 16:30:00 GMThttp://m.shnenglu.com/mydriverc/articles/29951.htmlhttp://m.shnenglu.com/mydriverc/comments/29951.htmlhttp://m.shnenglu.com/mydriverc/articles/29951.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/29951.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/29951.html
鎽? 瑕侊細QtE(Qt錛廍mbedded)鏄尓濞乀rolltech鍏徃涓撻棬涓哄祵鍏ュ紡緋葷粺璁捐鐨勫浘褰㈢敤鎴風晫闈?GUI)鐨勪竴涓伐鍏峰寘銆傛湰鏂囬氳繃QtE緙栫▼錛屽畬 鎴愬鍩轟簬ARM9鐨凷BC-2410X寮鍙戞澘涓奓ED鐨勬帶鍒訛紝騫惰緇嗚鏄庝粠紼嬪簭璁捐銆佺Щ妞嶅埌榪愯鐨勮繃紼嬨傜▼搴忚兘寰堝ソ鐨勮繍琛屽湪寮鍙戞澘涓婏紝楠岃瘉浜嗙▼搴忕殑鏈夋晥鎬? 鍜屽彲闈犳с傜粨鏋滆鏄庣敤QtE寮鍙戠殑搴旂敤紼嬪簭鐣岄潰娓呮櫚緹庤錛屾搷浣滅畝鍗曟柟渚褲?br />

鍏抽敭璇嶏細QtE ARM9 GUI SBC-2410X


寮曡█


榪? 騫存潵錛岀敱浜嶢RM(Advanced RISC Machines)鍦ㄦц兘銆佸姛鑰椼佹垚鏈拰浣撶Н涓婄殑浼樺娍錛屼嬌寰楀畠鍦ㄥ祵鍏ュ紡緋葷粺涓殑鍙戝睍濡傛棩涓ぉ錛屽畠鍦ㄥ伐涓氭帶鍒躲佽埅絀鴻埅澶┿佸啗浜嬮鍩熴佹秷璐圭數瀛愩佹櫤鑳藉鐢靛拰瑙? 棰戠洃鎺х瓑鏂歸潰閮藉彂鎸ヤ簡閲嶅ぇ鐨勪綔鐢ㄣ傚緢澶氫漢閮借揩鍒囧湴鎯沖涔燗RM錛屼互絎旇呯殑緇忛獙錛屼粠鏈鍩烘湰鐨凩ED鎺у埗瀛﹁搗錛屾槸涓涓笉閿欑殑閫夋嫨銆?/p>

濡? 鏋滀笉鐔熸倝Linux錛屽彲鑳藉QtE鐨勬蹇電煡涔嬬敋灝戯紝瀹冩槸鎸▉Trolltech鍏徃涓哄悇縐嶇郴緇熻璁$殑鍥懼艦鐢ㄦ埛鐣岄潰宸ュ叿鍖咃紝閲囩敤c++璇█緙栫▼銆俀tE鐨勪紭 鐐規湁錛氳法騫沖彴錛屽彲浠ユ柟渚跨殑榪炴帴鏁版嵁搴擄紝鍙互灝嗙▼搴忎笌Java闆嗘垚絳夈傚叾瀹烇紝QtE鍦ㄤ竴浜涢珮绔殑縐誨姩鎵嬫寔璁懼涓棭宸叉繁鍏ヤ漢蹇冿紝Troll鈥攖ech鍏徃鍦? QtE鐨勫熀紜涓婂紑鍙戜簡涓涓簲鐢ㄧ幆澧僎topia錛岀洰鍓嶅凡鏈夊緢澶氬叕鍙擱噰鐢≦topia鏉ュ紑鍙戜粬浠殑涓繪祦PDA銆傚綋鐒訛紝Qt涔熸湁瀹冪殑緙虹偣錛屾棦涓嶈兘鎻愪緵IDE (闆嗘垚寮鍙戠幆澧?錛屼絾榪欎釜緙虹偣鍦ㄥ己澶х殑Linux涓嬫樉寰楀井涓嶈凍閬撱備嬌鐢╣cc錛廹++錛屽姞涓奞t鐨勫紑鍙戝伐鍏鳳細Qt Designer錛宼make錛弎make錛孶IC絳夛紝寮鍙戝彲瑙嗗寲紼嬪簭灝嗗彉寰楀崄鍒嗗鏄撱?/p>

瑕佸涔燗RM錛岄夋嫨涓嬈懼ソ鐨勫紑鍙戞澘鏄繀涓? 鍙皯鐨勩係BC涓2410X鏄箍宸炲弸鍠勪箣鑷傚叕鍙歌璁$殑涓嬈懼熀浜嶢RM9鐨勫紑鍙戞澘錛屾搷浣滅郴緇熸槸闊╁浗鐨刴izi-linux銆係BC-2410X涓嶅悓浜? uClinux錛屽畠鐨勬帴鍙d赴瀵岋紝涓旀敮鎸丮MU銆丵tE2錛?錛?錛屽悓鏃舵彁渚涗簡鎺у埗LED鐨勫懡浠よ鏂瑰紡銆?/p>

1 緋葷粺闇姹?/p>

鈼囧畬鍏ㄥ畨瑁匯edHat9錛?銆?br />鈼囧湪Linux涓嬪緩绔婹tE緙栬瘧鐜銆?br />鈼囧紑鍙戞澘涓婂凡緇忓姞杞絃ED璁懼椹卞姩紼嬪簭銆?/p>

娉ㄦ剰錛氫綘鎵寤虹珛鐨凲tE鐗堟湰蹇呴』涓庡紑鍙戞澘鎵鏀寔鐨勭増鏈竴鑷淬?/p>

2 紼嬪簭璁捐


鍦↙inux 涓嬶紝鐢ㄧ郴緇熻嚜甯︾殑Qt Designer鏉ョ紪鍐欑▼搴忋俀t Designer鏄竴涓紭縐鐨勫彲瑙嗗寲寮鍙戝伐鍏鳳紝鐢ㄥ畠鏉ヨ璁″崄鍒嗗鏄撱傚畠鐨勭晫闈㈢被浼間簬Delphi錛屼絾浣跨敤C++璇█緙栧啓搴旂敤紼嬪簭銆俀t紼嬪簭璁捐閲岀殑涓涓寒 鐐瑰氨鏄疭ignaI-_Slot鏈哄埗錛屽畠鏈夌偣綾諱技浜嶸C++閲岀殑娑堟伅鏈哄埗銆傚綋涓涓粍浠跺彂鍑篠ignal鏃訛紝鍏朵粬涓涓粍浠舵垨澶氫釜緇勪歡鍙互閫氳繃Slot鎺ユ敹鍙? 鏉ョ殑SignaI錛岀粍浠舵湰韜篃鍙互鎺ユ敹鑷繁鐨凷ignal錛岃繖鏍峰鐞嗕竴涓簨浠跺皢鍙樺緱闈炲父瀹規槗銆俀t Designer鐨勪紭鐐逛笉浠呭湪浜庡畠鍙互鍗佸垎鏂逛究鐨勮璁″浘褰㈢敤鎴風晫闈紝榪樿〃鐜板湪鍙互鐢ㄨ繛鎺ュ伐鍏峰緢瀹規槗鐨勬妸Signals鍜孲lots榪炴帴璧鋒潵銆傜敤鎴瘋嚜宸辮璁? 鐨勭▼搴忔坊鍔犲湪**錛巙i錛巋涓?/p>

鎵撳紑Qt Deslgner錛岄夋嫨File錛弉ew C++Project錛屽懡鍚嶄負led錛巔ro騫朵繚瀛樸傛帴鐫閫夋嫨File錛弉ew-Dialog錛屽茍鍦ㄦ璁捐鑷繁鐨勭敤鎴風晫闈€傛渶鍚庨夋嫨File錛弉ew C++Main鈥擣ile錛岀郴緇熻嚜鍔ㄧ敓鎴愪竴涓猰ain錛巆pp鏂囦歡銆傚浘褰㈢敤鎴風晫闈㈠鍥?鎵紺猴紝Initlalize鎸夐挳涓昏瀹屾垚LED璁懼鐨勬墦寮錛屽畾鏃跺櫒 鐨勫叧闂拰鍏朵粬涓浜涘垵濮嬪寲宸ヤ綔錛汢egim鎸夐挳鍒欓拡瀵筁ED Display Mode鐨勫紑濮嬶紱Exit鎸夐挳涓洪鍑哄簲鐢ㄧ▼搴忋傚乏闈㈢殑緇勫悎妗嗗寘鎷?涓猂adioButton錛屽搴?涓狶ED鐨勪寒鎴栫伃錛涘彸闈㈢殑緇勫悎妗嗗寘鎷?涓? RadioButton(瀵瑰簲涓嶅悓鐨勯棯鐑佹ā寮忓拰闂儊蹇參)鍜?涓狶CDNumber(鐢ㄦ潵鏄劇ず闂儊鐨勬椂闂撮棿闅?銆傛湰紼嬪簭寤虹珛鐨凷ignal鈥擲1ot榪炴帴 鏈夎澶氾紝涓嬮潰瀵瑰嚑涓噸瑕佺殑榪炴帴鍜屽嚱鏁拌繘琛岃鏄庛?/p>


(1)connect(initPushButton錛嶴IGNAL(clicked())錛宼his錛嶴LOT(initial()))


褰揑nitialize 鎸夐挳鎸変笅鏃訛紝LedForm瀵硅瘽妗嗘帴鏀舵淇″彿錛屽茍鎵цinitial()鍑芥暟銆侺inux鎿嶄綔緋葷粺鎶婃墍鏈夌殑璁懼閮界湅鎴愭枃浠訛紝鍥犳瀵硅澶囩殑鎿嶄綔鎺у埗鍙互閫氳繃 open()銆乮octl()絳夊嚱鏁板疄鐜般傚湪initial()鍑芥暟涓氨鏄皟鐢ㄤ簡open()鍑芥暟鏉ユ墦寮LED璁懼鐨勩?/p>

(2)connect(okPushButton錛孲IGNAL(clicked())錛宼his錛孲LOT(modeSel()))


褰揃egin 鎸夐挳鎸変笅鏃訛紝LedForm瀵硅瘽妗嗘帴鏀舵淇″彿錛屽茍鎵цmodeSel()鍑芥暟銆傚湪modeSel()鍑芥暟涓紑鍚畾鏃跺櫒錛屽茍鍒涘緩鍙﹀涓涓繛鎺ョ敤鏉ュ驚鐜樉紺? LED銆傚湪鍛戒護琛屾柟寮忎腑錛孡ED鐨勫驚鐜樉紺鴻鐢ㄥ埌姝誨驚鐜紝騫剁敤閿洏涓柇鏉ユ帶鍒跺驚鐜紱鑰屽湪Qt鎴栧叾浠栧彲瑙嗗寲璇█涓紝鍒欒鐢ㄥ埌瀹氭椂鍣ㄦ潵鎺у埗寰幆銆?/p>

(3)鍑芥暟open()


鍦ㄤ腑澹版槑錛屽惈涔変負鎵撳紑璁懼鏂囦歡銆傛墦寮鎴愬姛榪斿洖0錛涘け璐ヨ繑鍥炰竴1銆?/p>

(4)鍑芥暟ioctl()


鍦ㄤ腑澹版槑錛屾帶鍒禝錛廜绔彛銆備緥濡傦細
Int fd=open(鈥濓紡dev錛弆eds鈥濓紝0)錛?br />ioctl(fd錛?錛?)錛?錛忥紡璁㎜ED4鐏?/p>

(5)鍑芥暟select()


鍦ㄤ腑澹版槑錛屽惈涔変負緇忚繃澶氶暱鏃墮棿璁塊棶涓嬈¤澶囥?/p>

3 紼嬪簭縐繪涓庤繍琛?/p>

瑕佹兂浣跨▼搴忚繍琛屽湪寮鍙戞澘鐨凲topia涓紝鍒欏繀欏誨湪寤虹珛鐨凲tE鐜涓嬬紪璇戯紝騫惰緗ソ鐜鍙橀噺銆傜粓绔繘鍏ユ墍寤虹珛鐨凲tE鐩綍鍚庯紝鐜鍙橀噺鎴栬繍琛岀幆澧冨彉閲忓拰鑴氭湰璁劇疆濡備笅錛?/p>

export QTDIR=$PWD錛弎t
export QPEDlR=$PWD錛弎topia
export TMAKEDIR=$PWD錛弔make
export TMAKEPATH=$TMAKEDIR錛弆ib錛弎ws錛弆inux-armg++
export PATH=$QTDIR錛廱in錛?QPEDIR錛廱in錛?TMAKEDIR錛?br />bin錛?PATH


鍊煎緱娉ㄦ剰鐨勪竴鐐規槸錛氱敤Linux鑷甫鐨凲t Designer鍒涘緩鐨勫伐紼嬫枃浠跺彧閫傜敤浜巕make錛岃岀瑪鑰呭緩绔嬬殑QtE鐜鍙兘鐢╰make鏉ョ敓鎴恗akefile錛屽洜姝ら渶瑕佷慨鏀筶ed錛巔ro鏂囦歡錛岃瀹冮傜敤浜巘make錛屼慨鏀瑰涓嬶細


TEMPLATE =app
CoNFIG +=qtopia warn_on release
SoURCES +=main錛巈pp
INTERFACES =led錛巙i
TARGET =led


浠ヤ笂鐨勫伐浣滃仛瀹屽悗錛屽氨鍙互緙栬瘧浜嗐傜紪璇戞垚鍔熷悗鐢熸垚鍙墽琛岀殑浜岃繘鍒舵枃浠秎ed錛岀劧鑰岃浣跨▼搴忚繍琛屽湪寮鍙戞澘涓婄殑qtopia妗岄潰涓婏紝榪橀渶瑕佷竴涓闈㈡枃浠秎ed錛巇esktop鍜岃嚜瀹氫箟鐨勪竴涓浘鏍噇ed錛巔ng銆傛闈㈡枃浠跺涓嬶細


[Desktop Entry]
Comment=a LED Control Program
Exee=led
Icon=led
Type=Application
Name=LED Control


鐒? 鍚庯紝鎶妉ed澶嶅埗鍒癝BC-2410X涓嬶紡opt錛弎topia錛廱in鐩綍涓嬶紝led錛巔ng澶嶅埗鍒幫紡opt錛弎topia錛弍ics鐩綍涓嬶紝led錛? desktop澶嶅埗鍒幫紡0pt錛弎topia錛廰pps錛廇pplications鐩綍涓嬨傛渶鍚庯紝鐢╡hmod a+X led鏀瑰彉鏂囦歡led鐨勬潈闄愶紝閲嶆柊鍚姩緋葷粺錛屼究鍙湅鍒發ed錛巔ng鐨勫浘鏍囨樉紺哄湪qtopia妗岄潰涓婏紝鐐瑰嚮姝ゅ浘鏍囧氨鍙繍琛岀▼搴忎簡銆?/p>

4 閮ㄥ垎婧愮▼搴忓強娉ㄩ噴


鐢變簬婧愮▼搴忎唬鐮佹瘮杈冮暱錛岃繖閲屽氨涓嶅叏閮ㄥ垪鍑轟簡錛屼粎緇欏嚭閲嶈閮ㄥ垎鐨勪唬鐮佸強娉ㄩ噴錛屼互渚涜鑰呭弬鑰冦?/p>

(1) 紼嬪簭鐨勫垵濮嬪寲
int fd錛?錛忥紡LED璁懼鏂囦歡鍙ユ焺
int type=1錛?錛忥紡榛樿鏂瑰紡涓鴻鏁板櫒
double period=0錛?錛?錛忥紡榛樿鏃墮棿闂撮殧
QTimer*t=new QTimer(Q鈥硉imer鈥?錛涳紡錛忓垱寤哄畾鏃跺櫒
void LedForm錛氾細initial(){
fd=open(鈥籌紡dev錛弆eds鈥籌紝0)錛?錛忥紡鎵撳紑LED璁懼
錛忥紡鍏朵粬涓浜涘垵濮嬪寲璇彞
涓>stop()錛?錛忥紡鍏抽棴瀹氭椂鍣?br />锝?/p>

(2) LED鏄劇ず鏂瑰紡鐨勮緗?br />void LedForm錛氾細push-leds(void){
static unsigned step錛?br />unsigned led鈥攂itmap錛?br />inti錛?br />switch(type){
case 0錛?錛忥紡鏂瑰紡0錛氳窇椹伅
if(step>=14){step=0錛泒
if(step<7){led_bitmap=1<else{led_bitmap=1<<(14涓step)錛泒
break錛?br />case 1錛?錛忥紡鏂瑰紡1錛氳鏁板櫒
if(step>255){step=0錛?
Ied_bitmap=step!
break錛?br />case 2錛?錛忥紡鏂瑰紡2錛氬仠姝?br />led_bitmap=0錛?br />break;
step鍗佸崄;
for(i=0錛沬<8錛沴++){
ioctl(fd錛宭ed_bitmap錛?錛宨)錛?br />led_bitmap>>=1錛?br />}
}


(3) LED璁懼鐨勮鍙栧強璋冪敤LED鏄劇ず紼嬪簭
void LedForm錛氾細ledDisplay(){
fd_set rds錛?br />struct timeval step錛?br />FD_ZERO(&rds)錛?br />step錛巘v_sec=period錛?br />step錛巘v_usec=(pefiod鈥攕tep錛嶹_sec)*1000000L錛?br />select(fd錛?amp;rds錛孨ULL錛孨ULL錛?amp;step)錛?br />push_leds()錛?br />}


(4)寰幆鏄劇ず鐨勫疄鐜?br />void LedForm錛氾細modeSel(){
t-->start(O)錛涳紡錛忓惎鍔ㄥ畾鏃跺櫒錛屽茍绔嬪嵆鍙戝嚭Signal- timeout()
connect(t錛孲IGNAL(timeout())錛宼his錛嶴LOT(1edDisplay()))錛?br />}


緇?璇?/p>

闅? 鐫閫氫俊琛屼笟鐨勮繀鐚涘彂灞曪紝縐誨姩鎵嬫寔璁懼蹇呭皢鎴愪負浜轟滑宸ヤ綔銆佸涔犲拰鐢熸椿鐨勪富嫻侊紝鐢≦t璁捐縐誨姩鎵嬫寔璁懼鐨凣UI鏈夌潃寰楀ぉ鐙帤鐨勪紭鍔褲傜洰鍓嶏紝Qt搴旂敤浜庡叏涓栫晫涓? 鐧句釜杞歡寮鍙戦」鐩腑銆傚湪鎴戝浗錛孮t鐨勫彂灞曚篃鏈夋槦鏄熶箣鐏彲浠ョ噹鍘熶箣鍔褲傛湰鏂囬氳繃涓涓渶鍩虹鐨勫皬紼嬪簭鍚戣鑰呮紨紺轟簡鎬庢牱浣跨敤Qt寮鍙戝簲鐢ㄧ▼搴忥紝浠ュ強鎬庢牱寤虹珛Qt 涓嶢RM鐨勮仈緋伙紝甯屾湜瀵硅鑰呭涔燗RM鍜孮t璧峰埌涓瀹氱殑甯姪浣滅敤銆?/p>

]]>
Linux縐佹湁鏁版嵁緙栫▼http://m.shnenglu.com/mydriverc/articles/29747.html鏃呴?/dc:creator>鏃呴?/author>Fri, 10 Aug 2007 17:47:00 GMThttp://m.shnenglu.com/mydriverc/articles/29747.htmlhttp://m.shnenglu.com/mydriverc/comments/29747.htmlhttp://m.shnenglu.com/mydriverc/articles/29747.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/29747.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/29747.html聽聽聽
聽聽聽 紼嬪簭灝辨槸婕旂ず榪欐牱鐨勬暟鎹粨鏋勩傚垱寤轟簡涓や釜鏂扮殑綰跨▼錛屽垎鍒妸鑷繁鐨処D鍐欏叆縐佹湁鏁版嵁錛岀劧鍚庝簰涓嶅共鎵扮殑杈撳嚭銆備唬鐮佸涓嬶細

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>

pthread_key_t key;

void echomsg(int t)
{
聽printf("destructor excuted in thread %d,param=%d\n",pthread_self(),t);聽聽聽

}

void child()
{
聽int tid;

聽tid = pthread_self();聽
聽聽 printf("thread %d enter\n",tid);
聽sleep(1);
聽聽 pthread_setspecific(key,(void *)tid);
聽聽 printf("thread %d returns %d\n",tid,pthread_getspecific(key));
聽sleep(1);
}

int main()
{
聽pthread_t tid1,tid2;

聽聽 printf("Hello\n");
聽聽
聽聽 pthread_key_create(&key,(void *)echomsg);
聽聽 pthread_create(&tid1,NULL,(void *)child,NULL);
聽聽 pthread_create(&tid2,NULL,(void *)child,NULL);
聽聽
聽聽 pthread_join(tid1,NULL);
聽pthread_join(tid2,NULL);
聽聽 pthread_key_delete(key);
聽聽
聽聽 printf("main thread exit\n");聽聽
聽聽 return 0;
}


]]>
鍙栨秷綰跨▼http://m.shnenglu.com/mydriverc/articles/29746.html鏃呴?/dc:creator>鏃呴?/author>Fri, 10 Aug 2007 17:42:00 GMThttp://m.shnenglu.com/mydriverc/articles/29746.htmlhttp://m.shnenglu.com/mydriverc/comments/29746.htmlhttp://m.shnenglu.com/mydriverc/articles/29746.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/29746.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/29746.html 綰跨▼鍙栨秷鐨勬柟娉曟槸 鍚戠洰鏍囩嚎紼嬪彂鍑轟竴涓猚ancel淇″彿,浣嗗浣曞鐞哻ancel淇″彿鍒欐槸鐢辯洰鏍囩嚎紼嬭嚜宸卞喅瀹?鎴栬呭拷鐣?鎴栬呯珛鍗崇粓姝?鎴栬呯戶緇繍琛屽埌cancelation-point(鍙栨秷鐐?,鐢變笉閫氱殑cancellation鐘舵佸喅瀹?
绔瘹鎺ユ敹鍒癱ancel淇″彿鐨勯粯璁ゅ鐞嗘槸緇х畫榪愯鍒板彇娑堢偣,涔熷氨鏄鎽勫埗涓涓猚anceled鐘舵?綰跨▼緇х畫榪愯,鍙湁榪愯鍒癱ancelation-point鐨勬椂鍊欐墠浼氶鍑?

鍙栨秷鐐?鏍規嵁posix鐨勬爣鍑?pthread_join,pthread_testcancel,pthread_cand_wait, pthread_cond_timedwait,sem_wait,sigwait絳夊嚱鏁頒互鍙妑ead,write絳変細寮曡搗鍫靛鐨勮皟鐢ㄩ兘鏄? cancelation-point,鑰屽叾浠栫殑pthread鍑芥暟閮戒笉浼氬紩璧穋ancelation鍔ㄤ綔,浣唒thread_cancel鐨勬墜鍐岃鏄? linuxthread鐨勫簱涓嶤搴撶粨鍚堢殑騫朵笉鏄緢濂?鍥犺岀洰鍓嶇殑C鍑芥暟搴撻兘涓嶆槸cancelation-point,浣哻ancel淇″彿浼氫嬌綰跨▼浠庡牭濉炵殑 緋葷粺璋冪敤涓鍑?騫惰緗瓻INTR閿欒鐮?鍥犳鍙互鍦ㄩ渶瑕佷綔涓篶ancelation-point鐨勭郴緇熻皟鐢ㄥ墠鍚庤皟鐢? pthread_testcancel,浠庤岃揪鍒癙OSIX鐨勬爣鍑?渚嬪
pthread_testcancel();
retcode=read(fd,buffer,length);
pthread_testcancel();


紼嬪簭璁捐鐨勮冭檻:
濡傛灉綰跨▼澶勪簬鏃犻檺鐨勫驚鐜腑涓斿驚鐜病鏈夋墽琛屽埌鍙栨秷鐐圭殑蹇呯劧璺緞,鍒欑嚎紼嬫棤娉曠敱浜庡閮ㄧ殑鍏朵粬綰跨▼鐨勫彇娑堣姹傝岀粓姝?鍥犳,鍦ㄨ繖鏍風殑寰幆浣撲腑鐨勫繀緇忚礬寰勪笂鍔犱笂pthread_testcancel()鐨勮皟鐢?

]]>
Linux鐜榪涚▼闂撮氫俊緋誨垪錛堜簲錛夛細鍏變韓鍐呭瓨http://m.shnenglu.com/mydriverc/articles/29741.html鏃呴?/dc:creator>鏃呴?/author>Fri, 10 Aug 2007 17:00:00 GMThttp://m.shnenglu.com/mydriverc/articles/29741.htmlhttp://m.shnenglu.com/mydriverc/comments/29741.htmlhttp://m.shnenglu.com/mydriverc/articles/29741.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/29741.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/29741.html闃呰鍏ㄦ枃

]]>
inux涓嬩嬌鐢ㄧ郴緇熻皟鐢ㄥ疄鐜拌繘紼嬪悗鍙拌繍琛?http://m.shnenglu.com/mydriverc/articles/29613.html鏃呴?/dc:creator>鏃呴?/author>Wed, 08 Aug 2007 16:57:00 GMThttp://m.shnenglu.com/mydriverc/articles/29613.htmlhttp://m.shnenglu.com/mydriverc/comments/29613.htmlhttp://m.shnenglu.com/mydriverc/articles/29613.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/29613.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/29613.html鍏跺疄寰堢畝鍗曪紝灝辨槸鎶?br />if(fork()==0)
{
聽聽聽聽execve(...);
}
else
{
wait(state);
}
緇撴瀯涓殑else鍘繪帀灝卞彲浠ヤ簡
涓嬮潰鏄竴涓ず渚?br />#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <wait.h>
#include <errno.h>
#include <sys/stat.h>
#include <string.h>

int main(int argc,char** argv)
{
聽 int * status;
聽 int gc;
聽 char command[64]="./clu";
聽 char comarg[64]="";
聽 argv[1]=comarg;
聽 while(1)
聽聽聽 {
聽聽聽聽聽 if((gc=getchar())=='g')
聽{
聽聽 if(fork()==0)
聽聽聽聽 {
聽聽聽聽聽聽 if(execve(command,argv,0)==-1)
聽聽{
聽聽聽 printf("process error is %s\n",strerror(errno));
聽聽}
聽聽聽聽聽聽 printf("process is ok\n");
聽聽聽聽 }
聽}
聽聽聽聽聽 if(gc=='k')
聽{
聽聽 printf("to be continue\n");
聽}
聽聽聽聽聽 if(gc=='e')
聽{
聽聽 return 1;
聽}
聽聽聽 }
聽}

鍔熻兘鏄繖鏍風殑錛屽惎鍔ㄤ互鍚庝細浠庨敭鐩樻帴鍙楀瓧絎︼紝濡傛灉鏄痝灝辮繍琛岄鍏堟寚瀹氬ソ鐨勭▼搴忥紙鍦ㄨ繖閲屾槸涓涓彨clu鐨勭▼搴忥級錛屽鏋滄槸k灝辨墦鍗皌o be continue錛屽鏋滄槸e灝遍鍑?br />涓嬮潰鏄繖涓彨clu鐨勭▼搴忕殑浠g爜
#include <stdio.h>
#include <time.h>

int main()
{
聽 long begin=0;
聽 long end=24000;
聽 long finish=0;
聽 long loop1,loop2;
聽 time_t flag;
聽 time_t nowtime1,nowtime2;
聽 if((flag=time(&nowtime1))==-1)exit(1);
聽 for(loop1=begin;loop1<end;loop1++)
聽聽聽 {
聽聽聽聽聽 for(loop2=begin;loop2<end;loop2++)
聽{
聽聽 if((loop1%2)==0)
聽聽聽聽 {
聽聽聽聽聽聽 if((loop2%2)==0)
聽聽{
聽聽聽 if(finish>65535)
聽聽聽聽聽 finish=0;
聽聽聽 finish+=((loop1/2+loop2/2)%2)%2;
聽聽}
聽聽聽聽 }
聽}
聽聽聽 }
聽 if((flag=time(&nowtime2))==-1)exit(1);
聽 printf("%ld\n",finish);
聽 printf("proccess time %ldsec\n",nowtime2-nowtime1);
}
榪欎釜紼嬪簭鏈韓娌℃湁浠諱綍鎰忎箟錛屽彧鏄函綺圭殑寤惰涓涓嬫椂闂達紝杈撳嚭涓涓嬭繍琛岀殑鏃墮棿錛屼究浜庢祴璇曪紝鍦ㄦ垜鐨凙MD2500+涓婏紝澶ф鏄?縐掞紝浣犲彲浠ヨ瘯璇曞摝^_^

瑕佹祴璇曡繖涓▼搴忥紝鍙互鍦ㄧ▼搴忚繍琛屾椂杈撳叆g錛屼絾鏄繖涓綆椾笉浼氶┈涓婄粨鏉燂紝鍦ㄥ睆騫曡繕娌℃湁杈撳嚭鐨勬椂鍊欏啀杈撳叆k錛屽氨浼氬厛杈撳嚭k鐨勫唴瀹癸紝鍚庡彴clu鐨勭粨鏋滃嚭鏉ュ悗鎵嶈緭鍑哄埌灞忓箷錛屼篃灝辨槸clu鍦ㄥ悗鍙拌繍琛屼簡



]]>
Linux淇″彿鏈哄埗涔嬩俊鍙烽樆濉?/title><link>http://m.shnenglu.com/mydriverc/articles/29237.html</link><dc:creator>鏃呴?/dc:creator><author>鏃呴?/author><pubDate>Thu, 02 Aug 2007 15:19:00 GMT</pubDate><guid>http://m.shnenglu.com/mydriverc/articles/29237.html</guid><wfw:comment>http://m.shnenglu.com/mydriverc/comments/29237.html</wfw:comment><comments>http://m.shnenglu.com/mydriverc/articles/29237.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/mydriverc/comments/commentRss/29237.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/mydriverc/services/trackbacks/29237.html</trackback:ping><description><![CDATA[聽 姣忎釜榪涚▼閮芥湁涓涓敤鏉ユ弿榪板摢浜涗俊鍙蜂紶閫佹潵灝嗚闃誨鐨勯樆濉炵殑淇″彿闆嗭紝濡傛灉鏌愮淇″彿鍦ㄦ煇涓繘紼嬬殑闃誨淇″彿闆嗕腑錛屽垯浼犻佸埌璇ヨ繘紼嬬殑姝ょ淇″彿灝嗕細琚樆濉炪備俊鍙烽樆濉炴搷浣滀富瑕佹湁浠ヤ笅涓変釜鍑芥暟錛?br /> 聽聽 <br /> 聽聽 #include<signal.h><br /> 聽聽 int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);<br /> 聽聽 int sigpending(sigset_t *set);<br /> 聽聽 int sigsuspend(const sigset_t *mask);<br /> 聽聽 <br /> 聽聽 sigprocmask緋葷粺璋冪敤鐢ㄤ簬鏀瑰彉褰撳墠闃誨淇″彿闆嗭紝瀹冨叿浣撶殑鍔熻兘涓昏鍙栧喅浜庣涓涓弬鏁癶ow銆俬ow鐨勫彇鍊煎涓嬶細<br /> 聽聽聽聽聽聽聽聽聽 -----------------------------------------------------------------------------------------------------<br /> 聽聽聽聽聽聽聽聽聽聽 鍙傛暟how聽聽聽聽聽聽 |聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽 鍔ㄤ綔<br /> 聽聽聽聽聽聽聽聽聽 ------------------------------------------------------------------------------------------------------<br /> 聽聽聽聽聽聽聽聽聽聽聽聽 SIG_BLOCK聽聽聽聽 |聽聽聽聽 灝唖et鎸囧悜鐨勪俊鍙烽泦涓殑淇″彿娣誨姞鍒板綋鍓嶉樆濉炰俊鍙烽泦涓?br /> 聽聽聽聽聽聽聽聽聽 ------------------------------------------------------------------------------------------------------<br /> 聽聽聽聽聽聽聽聽 SIG_UNBLOCK聽聽聽 |聽聽聽聽 浠庡綋鍓嶉樆濉炰俊鍙烽泦涓Щ闄et鎸囧悜鐨勪俊鍙烽泦涓殑淇″彿錛?br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽聽 聽聽 |聽聽聽聽 縐婚櫎涓涓樆濉炰俊鍙烽泦涓笉瀛樺湪鐨勪俊鍙烽偅涔熸槸鍚堟硶鐨?br /> 聽聽聽聽聽聽聽聽聽 ------------------------------------------------------------------------------------------------------<br /> 聽聽聽聽聽聽聽聽聽 SIG_SETMASK聽聽聽 |聽聽聽聽 鎸囧畾set鎵鎸囧悜鐨勪俊鍙烽泦涓哄綋鍓嶉樆濉炰俊鍙烽泦<br /> 聽聽聽聽聽聽聽聽 --------------------------------------------------------------------------------------------------------<br /> 聽聽聽聽 濡傛灉sigprocmask鐨勭涓変釜鍙傛暟oldset闈炵┖錛屽垯oldset淇濆瓨鏃х殑淇″彿闃誨闆嗐?br /> 聽聽聽聽 <br /> 聽聽聽 sigpending(鈥?鑾峰緱褰撳墠宸蹭紶閫佸埌榪涚▼錛屽嵈琚樆濉炵殑鎵鏈変俊鍙鳳紝鍦╯et鎸囧悜鐨勪俊鍙烽泦涓繚瀛樻湭鍐籌紙闃誨錛夌殑淇″彿銆?br /> 聽聽聽 sigsuspend(const sigset_t *mask)錛?b>鍦ㄦ帴鏀跺埌鏌愪釜淇″彿涔嬪墠錛屼復鏃剁敤mask鏇挎崲榪涚▼鐨勪俊鍙鋒帺鐮侊紝騫舵寕璧瘋繘紼嬶紝鐩村埌鏀跺埌淇″彿涓烘銆俿igsuspend榪斿洖鍚庯紝鍗崇郴緇熷湪鎺ュ彈鍒頒俊 鍙峰悗,榪涚▼灝嗘仮澶嶈皟鐢ㄥ墠鐨勪俊鍙鋒帺鐮?璋冪敤淇″彿澶勭悊鍑芥暟瀹屾瘯鍚庤繘紼嬪皢緇х畫鎵ц銆?/b>濮嬬粓榪斿洖-1錛屽茍灝唀rrno璁劇疆涓篍INTR銆?br /> 聽聽聽 <br /> 聽聽聽 涓嬮潰榪欎釜灝忕▼搴忔祴璇曚簡淇″彿鐨勯樆濉炰互鍙婁俊鍙烽泦鎿嶄綔錛?br /> #include <stdio.h><br /> #include <stdlib.h><br /> #include <signal.h><br /> #include <unistd.h><br /><br /> #define BLOCK_SIG聽聽聽 SIGRTMIN+10<br /> /*淇″彿澶勭悊鍑芥暟*/<br /> static void sig_handler(int signum,struct siginfo *sig_info,void *unused)<br /> {<br /> 聽聽聽 printf("\n<! receive signal %d !>\n",signum);<br /> 聽聽聽 printf("-----------------< Signal information >--------------------\n");<br /> 聽聽聽 printf("\tsi_signo :\t%d\n",sig_info->si_signo);//淇″彿鍊?br /> 聽聽聽 printf("\tsi_errno :\t%d\n",sig_info->si_errno);//error鍊?br /> 聽聽聽 printf("\tsi_code :\t%d\n",sig_info->si_code); //淇″彿浜х敓鐨勫師鍥?br /> 聽聽聽 printf("\tsi_int聽聽 :\t%d\n",sig_info->si_int); //4 bytes 鏁村瀷聽聽聽 <br /> 聽聽聽 <br /> }<br /><br /> int main(int argc,char**argv)<br /> {<br /> 聽聽聽 sigset_t new_mask,old_mask,pending_mask;<br /> 聽聽聽 struct sigaction act;<br /> 聽聽聽 <br /> 聽聽聽 printf("Block precess PID : %d\n",getpid());<br /> 聽聽聽 /*<br /> 聽聽聽 *璁劇疆struct sigaction緇撴瀯<br /> 聽聽聽 */<br /> 聽聽聽 sigemptyset(&act.sa_mask);<br /> 聽聽聽 act.sa_flags=SA_SIGINFO;<br /> 聽聽聽 act.sa_sigaction=(void *)sig_handler;<br /> 聽聽聽聽聽聽聽 /*<br /> 聽聽聽 *瀹夎淇″彿<br /> 聽聽聽 */<br /> 聽聽聽 if(sigaction(BLOCK_SIG,&act,NULL))<br /> 聽聽聽 聽聽聽 printf("install siganl SIGRTMIN+10 error!\n");<br /> 聽聽聽聽聽聽聽 /*<br /> 聽聽聽 *璁劇疆鏂扮殑灞忚斀淇″彿闆嗭紝闃誨 SIGRTMIN+10 淇″彿錛?br /> 聽聽聽 */<br /> 聽聽聽 sigemptyset(&new_mask);<br /> 聽聽聽 sigaddset(&new_mask,BLOCK_SIG);<br /> 聽聽聽 if(sigprocmask(SIG_BLOCK,&new_mask,&old_mask))<br /> 聽聽聽 聽聽聽 printf("block signal SIGRTMIN+10 error!\n");<br /><br /> 聽聽聽 sleep(30);//絳夊緟淇″彿SIGRTMIN+10鍞ら啋錛屼絾鍥犱負涓婇潰璁劇疆浜嗘淇″彿闃誨錛屽洜姝ゆ澶勪笉鑳戒粠鐫$湢涓敜閱掕繘紼?br /><br /> 聽聽聽 printf("\nNow begin to get pending mask and unblock SIGRTMIN_10\n");<br /> 聽聽聽 sigpending(&pending_mask);聽聽 //鑾峰緱褰撳墠宸蹭紶閫佸埌榪涚▼錛屽嵈琚樆濉炵殑鎵鏈変俊鍙?br /> 聽聽聽 if(sigismember(&pending_mask,BLOCK_SIG))<br /> 聽聽聽 聽聽聽 printf("\nsignal SIGRTMIN+10 is pending!\n");<br /> 聽聽聽 /*<br /> 聽聽聽聽 *鎭㈠鍘熸潵鐨勪俊鍙峰睆钄介泦,姝ゅ墠琚樆濉炵殑淇″彿瑙﹀彂<br /> 聽聽聽聽 */<br /> 聽聽聽 sigprocmask(SIG_SETMASK,&old_mask,NULL);<br /> 聽聽聽 printf("\nsignal unblocked!\n");<br /><br /> 聽聽聽 /*<br /> 聽聽聽 *榪涚▼榪涘叆鐫$湢錛岀洿鍒版湁淇″彿鍞ら啋榪涚▼錛屾垨鏃墮棿鍒幫紒<br /> 聽聽聽 */<br /> 聽聽聽 sleep(30);<br /> 聽聽聽 <br /> 聽聽聽 exit(0);<br /> }<br /> 聽聽聽 <br /> 聽聽聽聽 閰嶅悎涓婄瘒涓粙緇嶇殑淇″彿鍙戦佸皬紼嬪簭錛屼綘鍙互嫻嬭瘯涓涓嬬▼搴忕殑鎵ц緇撴灉錛?img src ="http://m.shnenglu.com/mydriverc/aggbug/29237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/mydriverc/" target="_blank">鏃呴?/a> 2007-08-02 23:19 <a href="http://m.shnenglu.com/mydriverc/articles/29237.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>linux淇″彿鏈哄埗涔媠igaction緇撴瀯浣撴祬鏋?/title><link>http://m.shnenglu.com/mydriverc/articles/29159.html</link><dc:creator>鏃呴?/dc:creator><author>鏃呴?/author><pubDate>Wed, 01 Aug 2007 16:34:00 GMT</pubDate><guid>http://m.shnenglu.com/mydriverc/articles/29159.html</guid><wfw:comment>http://m.shnenglu.com/mydriverc/comments/29159.html</wfw:comment><comments>http://m.shnenglu.com/mydriverc/articles/29159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/mydriverc/comments/commentRss/29159.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/mydriverc/services/trackbacks/29159.html</trackback:ping><description><![CDATA[聽聽聽聽 淇″彿瀹夎鍑芥暟sigaction(int signum,const struct sigaction *act,struct sigaction *oldact)鐨勭浜屼釜鍙傛暟鏄竴涓寚鍚憇igaction緇撴瀯鐨勬寚閽堬紙緇撴瀯浣撳悕縐頒笌鍑芥暟鍚嶄竴鏍鳳紝鍗冧竾鍒紕娣鋒穯浜嗭級銆傚湪緇撴瀯sigaction鐨勫疄渚嬩腑錛? 鎸囧畾浜嗗鐗瑰畾淇″彿鐨勫鐞嗭紝淇″彿鎵浼犻掔殑淇℃伅錛屼俊鍙峰鐞嗗嚱鏁版墽琛岃繃紼嬩腑搴斿睆钄芥帀鍝簺鍑芥暟絳夈傚綋鐒訛紝姝ゆ寚閽堜篃鍙互涓篘ULL錛岃繘紼嬩細浠ラ粯璁ゆ柟寮忓鐞嗕俊鍙楓備互涓? 灝辯畝鍗曚粙緇嶄竴涓媠igaction緇撴瀯浠ュ強涓鑸殑鐢ㄦ硶銆? <p>聽聽聽聽聽聽聽 瀵逛簬鍐呮牳澶存枃浠惰岃█錛宻truct sigaction 緇撴瀯浣撳畾涔夊湪kernel/include/asm/signal.h,姝ゅご鏂囦歡鍙堣kernel/include/linux/signal.h鍖呭惈銆?br /> 聽聽聽聽聽聽聽 瀵逛簬鐢ㄦ埛絀洪棿鐨勫ご鏂囦歡鑰岃█錛宻truct sigaction瀹氫箟鍦? /usr/include/bits/sigaction.h,姝ゅご鏂囦歡鍙堣/usr/include/signal.h鍖呭惈錛屾墍浠ュ簲鐢ㄧ▼搴忎腑濡傛灉鐢ㄥ埌姝? 緇撴瀯錛屽彧瑕?include <signal.h>鍗沖彲銆傛敞鎰忓唴鏍鎬腑鐨勫畾涔夊拰搴旂敤紼嬪簭涓殑瀹氫箟鏄笉涓鏍風殑錛屽唴鏍哥┖闂寸殑sigaction緇撴瀯鍙敮鎸佸嚱鏁扮被鍨嬩負 __sighandler_t鐨勪俊鍙峰鐞嗗嚱鏁幫紝涓嶈兘澶勭悊淇″彿浼犻掔殑棰濆淇℃伅銆傚叿浣撳畾涔夊涓嬶細</p><p>鈥︹?br /> /* Type of a signal handler.聽聽 */<br /> typedef void (*__sighandler_t)(int);</p><p>鈥︹?br /> #ifdef __KERNEL__<br /> struct old_sigaction {<br /> 聽聽聽聽聽聽聽聽聽 __sighandler_t sa_handler;<br /> 聽聽聽聽聽聽聽聽 old_sigset_t sa_mask;<br /> 聽聽聽聽聽聽聽聽 unsigned long sa_flags;<br /> 聽聽聽聽聽聽聽聽 void (*sa_restorer)(void);<br /> };</p><p>struct sigaction {<br /> 聽聽聽聽聽聽聽聽 __sighandler_t sa_handler;<br /> 聽聽聽聽聽聽聽 unsigned long sa_flags;<br /> 聽聽聽聽聽聽聽 void (*sa_restorer)(void);<br /> 聽聽聽聽聽聽聽 sigset_t sa_mask;聽聽 /* mask last for extensibility */<br /> };</p><p>struct k_sigaction {<br /> 聽聽聽聽聽聽聽 struct sigaction sa;<br /> };</p><p>#else<br /> /* Here we must cater to libcs that poke about in kernel headers.聽聽 */</p><p>struct sigaction {<br /> 聽聽聽聽聽聽聽聽聽 union {<br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 __sighandler_t _sa_handler;<br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 void (*_sa_sigaction)(int, struct siginfo *, void *);<br /> 聽聽聽聽聽聽聽聽聽 } _u;<br /> 聽聽聽聽聽聽聽聽聽 sigset_t sa_mask;<br /> 聽聽聽聽聽聽聽聽聽 unsigned long sa_flags;<br /> 聽聽聽聽聽聽聽聽聽 void (*sa_restorer)(void);<br /> };</p><p>#define sa_handler聽聽 _u._sa_handler<br /> #define sa_sigaction _u._sa_sigaction</p><p>#endif /* __KERNEL__ */</p><p>sa_handler鐨勫師鍨嬫槸涓涓弬鏁頒負int錛岃繑鍥炵被鍨嬩負void鐨勫嚱鏁版寚閽堛傚弬鏁板嵆涓轟俊鍙峰鹼紝鎵浠ヤ俊鍙蜂笉鑳戒紶閫掗櫎淇″彿鍊間箣澶栫殑浠諱綍淇℃伅;</p><p>sa_sigaction鐨勫師鍨嬫槸涓涓甫涓変釜鍙傛暟錛岀被鍨嬪垎鍒負int錛宻truct siginfo *錛寁oid *,榪斿洖綾誨瀷涓簐oid鐨勫嚱鏁版寚閽堛傜涓涓弬鏁頒負淇″彿鍊?絎簩涓弬鏁版槸涓涓寚鍚憇truct siginfo緇撴瀯鐨勬寚閽堬紝姝ょ粨鏋勪腑鍖呭惈淇″彿鎼哄甫鐨勬暟鎹?絎笁涓弬鏁版病鏈変嬌鐢ㄣ?/p><p>sa_mask鎸囧畾鍦ㄤ俊鍙峰鐞嗙▼搴忔墽琛岃繃紼嬩腑錛屽摢浜涗俊鍙峰簲褰撹闃誨銆傞粯璁ゅ綋鍓嶄俊鍙鋒湰韜闃誨銆?/p><p>sa_flags鍖呭惈浜嗚澶氭爣蹇椾綅錛屾瘮杈冮噸瑕佺殑涓涓槸SA_SIGINFO錛屽綋璁懼畾浜嗚鏍囧織浣嶆椂錛岃〃紺轟俊鍙烽檮甯︾殑鍙傛暟鍙互浼犻掑埌淇″彿澶勭悊鍑芥暟涓傚嵆 浣縮a_sigaction鎸囧畾淇″彿澶勭悊鍑芥暟錛屽鏋滀笉璁劇疆SA_SIGINFO錛屼俊鍙峰鐞嗗嚱鏁板悓鏍蜂笉鑳藉緱鍒頒俊鍙蜂紶閫掕繃鏉ョ殑鏁版嵁錛屽湪淇″彿澶勭悊鍑芥暟涓榪欎簺淇? 鎭殑璁塊棶閮藉皢瀵艱嚧孌甸敊璇?/p><p>sa_restorer宸茶繃鏃訛紝POSIX涓嶆敮鎸佸畠錛屼笉搴斿啀浣跨敤銆?/p><p>聽聽聽聽聽聽聽 鍥犳錛屽綋浣犵殑淇″彿闇瑕佹帴鏀墮檮鍔犱俊鎭殑鏃跺欙紝浣犲繀欏葷粰sa_sigaction璧嬩俊鍙峰鐞嗗嚱鏁版寚閽堬紝鍚屾椂榪樿緇檚a_flags璧婼A_SIGINFO,綾諱技涓嬮潰鐨勪唬鐮侊細<br /> 聽聽聽聽 #include <signal.h><br /> 聽聽聽聽 鈥︹?br /> 聽聽聽聽 void sig_handler_with_arg(int sig,siginfo_t *sig_info,void *unused){鈥︹<br /> 聽聽聽聽<br /> 聽聽聽聽 int main(int argc,char **argv)<br /> 聽聽聽聽 {<br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽 struct sigaction sig_act;<br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽 鈥︹?br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽 sigemptyset(&sig_act.sa_mask);<br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽 sig_act.sa_sigaction=sig_handler_with_arg;<br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽 sig_act.sa_flags=SA_SIGINFO;<br /> 聽聽<br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽 鈥︹?br /> 聽聽聽聽 }<br /> 聽聽聽聽聽聽聽 濡傛灉浣犵殑搴旂敤紼嬪簭鍙渶瑕佹帴鏀朵俊鍙鳳紝鑰屼笉闇瑕佹帴鏀墮澶栦俊鎭紝閭d綘闇瑕佺殑璁劇疆鐨勬槸sa_handler,鑰屼笉鏄痵a_sigaction,浣犵殑紼嬪簭鍙兘綾諱技涓嬮潰鐨勪唬鐮侊細<br /> 聽聽聽聽 #include <signal.h><br /> 聽聽聽聽 鈥︹?br /> 聽聽聽聽 void sig_handler(int sig){鈥︹<br /> 聽聽聽聽<br /> 聽聽聽聽 int main(int argc,char **argv)<br /> 聽聽聽聽 {<br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽 struct sigaction sig_act;<br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽 鈥︹?br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽 sigemptyset(&sig_act.sa_mask);<br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽 sig_act.sa_handler=sig_handler;<br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽 sig_act.sa_flags=0;<br /> 聽聽<br /> 聽聽聽聽聽聽聽聽聽聽聽聽聽聽 鈥︹?br /> 聽聽聽聽聽 }</p><p>聽聽聽聽聽 濡傛灉闇瑕佹洿璇︾粏璇存槑錛岃鍙傞槄sigaction鐨刴an鎵嬪唽銆?/p><img src ="http://m.shnenglu.com/mydriverc/aggbug/29159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/mydriverc/" target="_blank">鏃呴?/a> 2007-08-02 00:34 <a href="http://m.shnenglu.com/mydriverc/articles/29159.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Linux涓嬬殑淇″彿澶勭悊http://m.shnenglu.com/mydriverc/articles/29158.html鏃呴?/dc:creator>鏃呴?/author>Wed, 01 Aug 2007 16:25:00 GMThttp://m.shnenglu.com/mydriverc/articles/29158.htmlhttp://m.shnenglu.com/mydriverc/comments/29158.htmlhttp://m.shnenglu.com/mydriverc/articles/29158.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/29158.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/29158.html涓涓渶綆鍗曠殑淇″彿淇″彿澶勭悊渚嬪瓙:
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

void signal_rec(int signum, siginfo_t *info, void *myop)
{
聽printf("receive signal %d\n", signum);
聽sleep(5);聽
}

int main(int argc,char **argv)
{
聽struct sigaction act;
聽int sig,i;

聽sigemptyset(&act.sa_mask);
聽act.sa_flags = SA_SIGINFO;
聽act.sa_sigaction = signal_rec;

聽for(i=1; i<argc; i++){ //argv[0]涓鴻皟鐢ㄧ▼搴忓悕
聽聽sig = atoi(argv[i]);
聽聽if(sigaction(sig, &act, NULL) <0){
聽聽聽printf("install signal error\n");
聽聽}聽
聽}

聽while(1){
聽聽sleep(2);
聽聽printf("wait for the signal\n");
聽}
}
鐢ㄦ硶錛?br />灝嗘枃浠朵繚瀛樹負test.c錛屾墽琛宮ake test錛岀紪璇戠敓鎴恡est鏂囦歡銆?br />./test 36 39&
鍛戒護鐨勬剰鎬濇槸娉ㄥ唽淇″彿36,39銆傚懡浠ょ粨鏋滀細榪斿洖pid錛屽亣璁句負2625銆?br />閫氳繃鍙﹀涓涓粓绔悜2625榪涚▼鍙戦佷俊鍙楓備緥濡?kill -s 36 2625
鍒欐垜浠彲浠ョ湅鍒皊ignal_rec鍑芥暟琚墽琛屼簡銆?br />褰撴垜浠彂閫?0淇″彿錛屾垜浠細鍙戦佺▼搴忕粓姝簡錛岃繖鏄洜涓哄浜庡疄鏃朵俊鍙鳳紝榛樿鐨勬搷浣滄槸緇堟銆?br />鍏充簬淇″彿錛?br />聽Linux 鏀寔鐨勪俊鍙峰垎涓哄彲闈犱俊鍙峰拰涓嶅彲闈犱俊鍙楓傛澶勭殑鍙潬涓庝笉鍙潬涓嶆槸鎸囩郴緇熸槸涓嶆槸鍙潬鐨勫彲闈狅紝鑰屾槸瀵逛簬鍙潬淇℃伅鏉ヨ錛屾瘡涓嬈′俊鍙峰彂瀹為兘姣忚鍔犲埌淇″彿閾句腑錛屾墍浠ユ槸 鍙潬鐨勶紱鑰屽浜庝笉鍙潬淇″彿鏉ヨ錛屽鏋滆繘紼嬩箣鍓嶅凡緇忔帴鏀跺埌璇ヤ俊鍙鳳紝鍒欎笉浼氳鍔犲埌淇″彿閾句腑錛屽洜姝ゅ浜庢嬈″彂閫佺殑淇″彿鏉ヨ錛屽浜庤榪涚▼鏉ヨ鏄笉鐭ラ亾鐨勶紝鎵灝辨槸璇? 淇″彿涓㈠け浜嗭紝鍥犳鏄笉鍙潬鐨勩?br />聽涓嶅彲闈犱俊鍙蜂富瑕佹槸鍦ㄦ棭鏈熶俊鍙鋒満鍒朵笂鐨勪俊鍙楓備竴鑸潵璇達紝淇″彿鍊煎皬浜嶴IGRTMIN鐨勪俊鍙蜂負涓嶅彲闈犱俊鍙鳳紝涓嶅彲闈犱俊鍙峰張縐頒負闈炲疄鏃朵俊鍙楓傚彲闈犱俊鍙峰張縐頒負瀹炴椂淇″彿銆傚疄鏃朵俊鍙鋒槸SIGRTMIN鍜孲IGRTMAX闂寸殑鎵鏈変俊鍙楓?br />聽鎴戜滑鍙互閫氳繃kill -l鏌ョ湅SIGRTMIN鍜孲IGRTMAX鐨勫箋傚湪Debian緋葷粺鍜孯edhat涓婇潰錛屼竴鑸琒IGRTMIN=33,SIGRTMAX=64銆?br />聽Linux鏃㈡敮鎸佹柊鐨勪俊鍙峰畨瑁呭嚱鏁皊igation浠ュ強淇″彿鍙戦佸嚱鏁皊igqueue錛屽張鏀寔鏃╂湡鐨剆ignal淇″彿瀹夎鍑芥暟鍜宬ill淇″彿鍙戦佸嚱鏁般?br />聽淇″彿鐨勫彲闈犱笌涓嶅彲闈犲彧涓庝俊鍙峰兼湁鍏籌紝涓庝俊鍙風殑鍙戦佸拰瀹夎鍑芥暟鏃犲叧錛屼篃灝辨槸璇村湪Linux涓嬪嵆浣夸嬌鐢╯igaction鍜宻igqueue涔熶笉鍙兘灝嗕笉鍙潬淇″彿鍙樹負鍙潬淇″彿銆?br />淇″彿鍙戦佸嚱鏁頒富瑕佹湁浠ヤ笅鍑犱釜錛歬ill,raise,sigqueue,alarm,settimer,abort銆?br />淇″彿瀹夎鍑芥暟涓昏鏈塻ignal鍜宻igaction銆俿igaction涓昏鐢ㄤ簬涓巗igqueue緋葷粺璋冪敤閰嶅悎浣跨敤錛屼富瑕佺敤浜庡疄鏃朵俊鍙峰鐞嗐?br />淇″彿闆嗘搷浣滀富瑕佹湁浠ヤ笅鍑犱釜鍑芥暟錛歴igemptyset,sigfillset,sigaddset,sigdelset,sigismember銆?br />淇″彿鐨勯樆濉炵殑鏈喅涓昏鏈変互涓嬪嚑涓嚱鏁幫細sigprocmask,sigsuspend,sigpending銆?br />鏈鍚庝互涓涓涓插彛璁懼鏃剁敤鍒扮殑淇″彿澶勭悊浣滀負緇撳熬(鍦ㄤ笂嬈$殑鍒濆鍖栦覆鍙h澶囦腑宸茬粡鍑虹幇榪?錛?br />鍦ㄨ鍙栬澶囨暟鎹垨鑰呰繘琛岀綉緇滃簲鐢ㄧ殑鏃跺欙紝涓轟簡闃叉紼嬪簭榪涘叆姝婚攣錛屾垜浠渶瑕佽緗秴鏃舵搷浣滐紝鍗蟲瘮濡傛垜浠涓插彛璁懼錛屽皾璇曚竴瀹氭椂闂村悗浠嶇劧娌℃湁鍝嶅簲錛屽垯鍙兘璁懼娌℃湁姝e父宸ヤ綔銆傞偅涔堝湪瓚呮椂浠ュ悗鎴戜滑闇瑕侀鍑猴紝鍚﹀垯紼嬪簭灝遍攣浣忎簡銆?br />鎴戜滑鐜板湪浣跨敤SIGALRM淇″彿鏉ヨ繘琛岃繖涓鐞?榪欑鏂瑰紡騫朵笉鏄渶濂界殑鍔炴硶)錛?br />鎴戜滑鍋囪鏈変竴涓爣璁版槸鍚﹁秴鏃剁殑鍏ㄥ眬鍙橀噺caught_alrm錛岄粯璁や負0錛屼負1鏃跺垯琛ㄧず瓚呮椂銆?br />static volatile sig_atomic_t caught_alrm;
static void sig_alrm(int signo){//淇″彿澶勭悊鍑芥暟錛岃緗秴鏃跺叏灞鍙橀噺涓?銆?br />聽聽聽聽聽聽聽 caught_alrm = 1;
聽聽聽聽聽聽聽 return;
}
int a_function{
聽鈥︹?br />聽聽聽 if(signal(SIGALRM, sig_alrm) == SIG_ERR){
聽聽聽 聽syslog(LOG_ERR,"signal error in function:%s",__FUNCTION__);
聽聽聽聽聽聽聽 return -1;
聽聽聽 }
聽聽聽 caught_alrm = 0;
聽聽聽 alarm(expalarm);
聽聽聽 do{
聽聽聽 聽//do something
聽聽聽 聽//if the work is finished,call alarm(0) to clean the timer.
聽聽聽 }while(caught_alrm == 0);
}
娉細
1銆佹湰鏂囦負鏁寸悊浠ュ墠鐨勫伐浣滅瑪璁幫紝濡傛灉鎮ㄨ杞澆錛岃娉ㄦ剰鏉ユ簮涓哄皵闆咃紝浣滆呰澹浗銆傚鏋滄偍鏈変換浣曢棶棰樻榪庝氦嫻侊細shiguo.qin@gmail.com
2銆? 姝ゆ枃浠呬粎鏄竴鍒欑瑪璁幫紝濡傛灉鎮ㄦ鍦ㄥ鎵懼叧浜嶭inux淇″彿緙栫▼鏂歸潰鐨勮祫鏂欙紝鍙互鍙傝冮儜褰﹀叴鐨勪竴綃囨枃绔?http://www- 128.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html銆傛鏂囪緇嗘弿榪頒簡寰堝鍏充簬淇? 鍙峰鐞嗕腑鐨勭粨鏋勭瓑鍐呭錛屾槸瀛︿範淇″彿緙栫▼鐨勪竴綃囦笉閿欑殑鏁欑▼寮忔枃绔犮?/p>



]]>
鍍靛案榪涚▼鐨勪駭鐢熷拰閬垮厤http://m.shnenglu.com/mydriverc/articles/29114.html鏃呴?/dc:creator>鏃呴?/author>Tue, 31 Jul 2007 16:24:00 GMThttp://m.shnenglu.com/mydriverc/articles/29114.htmlhttp://m.shnenglu.com/mydriverc/comments/29114.htmlhttp://m.shnenglu.com/mydriverc/articles/29114.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/29114.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/29114.html浜х敓鍘熷洜錛?br /> 1.鍦ㄥ瓙榪涚▼緇堟鍚庡埌鐖惰繘紼嬭皟鐢╳ait()鍓嶇殑鏃墮棿閲岋紝瀛愯繘紼嬭縐頒負zombie銆?br /> 2.緗戠粶鍘熷洜鏈夋椂浼氬紩璧峰兊姝昏繘紼嬨?br />
瑙e喅鏂規硶錛?br /> 1.璁劇疆SIGCLD淇″彿涓篠IG_IGN錛岀郴緇熷皢涓嶄駭鐢熷兊姝昏繘紼嬨?br /> 2.鐢ㄤ袱嬈ork()錛岃屼笖浣跨揣璺熺殑瀛愯繘紼嬬洿鎺ラ鍑猴紝鏄殑瀛欏瓙榪涚▼鎴愪負瀛ゅ効榪涚▼錛屼粠鑰宨nit榪涚▼灝嗚礋璐f竻闄よ繖涓鍎胯繘紼嬨?/p>

wait鐨勫嚱鏁板師鍨嬫槸錛?/strong>
銆銆
銆銆#include /* 鎻愪緵綾誨瀷pid_t鐨勫畾涔?*/
銆銆#include
銆銆 pid_t wait(int *status)
銆銆
銆銆榪涚▼涓鏃﹁皟鐢ㄤ簡wait錛屽氨绔嬪嵆闃誨鑷繁錛岀敱wait鑷姩鍒嗘瀽鏄惁褰撳墠榪涚▼鐨勬煇涓瓙榪涚▼宸茬粡閫鍑猴紝濡傛灉璁╁畠鎵懼埌浜嗚繖鏍蜂竴涓凡緇忓彉鎴愬兊灝哥殑瀛愯繘紼嬶紝 wait灝變細鏀墮泦榪欎釜瀛愯繘紼嬬殑淇℃伅錛屽茍鎶婂畠褰誨簳閿姣佸悗榪斿洖錛涘鏋滄病鏈夋壘鍒拌繖鏍蜂竴涓瓙榪涚▼錛寃ait灝變細涓鐩撮樆濉炲湪榪欓噷錛岀洿鍒版湁涓涓嚭鐜頒負姝€?br /> 銆銆
銆銆鍙傛暟status鐢ㄦ潵淇濆瓨琚敹闆嗚繘紼嬮鍑烘椂鐨勪竴浜涚姸鎬侊紝瀹冩槸涓涓寚鍚慽nt綾誨瀷鐨勬寚閽堛備絾濡傛灉鎴戜滑瀵硅繖涓瓙榪涚▼鏄浣曟鎺夌殑姣笉鍦ㄦ剰錛屽彧鎯蟲妸榪欎釜鍍靛案榪涚▼娑堢伃鎺夛紝錛堜簨瀹炰笂緇濆ぇ澶氭暟鎯呭喌涓嬶紝鎴戜滑閮戒細榪欐牱鎯籌級錛屾垜浠氨鍙互璁懼畾榪欎釜鍙傛暟涓篘ULL錛屽氨璞′笅闈㈣繖鏍鳳細
銆銆
銆銆pid = wait(NULL);
銆銆
銆銆濡傛灉鎴愬姛錛寃ait浼氳繑鍥炶鏀墮泦鐨勫瓙榪涚▼鐨勮繘紼婭D錛屽鏋滆皟鐢ㄨ繘紼嬫病鏈夊瓙榪涚▼錛岃皟鐢ㄥ氨浼氬け璐ワ紝姝ゆ椂wait榪斿洖-1錛屽悓鏃秂rrno琚疆涓篍CHILD銆?br /> 銆

waitpid鐨勫嚱鏁板師鍨嬫槸錛?/strong>


銆銆綆浠?br /> 銆銆waitpid緋葷粺璋冪敤鍦↙inux鍑芥暟搴撲腑鐨勫師鍨嬫槸錛?br /> 銆銆
銆銆#include /* 鎻愪緵綾誨瀷pid_t鐨勫畾涔?*/
銆銆#include
銆銆pid_t waitpid(pid_t pid,int *status,int options)

浠庢湰璐ㄤ笂璁詫紝緋葷粺璋冪敤waitpid鍜寃ait鐨勪綔鐢ㄦ槸瀹屽叏鐩稿悓鐨勶紝浣唚aitpid澶氬嚭浜嗕袱涓彲鐢辯敤鎴鋒帶鍒剁殑鍙傛暟pid鍜宱ptions錛屼粠鑰屼負鎴戜滑緙栫▼鎻愪緵浜嗗彟涓縐嶆洿鐏墊椿鐨勬柟寮忋備笅闈㈡垜浠氨鏉ヨ緇嗕粙緇嶄竴涓嬭繖涓や釜鍙傛暟錛?br /> 銆銆
銆銆鈼?pid
銆銆
銆銆浠庡弬鏁扮殑鍚嶅瓧pid鍜岀被鍨媝id_t涓氨鍙互鐪嬪嚭錛岃繖閲岄渶瑕佺殑鏄竴涓繘紼婭D銆備絾褰損id鍙栦笉鍚岀殑鍊兼椂錛屽湪榪欓噷鏈変笉鍚岀殑鎰忎箟銆?br /> 銆銆
銆銆pid>0鏃訛紝鍙瓑寰呰繘紼婭D絳変簬pid鐨勫瓙榪涚▼錛屼笉綆″叾瀹冨凡緇忔湁澶氬皯瀛愯繘紼嬭繍琛岀粨鏉熼鍑轟簡錛屽彧瑕佹寚瀹氱殑瀛愯繘紼嬭繕娌℃湁緇撴潫錛寃aitpid灝變細涓鐩寸瓑涓嬪幓銆?br /> 銆銆
銆銆pid=-1鏃訛紝絳夊緟浠諱綍涓涓瓙榪涚▼閫鍑猴紝娌℃湁浠諱綍闄愬埗錛屾鏃秝aitpid鍜寃ait鐨勪綔鐢ㄤ竴妯′竴鏍楓?br /> 銆銆
銆銆pid=0鏃訛紝絳夊緟鍚屼竴涓繘紼嬬粍涓殑浠諱綍瀛愯繘紼嬶紝濡傛灉瀛愯繘紼嬪凡緇忓姞鍏ヤ簡鍒殑榪涚▼緇勶紝waitpid涓嶄細瀵瑰畠鍋氫換浣曠悊鐫?br /> 銆銆
銆銆pid<-1鏃訛紝絳夊緟涓涓寚瀹氳繘紼嬬粍涓殑浠諱綍瀛愯繘紼嬶紝榪欎釜榪涚▼緇勭殑ID絳変簬pid鐨勭粷瀵瑰箋?br />
銆銆鈼?options

銆銆options鎻愪緵浜嗕竴浜涢澶栫殑閫夐」鏉ユ帶鍒秝aitpid錛岀洰鍓嶅湪Linux涓彧鏀寔WNOHANG鍜學UNTRACED涓や釜閫夐」錛岃繖鏄袱涓父鏁幫紝鍙互鐢?|"榪愮畻絎︽妸瀹冧滑榪炴帴璧鋒潵浣跨敤錛屾瘮濡傦細


銆銆ret=waitpid(-1,NULL,WNOHANG | WUNTRACED);


銆銆濡傛灉鎴戜滑涓嶆兂浣跨敤瀹冧滑錛屼篃鍙互鎶妎ptions璁句負0錛屽錛?/p>


銆銆ret=waitpid(-1,NULL,0);
銆銆
銆銆濡傛灉浣跨敤浜哤NOHANG鍙傛暟璋冪敤waitpid錛屽嵆浣挎病鏈夊瓙榪涚▼閫鍑猴紝瀹冧篃浼氱珛鍗寵繑鍥烇紝涓嶄細鍍弚ait閭f牱姘歌繙絳変笅鍘匯?br /> 銆銆
銆銆鑰學UNTRACED鍙傛暟錛岀敱浜庢秹鍙婂埌涓浜涜窡韙皟璇曟柟闈㈢殑鐭ヨ瘑錛屽姞涔嬫瀬灝戠敤鍒幫紝榪欓噷灝變笉澶氳垂絎斿ⅷ浜嗭紝鏈夊叴瓚g殑璇昏呭彲浠ヨ嚜琛屾煡闃呯浉鍏蟲潗鏂欍?br /> 銆銆
銆銆鐪嬪埌榪欓噷錛岃仾鏄庣殑璇昏呭彲鑳藉凡緇忕湅鍑虹鍊簡--wait涓嶅氨鏄粡榪囧寘瑁呯殑waitpid鍚楋紵娌¢敊錛屽療鐪?lt;鍐呮牳婧愮爜鐩綍>/include/unistd.h鏂囦歡349-352琛屽氨浼氬彂鐜頒互涓嬬▼搴忔錛?br /> 銆銆
銆銆static inline pid_t wait(int * wait_stat)
銆銆{
銆銆 return waitpid(-1,wait_stat,0);
銆銆}
銆銆

銆銆榪斿洖鍊煎拰閿欒
銆銆
銆銆waitpid鐨勮繑鍥炲兼瘮wait紼嶅井澶嶆潅涓浜涳紝涓鍏辨湁3縐嶆儏鍐碉細
銆銆
銆銆鈼?褰撴甯歌繑鍥炵殑鏃跺欙紝waitpid榪斿洖鏀墮泦鍒扮殑瀛愯繘紼嬬殑榪涚▼ID錛?br /> 銆銆
銆銆鈼?濡傛灉璁劇疆浜嗛夐」WNOHANG錛岃岃皟鐢ㄤ腑waitpid鍙戠幇娌℃湁宸查鍑虹殑瀛愯繘紼嬪彲鏀墮泦錛屽垯榪斿洖0錛?br /> 銆銆
銆銆鈼?濡傛灉璋冪敤涓嚭閿欙紝鍒欒繑鍥?1錛岃繖鏃秂rrno浼氳璁劇疆鎴愮浉搴旂殑鍊間互鎸囩ず閿欒鎵鍦紱
銆銆
銆銆褰損id鎵鎸囩ず鐨勫瓙榪涚▼涓嶅瓨鍦紝鎴栨榪涚▼瀛樺湪錛屼絾涓嶆槸璋冪敤榪涚▼鐨勫瓙榪涚▼錛寃aitpid灝變細鍑洪敊榪斿洖錛岃繖鏃秂rrno琚緗負ECHILD

鍏跺畠錛?/font>

璋冪敤 wait錛唚aitpid 鏉ュ鐞嗙粓姝㈢殑瀛愯繘紼嬶細

pid_t wait(int* statloc);
pid_t waitpid(pid_t pid,
int*statloc, int options);

涓や釜鍑芥暟閮借繑鍥炰袱涓鹼細鍑芥暟鐨勮繑鍥炲煎拰緇堟鐨勫瓙榪涚▼ID錛岃屽瓙榪涚▼緇堟鐨勭姸鎬佸垯鏄氳繃statloc鎸囬拡榪斿洖鐨勩?br />

聽聽聽聽 wait錛唚aitpid 鐨勫尯鍒槸鏄捐屾槗瑙佺殑錛寃ait絳夊緟絎竴涓粓姝㈢殑瀛愯繘紼嬶紝鑰寃aitpid鍒欏彲浠ユ寚瀹氱瓑寰呯壒瀹氱殑瀛愯繘紼嬨傝繖鏍風殑鍖哄埆鍙兘浼氬湪涓嬮潰榪欑鎯呭喌鏃惰〃鐜板緱鏇村姞鏄庢樉錛?br /> 聽聽聽聽聽聽聽聽 褰撳悓鏃舵湁5涓鎴瘋繛涓婃湇鍔″櫒錛屼篃灝辨槸璇存湁浜斾釜瀛愯繘紼嬪垎鍒搴斾簡5涓鎴鳳紝姝ゆ椂錛屼簲涓鎴峰嚑涔庡湪鍚屾椂璇鋒眰緇堟錛岃繖鏍蜂竴鏉ワ紝鍑犱箮鍚屾椂錛屼簲涓狥IN鍙戝悜鏈嶅姟鍣紝 鍚屾牱鐨勶紝浜斾釜SIGCHLD淇″彿鍒拌揪鏈嶅姟鍣紝鐒惰岋紝UNIX鐨勪俊鍙峰線寰鏄笉浼氭帓闃熺殑錛屾樉鐒惰繖鏍蜂竴鏉ワ紝淇″彿澶勭悊鍑芥暟灝嗗彧浼氭墽琛屼竴嬈★紝孌嬬暀鍓╀綑鍥涗釜瀛愯繘紼嬩綔涓? 鍍靛案榪涚▼椹葷暀鍦ㄥ唴鏍哥┖闂淬傛鏃訛紝姝g‘鐨勮В鍐沖姙娉曟槸鍒╃敤waitpid(-1, &stat, WNOHANG)闃叉鐣欎笅鍍靛案榪涚▼銆傚叾涓殑pid涓猴紞1琛ㄦ槑絳夊緟絎竴涓粓姝㈢殑瀛愯繘紼嬶紝鑰學NOHANG閫夋嫨欏歸氱煡鍐呮牳鍦ㄦ病鏈夊凡緇堟榪涚▼欏規椂涓嶈闃誨銆?

wait錛唚aitpid 鍖哄埆

聽聽聽聽聽聽 waitpid鎻愪緵浜唚ait鍑芥暟涓嶈兘瀹炵幇鐨?涓姛鑳?

  • waitpid絳夊緟鐗瑰畾鐨勫瓙榪涚▼, 鑰寃ait鍒欒繑鍥炰換涓緇堟鐘舵佺殑瀛愯繘紼?
  • waitpid鎻愪緵浜嗕竴涓獁ait鐨勯潪闃誨鐗堟湰;
  • waitpid鏀寔浣滀笟鎺у埗(浠UNTRACED閫夐」).
鐢ㄤ簬媯鏌ait鍜寃aitpid涓や釜鍑芥暟榪斿洖緇堟鐘舵佺殑瀹?

榪欎袱涓嚱鏁拌繑鍥炵殑瀛愯繘紼嬬姸鎬侀兘淇濆瓨鍦╯tatloc鎸囬拡涓? 鐢ㄤ互涓?涓畯鍙互媯鏌ヨ鐘舵?

  • WIFEXITED(status): 鑻ヤ負姝e父緇堟, 鍒欎負鐪? 姝ゆ椂鍙墽琛?/li>
    • WEXITSTATUS(status): 鍙栧瓙榪涚▼浼犻佺粰exit鎴朹exit鍙傛暟鐨勪綆8浣?
  • WIFSIGNALED(status): 鑻ヤ負寮傚父緇堟, 鍒欎負鐪? 姝ゆ椂鍙墽琛?/li>
    • WTERMSIG(status):聽聽 鍙栦嬌瀛愯繘紼嬬粓姝㈢殑淇″彿緙栧彿.
  • WIFSTOPPED(status): 鑻ヤ負褰撳墠鏆傚仠瀛愯繘紼? 鍒欎負鐪? 姝ゆ椂鍙墽琛?/li>
WSTOPSIG(status): 鍙栦嬌瀛愯繘紼嬫殏鍋滅殑淇″彿緙栧彿

]]>
WIFEXITED鍜學EXITSTATUShttp://m.shnenglu.com/mydriverc/articles/29113.html鏃呴?/dc:creator>鏃呴?/author>Tue, 31 Jul 2007 16:17:00 GMThttp://m.shnenglu.com/mydriverc/articles/29113.htmlhttp://m.shnenglu.com/mydriverc/comments/29113.htmlhttp://m.shnenglu.com/mydriverc/articles/29113.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/29113.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/29113.html媯楠?/nobr>瀛愯繘紼嬮鍑虹殑姝e父榪樻槸闈炴甯稿拰榪斿洖鍊肩殑瀹忋?/p>
wait(&status)
if(WIFEXITED(status))
{
聽 printf("%d",WEXITSTATUS(status));
}


]]>
Linux瀹夊叏鏀葷暐鈥斿兊灝歌繘紼?/title><link>http://m.shnenglu.com/mydriverc/articles/29111.html</link><dc:creator>鏃呴?/dc:creator><author>鏃呴?/author><pubDate>Tue, 31 Jul 2007 16:07:00 GMT</pubDate><guid>http://m.shnenglu.com/mydriverc/articles/29111.html</guid><wfw:comment>http://m.shnenglu.com/mydriverc/comments/29111.html</wfw:comment><comments>http://m.shnenglu.com/mydriverc/articles/29111.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/mydriverc/comments/commentRss/29111.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/mydriverc/services/trackbacks/29111.html</trackback:ping><description><![CDATA[ <font id="zoom" class="f14"> <br />聽聽聽 濂戒簡錛屾垜鐜板湪璁╁ぇ瀹跺氨鐪嬬湅鎴戜滑紲炵鍍靛案榪涚▼鏄粈涔堟牱瀛愮殑錛熶笅闈㈡垜鏉ョ敤c鍐欏嚭鐖惰繘紼嬪緩绔嬪瓙榪涚▼鐨勪唬鐮侊細<br />/**********************************瀛愯繘紼嬫甯稿嚭鐢熷拰鐏骸榪囩▼****************************************/<br />#include <sys/types.h><br />#include <unistd.h><br />main()<br />{<br />聽聽聽 <br />聽聽聽 fork(); /*寮濮嬪垱寤轟竴涓瓙榪涚▼*/</font> <p> <font id="zoom" class="f14">聽聽聽 if(fork()>0) /* 濡傛灉鏄埗榪涚▼ */</font> </p> <p> <font id="zoom" class="f14">聽聽聽聽聽聽 wait(NULL);聽聽聽 /* 鏀墮泦鍍靛案榪涚▼ */<br />}</font> </p> <p> <font id="zoom" class="f14">聽聽聽 澶у鐪嬪畬浠g爜鍚庯紝灝變細瑙夊緱榪欎釜浠g爜姝f槸鎴戝垰鎵嶈鐨勮繘紼嬩竴鐢熸槸鎬庝箞鏍風殑錛岃繘紼嬫鍚庯紝涓瀹氳涓轟粬鏀跺案錛屽惁鍒欎粬灝變細緙栫▼鍍靛案榪涚▼銆備笅闈㈠氨璁╂垜浠潵鐪嬬湅鏈兘鎶婃鍘葷殑榪涚▼鏀跺案浼氬彉鎴愪粈涔堟牱瀛愶紵</font> </p> <p> <font id="zoom" class="f14">/**********************************鍍靛案榪涚▼******zombie.c*****************************************************/</font> </p> <p> <font id="zoom" class="f14">#include <sys/types.h><br />#include <unistd.h><br />main()<br />{</font> </p> <p> <font id="zoom" class="f14">聽聽聽聽聽聽 fork(); /*寮濮嬪垱寤轟竴涓瓙榪涚▼*/</font> </p> <p> <font id="zoom" class="f14">聽聽聽 if(fork>0) /* 濡傛灉鏄埗榪涚▼ */</font> </p> <p> <font id="zoom" class="f14">聽聽聽聽聽聽 sleep(30);聽聽聽 /* 浼戠湢30縐掞紝榪欐鏃墮棿閲岋紝鐖惰繘紼嬩粈涔堜篃騫蹭笉浜?*/<br />聽聽聽聽聽聽 wait(NULL);聽聽聽 /* 鏀惰搗鍍靛案榪涚▼ */</font> </p> <p> <font id="zoom" class="f14">聽聽 /*鍥犱負鐖惰繘紼嬫浜嗭紝瀛愯繘紼嬩篃寰椾竴璧烽櫔钁紝閭d箞鎴戜滑灝辮鐖惰繘紼嬬潯鐪?0縐掞紝鍦ㄨ繖30縐掑唴鎴戜滑灝卞彲浠ョ湅鍒板兊灝歌繘紼嬨?br />聽聽聽聽 30縐掕繃鍚庯紝鐖惰繘紼嬮啋鏉ュ悗灝卞緱姝伙紝鎵浠ュ埌閭f椂瀛愯繘紼嬩篃灝辨鍘匯?/<br />}</font> </p> <p> <font id="zoom" class="f14"> <br />/********************************************************************************************/</font> </p> <p> <font id="zoom" class="f14">聽聽聽 涓轟簡璁╁ぇ瀹舵洿娓呮鐨勭湅鍒板兊灝歌繘紼嬫垜浠妸榪欎釜鍍靛案榪涚▼浠g爜緙栬瘧錛岀劧鍚庢墽琛岋紝<br />#gcc -o zombie zombie.c</font> </p> <p> <font id="zoom" class="f14">緙栬瘧鎴愬姛鍚庢垜浠紑濮嬫墽琛岃繖涓▼搴忓洜涓轟唬鐮侀噷鐨剆leep(30)鏄鐖惰繘紼嬬潯鐪?0縐掞紝濡傛灉鎴戜滑鍦ㄥ墠鍙版墽琛屾垜浠繖涓▼搴忥紝閭d箞灝變笉鑳芥墽琛屽叾浠杝hell鍛戒護浜嗭紝鎵浠ヨ繖閲屾垜浠湪鎵ц鐨勫懡浠ゅ悗闈㈠姞涓涓?amp; 浠h〃鍚庡彴榪愯鐨勬剰鎬濄?br />#./zomber &</font> </p> <p> <font id="zoom" class="f14">濂戒簡錛屾垜浠湪30縐掑唴鎵ц鏌ョ湅榪涚▼鍛戒護鏉ョ湅鐪嬫垜浠繖涓獄ombie榪涚▼鏄粈涔堟牱鐨勶紵<br />#ps -aux |grep zombie</font> </p> <p> <font id="zoom" class="f14">榪欎釜鍛戒護鏄樉紺烘湁鍏硓ombie鐨勬墍鏈変俊鎭傚叿浣撴搷浣滆鐪嬪浘錛?錛夈?/font> </p> <p> <font id="zoom" class="f14">聽聽聽 鐪嬪埌榪欓噷鍚庯紝鑱槑鐨勬湅鍙嬩細闂紝鏃㈢劧瀛愯繘紼嬫槸鐢辯埗榪涚▼鍒涢犲嚭鏉ョ殑錛岄偅涔堝鏋滀竴涓埗紼嬪簭鎵ц瀹岄鍑哄悗錛屽瓙榪涚▼涓嶇鏄笉鏄兊灝歌繘紼嬩篃鐩存帴灝遍鍑轟簡錛屽洜涓虹埗榪涚▼姝? 浜嗗槢銆傞偅涔堣繖涔熶笉浼氶犳垚澶氬ぇ鍗卞鍟婏紵濡傛灉澶у榪欎箞璁や負閭e彲灝遍敊浜嗭紝褰撴垜浠垰鎵嶇敤ps鍛戒護瑙傚療榪涚▼鐨勬墽琛岀姸鎬佹椂錛岀湅鍒版煇浜涜繘紼嬬殑鐘舵佹爮涓篸efunct錛岃繖 灝辨槸鎵璋撶殑鈥滃兊灝糕濊繘紼嬨傗滃兊灝糕濊繘紼嬫槸涓涓棭宸叉浜$殑榪涚▼錛屼絾鍦ㄨ繘紼嬭〃錛坧rocesss table錛変腑浠嶅崰浜嗕竴涓綅緗紙slot錛夈傜敱浜庤繘紼嬭〃鐨勫閲忔槸鏈夐檺鐨勶紝鎵浠ワ紝defunct榪涚▼涓嶄粎鍗犵敤緋葷粺鐨勫唴瀛樿祫婧愶紝褰卞搷緋葷粺鐨勬ц兘錛岃屼笖濡傛灉鍏舵暟 鐩お澶氾紝榪樹細瀵艱嚧緋葷粺鐦棯錛屽叿浣撹鐪嬩笅闈㈢殑浠g爜錛?br />/***********************************鏃犻檺鍒涘緩瀛愯繘紼?*******************************************/</font> </p> <p> <font id="zoom" class="f14">#include <sys/types.h><br />#include <unistd.h><br />main()<br />{<br />聽聽聽聽聽聽 for (;;)聽 /*鍒朵綔涓涓寰幆*/<br />聽聽聽聽聽聽 <br />聽聽聽聽聽聽聽聽 fork(); /*寮濮嬪垱寤轟竴涓瓙榪涚▼*/</font> </p> <p> <font id="zoom" class="f14">}</font> </p> <p> <font id="zoom" class="f14"> <br />/********************************************************************************************/</font> </p> <p> <font id="zoom" class="f14">鎳侰璇█鐨勬湅鍙嬩細鐭ラ亾for(;;)鏄竴涓寰幆銆傞偅涔堣繖浠呮湁2琛屼唬鐮佺殑紼嬪簭灝卞彲浠ユ妸浣犵殑linux鐬棿姝繪満錛屽洜涓轟粬鐨勪綔鐢ㄦ槸鏃犻檺鍒剁殑鍦ㄥ唴瀛橀噷澧炲姞鏂扮殑瀛愯繘紼嬶紝涓涓郴緇熸牴鎹唴瀛樼殑瀹歸噺浼氬垎閰嶈繘紼嬬殑鏈澶ч檺鍒訛紝涓鏃﹀悓鏃惰繍琛岀殑榪涚▼鏁拌秴絎﹀悎錛岄偅涔堜綘鐨勬満鍣ㄥ繀鐒朵細姝繪満銆?br />聽聽 鎴戣繖閲屽垎鍒敤浜?涓敤鎴瘋繘琛屾祴璇曡繃錛屼竴涓槸鏅氭潈闄愮殑鐢ㄦ埛錛屼竴涓槸Root鐢ㄦ埛錛屾祴璇曠粨鏋滄槸鈥滀換浣曠敤鎴峰彧瑕佹墽琛岃繖涓▼搴忛兘浼氳鏈哄櫒姝繪帀鈥濄傚師鍥犲氨鏄粯璁ょ殑 Linux緋葷粺娌℃湁瀵規櫘閫氱敤鎴風殑浣跨敤鏈澶ц繘紼嬭繘琛岄檺鍒躲傛墍浠ヨ繖鏍峰緋葷粺閫犳垚寰堝ぇ涓涓▉鑳侊紝閭d箞鎴戜滑濡備綍閬垮厤鏅氱敤鎴烽潪娉曟墽琛岃繃澶氳祫婧愭垨榪涚▼瀵艱嚧緋葷粺鎷栨錛? 鎵浠ユ垜浠殑緇欓櫎浜哛oot鐨勭敤鎴峰仛涓涓嬮檺鍒躲?/font> </p> <p> <font id="zoom" class="f14"> <br />瀵規櫘閫氱敤鎴瘋繘琛岄檺鍒訛細</font> </p> <p> <font id="zoom" class="f14">絎?姝ワ細棣栧厛榪涘埌Linux緇堢鐢╲i緙栬緫/etc/security /limits.conf鏂囦歡錛屽湪閲岄潰鍔犲叆錛?</font> </p> <p> <font id="zoom" class="f14">銆銆* hard core 0 <br />銆銆* hard rss 5000 <br />銆銆* hard nproc 20 <br />聽 <br />聽 榪欓噷鐨? 浠h〃闄や簡Root鐨勬墍鏈夌敤鎴鳳紝(* hard core 0) 鏄姝ore files鈥渃ore 0鈥濓紝(* hard rss 5000) 鏄檺鍒跺唴瀛樹嬌鐢ㄤ負5MB鈥渞ss聽 5000鈥? (* hard nproc 20 )鏄檺鍒惰繘紼嬫暟涓衡渘proc 50鈥溿傚ぇ瀹跺彲浠ユ牴鎹嚜宸辯郴緇熷唴瀛樺ぇ灝忚繘琛屽悎鐞嗛厤緗?/font> </p> <p> <font id="zoom" class="f14">絎?姝ワ細鐢╲i緙栬緫/etc/pam.d/login鏂囦歡錛岀劧鍚庡姞涓婁笅闈㈣繖琛屼繚瀛橀鍑哄氨鍙互銆?</font> </p> <p> <font id="zoom" class="f14">銆銆session required /lib/security/pam_limits.so </font> </p> <p> <font id="zoom" class="f14">聽聽聽 濂戒簡錛岀幇鍦ㄦ垜浠凡緇忓鏅氱敤鎴烽檺鍒朵簡榪涚▼鍜屽唴瀛樹嬌鐢ㄦ瀬闄愶紝淇敼瀹岄厤緗互鍚庡ぇ瀹跺彲浠ョ敤Root鍜屾櫘閫氱敤鎴峰垎鍒繘琛屾祴璇曪紝緇撴灉褰撶劧鏄櫘閫氱敤鎴鋒墽琛屽畬鎴戜滑鍒氭墠鍋氱殑紼嬪簭涓嶄細姝繪満浜嗐?/font> </p> <p> <font id="zoom" class="f14">聽聽聽 涓涓郴緇熺殑瀹夊叏鎬т笉鍙栧喅涓庢墦涓嶆墦琛ヤ竵錛岃櫧鐒舵墦琛ヤ竵寰堥噸瑕侊紝浣嗘槸瀵圭郴緇熷仛鍑虹浉搴旂殑閰嶇疆涔熸槸鐩稿綋閲嶈鐨勩?br /></font> </p> 銆<img src ="http://m.shnenglu.com/mydriverc/aggbug/29111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/mydriverc/" target="_blank">鏃呴?/a> 2007-08-01 00:07 <a href="http://m.shnenglu.com/mydriverc/articles/29111.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍏充簬linux 鍍靛案榪涚▼http://m.shnenglu.com/mydriverc/articles/29109.html鏃呴?/dc:creator>鏃呴?/author>Tue, 31 Jul 2007 16:05:00 GMThttp://m.shnenglu.com/mydriverc/articles/29109.htmlhttp://m.shnenglu.com/mydriverc/comments/29109.htmlhttp://m.shnenglu.com/mydriverc/articles/29109.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/29109.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/29109.html銆銆鍍靛案榪涚▼鏄寚鐨勭埗榪涚▼宸茬粡閫鍑?鑰岃榪涚▼dead涔嬪悗娌℃湁榪涚▼鎺ュ彈,灝辨垚涓哄兊灝歌繘紼?(zombie)榪涚▼

銆銆鎬庢牱浜х敓鍍靛案榪涚▼鐨勶細

銆銆涓涓繘紼嬪湪璋冪敤exit鍛戒護緇撴潫鑷繁鐨勭敓鍛界殑鏃跺欙紝鍏跺疄瀹冨茍娌℃湁鐪熸鐨勮閿姣侊紝鑰屾槸鐣欎笅涓涓О涓哄兊灝歌繘紼嬶紙Zombie錛夌殑鏁版嵁緇撴瀯錛堢郴緇熻皟鐢?exit錛屽畠鐨勪綔鐢ㄦ槸浣胯繘紼嬮鍑猴紝浣嗕篃浠呬粎闄愪簬灝嗕竴涓甯哥殑榪涚▼鍙樻垚涓涓兊灝歌繘紼嬶紝騫朵笉鑳藉皢鍏跺畬鍏ㄩ攢姣侊級銆?br />
銆 銆鍦↙inux榪涚▼鐨勭姸鎬佷腑錛屽兊灝歌繘紼嬫槸闈炲父鐗規畩鐨勪竴縐嶏紝瀹冨凡緇忔斁寮冧簡鍑犱箮鎵鏈夊唴瀛樼┖闂達紝娌℃湁浠諱綍鍙墽琛屼唬鐮侊紝涔熶笉鑳借璋冨害錛屼粎浠呭湪榪涚▼鍒楄〃涓繚鐣欎竴涓綅 緗紝璁拌澆璇ヨ繘紼嬬殑閫鍑虹姸鎬佺瓑淇℃伅渚涘叾浠栬繘紼嬫敹闆嗭紝闄ゆ涔嬪錛屽兊灝歌繘紼嬩笉鍐嶅崰鏈変換浣曞唴瀛樼┖闂淬傚畠闇瑕佸畠鐨勭埗榪涚▼鏉ヤ負瀹冩敹灝革紝濡傛灉浠栫殑鐖惰繘紼嬫病瀹夎 SIGCHLD淇″彿澶勭悊鍑芥暟璋冪敤wait鎴杦aitpid()絳夊緟瀛愯繘紼嬬粨鏉燂紝鍙堟病鏈夋樉寮忓拷鐣ヨ淇″彿錛岄偅涔堝畠灝變竴鐩翠繚鎸佸兊灝哥姸鎬侊紝濡傛灉榪欐椂鐖惰繘紼嬬粨鏉熶簡錛? 閭d箞init榪涚▼鑷姩浼氭帴鎵嬭繖涓瓙榪涚▼錛屼負瀹冩敹灝革紝瀹冭繕鏄兘琚竻闄ょ殑銆備絾鏄鏋滃鏋滅埗榪涚▼鏄竴涓驚鐜紝涓嶄細緇撴潫錛岄偅涔堝瓙榪涚▼灝變細涓鐩翠繚鎸佸兊灝哥姸鎬侊紝榪欏氨鏄? 涓轟粈涔堢郴緇熶腑鏈夋椂浼氭湁寰堝鐨勫兊灝歌繘紼嬨?

銆銆鎬庝箞鏌ョ湅鍍靛案榪涚▼錛?

銆銆鍒╃敤鍛戒護ps錛屽彲浠ョ湅鍒版湁鏍囪涓篫鐨勮繘紼嬪氨鏄兊灝歌繘紼嬨?

銆銆鎬庢牱鏉ユ竻闄ゅ兊灝歌繘紼嬶細

銆 銆1.鏀瑰啓鐖惰繘紼嬶紝鍦ㄥ瓙榪涚▼姝誨悗瑕佷負瀹冩敹灝搞傚叿浣撳仛娉曟槸鎺ョSIGCHLD淇″彿銆傚瓙榪涚▼姝誨悗錛屼細鍙戦丼IGCHLD淇″彿緇欑埗榪涚▼錛岀埗榪涚▼鏀跺埌姝や俊鍙峰悗錛屾墽 琛寃aitpid()鍑芥暟涓哄瓙榪涚▼鏀跺案銆傝繖鏄熀浜庤繖鏍風殑鍘熺悊錛氬氨綆楃埗榪涚▼娌℃湁璋冪敤wait錛屽唴鏍鎬篃浼氬悜瀹冨彂閫丼IGCHLD娑堟伅錛屽敖綆″鐨勯粯璁ゅ鐞嗘槸蹇? 鐣ワ紝濡傛灉鎯沖搷搴旇繖涓秷鎭紝鍙互璁劇疆涓涓鐞嗗嚱鏁般?

銆銆2.鎶婄埗榪涚▼鏉鎺夈傜埗榪涚▼姝誨悗錛屽兊灝歌繘紼嬫垚涓?瀛ゅ効榪涚▼"錛岃繃緇х粰1鍙瘋繘紼媔nit錛宨nit濮嬬粓浼氳礋璐f竻鐞嗗兊灝歌繘紼嬶紟瀹冧駭鐢熺殑鎵鏈夊兊灝歌繘紼嬩篃璺熺潃娑堝け銆?/div>

錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛?/p>

鍦╢ork ()/execve()榪囩▼涓紝鍋囪瀛愯繘紼嬬粨鏉熸椂鐖惰繘紼嬩粛瀛樺湪錛岃岀埗榪涚▼fork()涔嬪墠鏃㈡病瀹夎SIGCHLD淇″彿澶勭悊鍑芥暟璋冪敤waitpid()絳夊緟 瀛愯繘紼嬬粨鏉燂紝鍙堟病鏈夋樉寮忓拷鐣ヨ淇″彿錛屽垯瀛愯繘紼嬫垚涓哄兊灝歌繘紼嬶紝鏃犳硶姝e父緇撴潫錛屾鏃跺嵆浣挎槸root韜喚kill -9涔熶笉鑳芥潃姝誨兊灝歌繘紼嬨傝ˉ鏁戝姙娉曟槸鏉姝誨兊灝歌繘紼嬬殑鐖惰繘紼?鍍靛案榪涚▼鐨勭埗榪涚▼蹇呯劧瀛樺湪)錛屽兊灝歌繘紼嬫垚涓?瀛ゅ効榪涚▼"錛岃繃緇х粰1鍙瘋繘紼媔nit錛宨nit濮? 緇堜細璐熻矗娓呯悊鍍靛案榪涚▼銆偮犅?br />
===========================================
鍦↙inux涓彲浠ョ敤
ps auwx聽聽
鍙戠幇鍍靛案榪涚▼

a all w/ tty, including other users 鎵鏈夌獥鍙e拰緇堢錛屽寘鎷叾浠栫敤鎴風殑榪涚▼
u user-oriented 闈㈠悜鐢ㄦ埛(鐢ㄦ埛鍙嬪ソ)
-w,w wide output 瀹芥牸寮忚緭鍑?
x processes w/o controlling ttys聽聽

鍦ㄥ兊灝歌繘紼嬪悗闈?浼氭爣娉?




ps axf聽聽
鐪嬭繘紼嬫爲錛屼互鏍戝艦鏂瑰紡鐜板疄榪涚▼鍒楄〃


ps axm聽聽
浼氭妸綰跨▼鍒楀嚭鏉?鍦╨inux涓嬭繘紼嬪拰綰跨▼鏄粺涓鐨勶紝鏄交閲忕駭榪涚▼鐨勪袱縐嶆柟寮忋?

ps axu聽聽
鏄劇ず榪涚▼鐨勮緇嗙姸鎬?
===========================================
killall
kill -15
kill -9
涓鑸兘涓嶈兘鏉鎺?defunct榪涚▼
鐢ㄤ簡kill -15,kill -9浠ュ悗 涔嬪悗鍙嶈屼細澶氬嚭鏇村鐨勫兊灝歌繘紼?

kill -kill pid
fuser -k pid聽聽


鍙互鑰冭檻鏉姝諱粬鐨刾arent process錛?
kill -9 浠栫殑parent process
===========================================
涓涓凡緇忕粓姝?浣嗘槸鍏剁埗榪涚▼灝氭湭瀵瑰叾榪涜鍠勫悗澶勭悊錛堣幏鍙栫粓姝㈠瓙榪涚▼鐨勬湁鍏充俊鎭侀噴鏀懼畠浠嶅崰鐢ㄧ殑璧勬簮錛夌殑榪涚▼琚О涓哄兊姝昏繘紼?Zombie Process)銆?

閬垮厤zombie鐨勬柟娉曪細
1)鍦⊿VR4涓紝濡傛灉璋冪敤signal鎴杝igset灝哠IGCHLD鐨勯厤緗緗負蹇界暐,鍒欎笉浼氫駭鐢熷兊姝誨瓙榪涚▼銆傚彟澶?浣跨敤SVR4鐗堢殑sigaction,鍒欏彲璁劇疆SA_NOCLDWAIT鏍囧織浠ラ伩鍏嶅瓙榪涚▼鍍墊銆?

Linux涓篃鍙嬌鐢ㄨ繖涓紝鍦ㄤ竴涓▼搴忕殑寮濮嬭皟鐢ㄨ繖涓嚱鏁?

signal(SIGCHLD,SIG_IGN);聽聽
聽聽




2)璋冪敤fork涓ゆ銆傜▼搴? - 5 瀹炵幇浜嗚繖涓鐐廣?
3)鐢╳aitpid絳夊緟瀛愯繘紼嬭繑鍥?聽聽

===========================================

zombie榪涚▼鏄兊姝昏繘紼嬨傞槻姝㈠畠鐨勫姙娉曪紝涓鏄敤wait,waitpid涔嬬被鐨勫嚱鏁拌幏寰?

榪涚▼鐨勭粓姝㈢姸鎬侊紝浠ラ噴鏀捐祫婧愩傚彟涓涓槸fork涓ゆ聽聽
===========================================
defunct榪涚▼鍙槸鍦╬rocess table閲岃繕鏈変竴涓褰曪紝鍏朵粬鐨勮祫婧愭病鏈夊崰鐢紝闄ら潪浣犵殑緋葷粺鐨刾rocess涓暟鐨勯檺鍒跺凡緇忓揩瓚呰繃浜嗭紝zombie榪涚▼涓嶄細鏈夋洿澶氱殑鍧忓銆?
鍙兘鍞竴鐨勬柟娉曞氨鏄痳eboot緋葷粺鍙互娑堥櫎zombie榪涚▼銆?
===========================================


浠諱綍紼嬪簭閮芥湁鍍靛案鐘舵侊紝瀹冨崰鐢ㄤ竴鐐瑰唴瀛樿祫婧?涔熷氨鏄繘紼嬭〃閲岃繕鏈変竴涓褰?錛屼粎浠呮槸琛ㄨ薄鑰屽凡涓嶅繀瀹蟲曘傚鏋滅▼搴忔湁闂鏈夋満浼氶亣瑙侊紝瑙e喅澶ф壒閲忓兊灝哥畝鍗曟湁鏁堢殑鍔炴硶鏄噸璧楓俴ill鏄棤浠諱綍鏁堟灉鐨?


fork涓巣ombie/defunct"

鍦║nix 涓嬬殑涓浜涜繘紼嬬殑榪愪綔鏂瑰紡銆傚綋涓涓繘紼嬫浜℃椂,瀹冨茍涓嶆槸瀹屽叏鐨勬秷澶變簡銆傝繘紼嬬粓姝?瀹冧笉鍐嶈繍琛?浣嗘槸榪樻湁涓浜涙畫鐣欑殑灝忎笢瑗跨瓑寰呯埗榪涚▼鏀跺洖銆傝繖浜涙畫鐣欑殑涓滆タ鍖呮嫭 瀛愯繘紼嬬殑榪斿洖鍊煎拰鍏朵粬鐨勪竴浜涗笢瑗褲傚綋鐖惰繘紼?fork() 涓涓瓙榪涚▼鍚?瀹冨繀欏葷敤 wait() 鎴栬?waitpid() 絳夊緟瀛愯繘紼嬮鍑恒傛鏄繖涓?wait() 鍔ㄤ綔鏉ヨ瀛愯繘紼嬬殑孌嬬暀鐗╂秷澶便?

鑷劧鐨勶紝鍦ㄤ笂榪拌鍒欎箣澶栨湁涓緥澶?鐖惰繘紼嬪彲浠ュ拷鐣?SIGCLD 杞腑鏂屼笉蹇呰 wait()銆傚彲浠ヨ繖鏍峰仛鍒?鍦ㄦ敮鎸佸畠鐨勭郴緇熶笂,姣斿Linux):

main()
{
signal(SIGCLD, SIG_IGN); /* now I don't have to wait()! */
.
.
fork();
fork();
fork(); /* Rabbits, rabbits, rabbits! */

锝?

鐜板湪錛屽瓙榪涚▼姝諱骸鏃剁埗榪涚▼娌℃湁 wait()錛岄氬父鐢?ps 鍙互鐪嬪埌瀹冭鏄劇ず涓衡溾濄傚畠灝嗘案榪滀繚鎸佽繖鏍?鐩村埌 鐖惰繘紼?wait()錛屾垨鑰呮寜浠ヤ笅鏂規硶澶勭悊銆?

榪? 閲屾槸浣犲繀欏葷煡閬撶殑鍙︿竴涓鍒?褰撶埗榪涚▼鍦ㄥ畠wait()瀛愯繘紼嬩箣鍓嶆浜′簡(鍋囧畾瀹冩病鏈夊拷鐣?SIGCLD),瀛愯繘紼嬪皢鎶?init(pid 1)榪涚▼浣滀負瀹冪殑鐖惰繘紼嬨傚鏋滃瓙榪涚▼宸ヤ綔寰楀緢濂藉茍鑳藉鎺у埗錛岃繖騫朵笉鏄棶棰樸備絾濡傛灉瀛愯繘紼嬪凡緇忔槸 defunct錛屾垜浠氨鏈変簡涓鐐瑰皬楹葷儲銆傜湅錛屽師鍏堢殑鐖惰繘紼嬩笉鍙兘鍐?wait()錛屽洜涓哄畠宸茬粡娑堜骸浜嗐傝繖鏍鳳紝init 鎬庝箞鐭ラ亾 wait() 榪欎簺 zombie 榪涚▼銆?

絳旀錛氫笉鍙鏂欑殑銆傚湪涓浜涚郴緇熶笂錛宨nit鍛ㄦ湡鎬х殑鐮村潖鎺夊畠鎵鏈夌殑defunct榪涚▼銆傚湪鍙﹀涓浜涚郴緇熶腑,瀹冨共 鑴嗘嫆緇濇垚涓轟換浣昫efunct榪涚▼鐨勭埗榪涚▼錛岃屾槸椹笂姣佺伃瀹冧滑銆傚鏋滀綘浣跨敤涓婅堪緋葷粺鐨勪竴縐?鍙互鍐欎竴涓畝鍗曠殑寰幆錛岀敤灞炰簬init鐨刣efunct榪涚▼濉? 婊¤繘紼嬭〃銆傝繖澶ф涓嶄細浠や綘鐨勭郴緇熺鐞嗗憳寰堥珮鍏村惂?

浣犵殑浠誨姟錛氱‘瀹氫綘鐨勭埗榪涚▼涓嶈蹇界暐 SIGCLD錛屼篃涓嶈 wait() 瀹? fork() 鐨勬墍鏈夎繘紼嬨備笉榪囷紝浣犱篃鏈繀 瑕?鎬繪槸榪欐牱鍋氾紙姣斿錛屼綘瑕佽搗涓涓?daemon 鎴栨槸鍒殑浠涔堜笢瑗匡級,浣嗘槸浣犲繀欏誨皬蹇冪紪紼嬶紝濡傛灉浣犳槸涓涓? fork() 鐨勬柊鎵嬨傚彟澶栵紝涔熶笉瑕佸湪蹇冪悊涓婃湁浠諱綍鏉熺細銆?

鎬葷粨錛?
瀛愯繘紼嬫垚涓?defunct 鐩村埌鐖惰繘紼?wait()錛岄櫎闈炵埗榪涚▼蹇界暐浜?SIGCLD 銆?
鏇磋繘涓姝ワ紝鐖惰繘紼嬫病鏈?wait() 灝辨秷浜★紙浠嶅亣璁劇埗榪涚▼娌℃湁蹇界暐 SIGCLD 錛夌殑瀛愯繘紼嬶紙媧誨姩鐨勬垨鑰?defunct錛夋垚涓?init 鐨勫瓙榪涚▼錛宨nit 鐢ㄩ噸鎵嬫硶澶勭悊瀹冧滑銆?/b>

錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳



]]>
_exit鍜宔xit鐨勫尯鍒?/title><link>http://m.shnenglu.com/mydriverc/articles/29106.html</link><dc:creator>鏃呴?/dc:creator><author>鏃呴?/author><pubDate>Tue, 31 Jul 2007 15:34:00 GMT</pubDate><guid>http://m.shnenglu.com/mydriverc/articles/29106.html</guid><wfw:comment>http://m.shnenglu.com/mydriverc/comments/29106.html</wfw:comment><comments>http://m.shnenglu.com/mydriverc/articles/29106.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/mydriverc/comments/commentRss/29106.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/mydriverc/services/trackbacks/29106.html</trackback:ping><description><![CDATA[ <span id="hvzpftn" class="tpc_content"> exit()鍦ㄧ粨鏉熻皟鐢ㄥ畠鐨勮繘紼嬩箣鍓嶏紝瑕佽繘琛屽涓嬫楠わ細<br />1.cleanup()錛?br />2.鍦╝texit()娉ㄥ唽鐨勫嚱鏁幫紱<br />鏈鍚庤皟鐢╛exit()鍑芥暟銆傘傘?br /><br />鈥榚xit()鈥欎笌鈥榑exit()鈥欐湁涓嶅皯鍖哄埆鍦ㄤ嬌鐢ㄢ榝ork()鈥欙紝鐗瑰埆鏄榲fork()鈥欐椂鍙樺緱寰?<br />紿佸嚭銆?<br /><br />鈥榚xit()鈥欎笌鈥榑exit()鈥欑殑鍩烘湰鍖哄埆鍦ㄤ簬鍓嶄竴涓皟鐢ㄥ疄鏂戒笌璋冪敤搴撻噷鐢ㄦ埛鐘舵佺粨鏋?<br />(user-mode constructs)鏈夊叧鐨勬竻闄ゅ伐浣?clean-up)錛岃屼笖璋冪敤鐢ㄦ埛鑷畾涔夌殑娓呴櫎紼嬪簭 <br />(璇戣呮敞錛氳嚜瀹氫箟娓呴櫎紼嬪簭鐢盿texit鍑芥暟瀹氫箟錛屽彲瀹氫箟澶氭錛屽茍浠ュ掑簭鎵ц)錛岀浉瀵?<br />搴旓紝鍚庝竴涓嚱鏁板彧涓鴻繘紼嬪疄鏂藉唴鏍告竻闄ゅ伐浣溿?<br /><br />鍦ㄧ敱鈥榝ork()鈥欏垱寤虹殑瀛愯繘紼嬪垎鏀噷錛屾甯告儏鍐典笅浣跨敤鈥榚xit()鈥欐槸涓嶆紜殑錛岃繖鏄?<br />鍥犱負浣跨敤瀹冧細瀵艱嚧鏍囧噯杈撳叆杈撳嚭(璇戣呮敞錛歴tdio: Standard Input Output)鐨勭紦鍐插尯琚?<br />娓呯┖涓ゆ錛岃屼笖涓存椂鏂囦歡琚嚭涔庢剰鏂欑殑鍒犻櫎(璇戣呮敞錛氫復鏃舵枃浠剁敱tmpfile鍑芥暟鍒涘緩 <br />鍦ㄧ郴緇熶復鏃剁洰褰曚笅錛屾枃浠跺悕鐢辯郴緇熼殢鏈虹敓鎴?銆傚湪C++紼嬪簭涓儏鍐典細鏇寸碂錛屽洜涓洪潤 <br />鎬佺洰鏍?static objects)鐨勬瀽鏋勫嚱鏁?destructors)鍙互琚敊璇湴鎵ц銆?榪樻湁涓浜涚壒孌婃儏 <br />鍐碉紝姣斿瀹堟姢紼嬪簭錛屽畠浠殑*鐖惰繘紼?闇瑕佽皟鐢ㄢ榑exit()鈥欒屼笉鏄瓙榪涚▼錛涢傜敤浜庣粷 <br />澶у鏁版儏鍐電殑鍩烘湰瑙勫垯鏄紝鈥榚xit()鈥欏湪姣忎竴嬈¤繘鍏モ榤ain鈥欏嚱鏁板悗鍙皟鐢ㄤ竴嬈°? <br /><br />鍦ㄧ敱鈥榲fork()鈥欏垱寤虹殑瀛愯繘紼嬪垎鏀噷錛屸榚xit()鈥欑殑浣跨敤灝嗘洿鍔犲嵄闄╋紝鍥犱負瀹冨皢褰卞搷 <br />*鐖?榪涚▼鐨勭姸鎬?br /><br /><br /><br />_exit緇堟璋冪敤榪涚▼錛屼絾涓嶅叧闂枃浠訛紝涓嶆竻闄よ緭鍑虹紦瀛橈紝涔熶笉璋冪敤鍑哄彛鍑芥暟銆?br />exit鍑芥暟灝嗙粓姝㈣皟鐢ㄨ繘紼嬨傚湪閫鍑虹▼搴忎箣鍓嶏紝鎵鏈夋枃浠跺叧闂紝緙撳啿杈撳嚭鍐呭<br />灝嗗埛鏂板畾涔夛紝騫惰皟鐢ㄦ墍鏈夊凡鍒鋒柊鐨勨滃嚭鍙e嚱鏁扳濓紙鐢盿texit瀹氫箟錛夈?/span> <img src ="http://m.shnenglu.com/mydriverc/aggbug/29106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/mydriverc/" target="_blank">鏃呴?/a> 2007-07-31 23:34 <a href="http://m.shnenglu.com/mydriverc/articles/29106.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>eixt _exit鍖哄埆http://m.shnenglu.com/mydriverc/articles/29105.html鏃呴?/dc:creator>鏃呴?/author>Tue, 31 Jul 2007 15:32:00 GMThttp://m.shnenglu.com/mydriverc/articles/29105.htmlhttp://m.shnenglu.com/mydriverc/comments/29105.htmlhttp://m.shnenglu.com/mydriverc/articles/29105.html#Feedback0http://m.shnenglu.com/mydriverc/comments/commentRss/29105.htmlhttp://m.shnenglu.com/mydriverc/services/trackbacks/29105.htmlint main()
{
聽printf("output begin\n");
聽printf("content in buffer");
聽_exit(0);
}
浠呰緭鍑?output begin

#include <unistd.h>
int main()
{
聽printf("output begin\n");
聽printf("content in buffer\n");
聽_exit(0);
}
杈撳嚭
output begin
content in buffer

浣跨敤exit(0)
閮芥槸杈撳嚭
output begin
content in buffer

鍦╨inux縐?鏍囧噯杈撳叆鍜岃緭鍑洪兘鏄綔涓烘枃浠舵潵澶勭悊鐨?浠栦滑鍦ㄦ墦寮浠ュ悗涔熼兘鏈夎嚜宸辯殑緙撳啿鍖?br />
緙撳啿鍖?-鍙湁杈懼埌涓瀹氱殑鏁伴噺,鎴栬呴亣鍒扮壒孌婄殑絎﹀彿,渚嬪鎹㈣絎?鏂囦歡緇撴潫絎? 灝嗙紦鍐插尯鐨勫唴瀹逛竴嬈″啓鍏ユ枃浠?/b>


]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              亚洲丰满在线| 国产一区免费视频| 一区二区高清视频在线观看| 欧美成人免费在线| 欧美黄色成人网| 亚洲国产成人午夜在线一区 | 欧美a级片一区| 免费黄网站欧美| 美女免费视频一区| 欧美黄色免费网站| 欧美婷婷在线| 国产欧美日韩视频一区二区| 国产欧美一区二区三区在线老狼| 国产综合香蕉五月婷在线| 一区在线视频观看| 亚洲精品久久嫩草网站秘色| 一本色道久久综合亚洲精品按摩 | 免费不卡欧美自拍视频| 亚洲丁香婷深爱综合| 一本久道久久综合婷婷鲸鱼| 亚洲综合精品自拍| 麻豆成人小视频| 国产精品家教| 亚洲国产综合在线| 性刺激综合网| 亚洲高清视频一区二区| 亚洲欧美精品在线观看| 欧美成人高清视频| 国产美女精品人人做人人爽| 亚洲国产精品高清久久久| 亚洲视频第一页| 亚洲第一区中文99精品| 性欧美18~19sex高清播放| 欧美精品久久久久久久久老牛影院| 国产精品爽爽ⅴa在线观看| 亚洲人成在线影院| 欧美网站在线观看| 亚洲精品永久免费精品| 99视频一区| 久久久青草婷婷精品综合日韩| 亚洲电影av在线| 亚洲欧美日韩国产中文在线| 欧美成年人视频| 狠狠色丁香婷婷综合久久片| 亚洲欧美999| 亚洲国产日韩在线| 久久久精品网| 国产一区二区三区在线观看免费视频| 一区二区三区 在线观看视| 久久一区二区三区四区| 亚洲一区二区不卡免费| 欧美视频在线观看免费网址| 亚洲国产视频一区| 欧美ed2k| 久久久久久久97| 乱码第一页成人| 在线观看视频日韩| 久久亚洲欧美国产精品乐播| 午夜精品一区二区三区在线视 | 午夜精品久久久久久久久| 欧美日本免费一区二区三区| 亚洲激情偷拍| 欧美顶级艳妇交换群宴| 久久国内精品视频| 国产一区二区无遮挡| 欧美资源在线观看| 午夜国产欧美理论在线播放| 国产精品扒开腿做爽爽爽视频| 一本色道**综合亚洲精品蜜桃冫 | 亚洲精品久久视频| 亚洲啪啪91| 欧美另类videos死尸| 一本色道久久综合狠狠躁篇的优点| 欧美黄免费看| 欧美日韩一区精品| 亚洲欧洲av一区二区三区久久| 一区二区三区|亚洲午夜| 欧美视频在线一区二区三区| 亚洲欧美成人综合| 校园激情久久| 影音先锋欧美精品| 免费观看在线综合色| 久久欧美肥婆一二区| 亚洲国产日韩一级| 一本色道久久加勒比精品| 国产欧美一区二区三区久久人妖| 久久全国免费视频| 榴莲视频成人在线观看| 亚洲欧美一区二区激情| 美日韩在线观看| 日韩午夜激情av| 亚洲一区二区三区免费视频 | 欧美与黑人午夜性猛交久久久| 国产亚洲福利社区一区| 欧美国产日韩一区| 国产精品久久午夜夜伦鲁鲁| 久久精品亚洲乱码伦伦中文| 麻豆av一区二区三区久久| 亚洲小说春色综合另类电影| 午夜久久福利| 亚洲精品护士| 亚洲免费在线观看| 亚洲欧洲精品一区二区三区 | 欧美影院成人| 亚洲精品欧美| 亚洲欧美一区二区在线观看| 亚洲电影第1页| 午夜精品久久久久久久久| 日韩午夜在线观看视频| 欧美一级在线播放| 一本大道久久a久久精二百| 欧美一区国产一区| 亚洲欧美日韩一区| 欧美日本韩国在线| 蜜臀av性久久久久蜜臀aⅴ| 国产精品二区在线观看| 欧美激情一区二区三区全黄| 国产欧美日韩在线观看| 亚洲免费av电影| 亚洲国产精品悠悠久久琪琪| 亚洲网友自拍| 在线亚洲伦理| 欧美精品videossex性护士| 乱人伦精品视频在线观看| 国产精品乱子乱xxxx| 亚洲午夜精品视频| 欧美国产一区在线| 亚洲电影av在线| 亚洲国产第一| 久久久久久成人| 久久综合九色综合久99| 国产欧美三级| 亚洲男人av电影| 午夜精品久久久久久99热软件| 欧美极品一区| 亚洲激情另类| 一本色道**综合亚洲精品蜜桃冫| 欧美高清你懂得| 亚洲国产美女精品久久久久∴| 在线电影欧美日韩一区二区私密| 午夜视频一区二区| 欧美怡红院视频一区二区三区| 国产精品盗摄久久久| 一区二区高清在线| 亚洲一区在线观看视频| 国产精品对白刺激久久久| 这里只有精品视频| 午夜精品久久久久久久99水蜜桃| 久久av最新网址| 一区二区三区偷拍| 亚洲一区二区三区四区在线观看| 欧美国产日产韩国视频| 亚洲欧洲日韩在线| 一本色道久久综合亚洲精品按摩 | 欧美有码视频| 国产色爱av资源综合区| 亚洲精品久久久久久久久久久久久| 91久久精品国产91久久性色| 老色鬼精品视频在线观看播放| 欧美国产1区2区| 99在线|亚洲一区二区| 欧美亚洲第一页| 欧美一区二区三区免费在线看| 久久久久久久一区二区三区| 影音先锋久久久| 欧美日韩免费观看一区| 亚洲欧美制服另类日韩| 欧美激情综合色| 亚洲欧美中文日韩v在线观看| 精品91在线| 欧美激情一二三区| 午夜电影亚洲| 亚洲欧洲日本国产| 久久乐国产精品| 这里只有精品视频在线| 国产一区二区成人| 欧美日韩视频专区在线播放| 欧美在线视频一区二区| 亚洲三级电影全部在线观看高清| 欧美在线网站| 日韩一区二区久久| 伊人狠狠色丁香综合尤物| 欧美手机在线视频| 久久综合免费视频影院| 亚洲调教视频在线观看| 亚洲盗摄视频| 久久精品亚洲一区二区三区浴池| 日韩午夜激情| 亚洲日韩视频| 永久91嫩草亚洲精品人人| 欧美日韩专区在线| 欧美黄色影院| 老司机久久99久久精品播放免费| 日韩一区二区福利| 欧美国产综合视频| 久久激情婷婷| 午夜久久久久| 亚洲天堂av综合网| 亚洲国产精品专区久久| 在线精品国产成人综合|