锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产亚洲一区二区三区,亚洲欧美成aⅴ人在线观看,久久久久久香蕉网 http://www.shnenglu.com/jht/category/1651.htmlzh-cn Fri, 23 May 2008 19:07:47 GMT Fri, 23 May 2008 19:07:47 GMT 60 杞澆-sprintf浣犵煡閬撳灝? http://www.shnenglu.com/jht/archive/2007/11/12/36444.html瀛f旦 瀛f旦 Mon, 12 Nov 2007 07:28:00 GMT http://www.shnenglu.com/jht/archive/2007/11/12/36444.html http://www.shnenglu.com/jht/comments/36444.html http://www.shnenglu.com/jht/archive/2007/11/12/36444.html#Feedback 0 http://www.shnenglu.com/jht/comments/commentRss/36444.html http://www.shnenglu.com/jht/services/trackbacks/36444.html 閫夎嚜銆奀SDN 紺懼尯鐢靛瓙鏉傚織鈥斺擟/C++鏉傚織銆?/font>
鍦ㄥ皢鍚勭綾誨瀷鐨勬暟鎹瀯閫犳垚瀛楃涓叉椂錛宻printf 鐨勫己澶у姛鑳藉緢灝戜細璁╀綘澶辨湜銆傜敱浜巗printf 璺焢rintf 鍦ㄧ敤娉曚笂鍑犱箮涓鏍鳳紝鍙槸鎵撳嵃鐨勭洰鐨勫湴涓嶅悓鑰屽凡錛屽墠鑰呮墦鍗板埌瀛楃涓蹭腑錛屽悗鑰呭垯鐩存帴鍦ㄥ懡浠よ涓婅緭鍑恒傝繖涔熷鑷磗printf 姣攑rintf 鏈夌敤寰楀銆?
sprintf 鏄釜鍙樺弬鍑芥暟錛屽畾涔夊涓嬶細int sprintf( char *buffer, const char *format [, argument] ... ); 闄や簡鍓嶄袱涓弬鏁扮被鍨嬪浐瀹氬錛屽悗闈㈠彲浠ユ帴浠繪剰澶氫釜鍙傛暟銆傝屽畠鐨勭簿鍗庯紝鏄劇劧灝卞湪絎簩涓弬鏁幫細 鏍煎紡鍖栧瓧絎︿覆涓娿?
printf 鍜宻printf
閮戒嬌鐢ㄦ牸寮忓寲瀛楃涓叉潵鎸囧畾涓茬殑鏍煎紡錛屽湪鏍煎紡涓插唴閮ㄤ嬌鐢ㄤ竴浜涗互“%”寮澶寸殑鏍煎紡璇存槑絎︼紙format
specifications錛夋潵鍗犳嵁涓涓綅緗紝鍦ㄥ悗杈圭殑鍙樺弬鍒楄〃涓彁渚涚浉搴旂殑鍙橀噺錛屾渶緇堝嚱鏁板氨浼氱敤鐩稿簲浣嶇疆鐨勫彉閲忔潵鏇夸唬閭d釜璇存槑絎︼紝浜х敓涓涓皟鐢ㄨ呮兂瑕?
鐨勫瓧絎︿覆銆?br>
鏍煎紡鍖栨暟瀛楀瓧絎︿覆 sprintf 鏈甯歌鐨勫簲鐢ㄤ箣涓鑾繃浜庢妸鏁存暟鎵撳嵃鍒板瓧絎︿覆涓紝鎵浠ワ紝spritnf 鍦ㄥぇ澶氭暟鍦哄悎鍙互鏇夸唬 itoa銆?
濡傦細//鎶婃暣鏁?23 鎵撳嵃鎴愪竴涓瓧絎︿覆淇濆瓨鍦╯ 涓?br>sprintf(s, "%d", 123); //浜х敓"123" 鍙互鎸囧畾瀹藉害錛屼笉瓚崇殑宸﹁竟琛ョ┖鏍鹼細 sprintf(s, "%8d%8d", 123, 4567); //浜х敓錛? 123 4567" 褰撶劧涔熷彲浠ュ乏瀵歸綈錛?br>sprintf(s, "%-8d%8d", 123, 4567); //浜х敓錛?123 4567" 涔熷彲浠ユ寜鐓?6 榪涘埗鎵撳嵃錛?br>sprintf(s, "%8x", 4567); //灝忓啓16 榪涘埗錛屽搴﹀崰8 涓綅緗紝鍙沖榻?br>sprintf(s, "%-8X", 4568); //澶у啓16 榪涘埗錛屽搴﹀崰8 涓綅緗紝宸﹀榻?/font>
榪欐牱錛屼竴涓暣鏁扮殑16 榪涘埗瀛楃涓插氨寰堝鏄撳緱鍒幫紝浣嗘垜浠湪鎵撳嵃16 榪涘埗鍐呭鏃訛紝閫氬父鎯寵涓縐嶅乏杈硅ˉ0 鐨勭瓑瀹芥牸寮忥紝閭h鎬庝箞鍋氬憿錛熷緢綆鍗曪紝鍦ㄨ〃紺哄搴︾殑鏁板瓧鍓嶉潰鍔犱釜0 灝卞彲浠ヤ簡銆?br>sprintf(s, "%08X", 4567); //浜х敓錛?000011D7" 涓婇潰浠?#8221;%d”榪涜鐨?0 榪涘埗鎵撳嵃鍚屾牱涔熷彲浠ヤ嬌鐢ㄨ繖縐嶅乏杈硅ˉ0 鐨勬柟寮忋?/font>
榪欓噷瑕佹敞鎰忎竴涓鍙鋒墿灞曠殑闂錛氭瘮濡傦紝鍋囧鎴戜滑鎯蟲墦鍗扮煭鏁存暟錛坰hort錛?1 鐨勫唴瀛?6 榪涘埗琛ㄧず褰㈠紡錛屽湪Win32 騫沖彴涓婏紝涓涓猻hort 鍨嬪崰2 涓瓧鑺傦紝鎵浠ユ垜浠嚜鐒跺笇鏈涚敤4 涓?6 榪涘埗鏁板瓧鏉ユ墦鍗板畠錛?br>short si = -1; sprintf(s, "%04X", si); 浜?
鐢?#8220;FFFFFFFF”錛屾庝箞鍥炰簨錛熷洜涓簊pritnf
鏄釜鍙樺弬鍑芥暟錛岄櫎浜嗗墠闈袱涓弬鏁頒箣澶栵紝鍚庨潰鐨勫弬鏁伴兘涓嶆槸綾誨瀷瀹夊叏鐨勶紝鍑芥暟鏇存病鏈夊姙娉曚粎浠呴氳繃涓涓?#8220;%X”灝辮兘寰楃煡褰撳垵鍑芥暟璋冪敤鍓嶅弬鏁板帇鏍堟椂琚帇榪涙潵鐨勫埌搴?
鏄釜4 瀛楄妭鐨勬暣鏁拌繕鏄釜2 瀛楄妭鐨勭煭鏁存暟錛屾墍浠ラ噰鍙栦簡緇熶竴4 瀛楄妭鐨勫鐞嗘柟寮忥紝瀵艱嚧鍙傛暟鍘嬫爤鏃跺仛浜嗙鍙鋒墿灞曪紝鎵╁睍鎴愪簡32 浣嶇殑鏁存暟-1錛屾墦鍗版椂4
涓綅緗笉澶熶簡錛屽氨鎶?2 浣嶆暣鏁?1 鐨? 浣?6 榪涘埗閮芥墦鍗板嚭鏉ヤ簡銆?
濡傛灉浣犳兂鐪媠i 鐨勬湰鏉ラ潰鐩紝閭d箞灝卞簲璇ヨ緙栬瘧鍣ㄥ仛0 鎵╁睍鑰屼笉鏄鍙鋒墿灞曪紙鎵╁睍鏃朵簩榪涘埗宸﹁竟琛? 鑰屼笉鏄ˉ絎﹀彿浣嶏級錛?br>sprintf(s, "%04X", (unsigned short)si); 灝卞彲浠ヤ簡銆傛垨鑰咃細 unsigned short si = -1; sprintf(s, "%04X", si);
sprintf 鍜宲rintf 榪樺彲浠ユ寜8 榪涘埗鎵撳嵃鏁存暟瀛楃涓詫紝浣跨敤”%o”銆傛敞鎰? 榪涘埗鍜?6 榪涘埗閮戒笉浼氭墦 鍗板嚭璐熸暟錛岄兘鏄棤絎﹀彿鐨勶紝瀹為檯涓婁篃灝辨槸鍙橀噺鐨勫唴閮ㄧ紪鐮佺殑鐩存帴鐨?6 榪涘埗鎴? 榪涘埗琛ㄧず銆?br>
鎺у埗嫻偣鏁版墦鍗版牸寮?br> 嫻偣鏁扮殑鎵撳嵃鍜屾牸寮忔帶鍒舵槸sprintf 鐨勫張涓澶у父鐢ㄥ姛鑳斤紝嫻偣鏁頒嬌鐢ㄦ牸寮忕”%f”鎺у埗錛岄粯璁や繚 鐣欏皬鏁扮偣鍚? 浣嶆暟瀛楋紝姣斿錛?br>sprintf(s, "%f", 3.1415926); //浜х敓"3.141593" 浣嗘湁鏃舵垜浠笇鏈涜嚜宸辨帶鍒舵墦鍗扮殑瀹藉害鍜屽皬鏁頒綅鏁幫紝榪欐椂灝卞簲璇ヤ嬌鐢細”%m.nf”鏍煎紡錛屽叾涓璵 琛?br>紺烘墦鍗扮殑瀹藉害錛宯 琛ㄧず灝忔暟鐐瑰悗鐨勪綅鏁般傛瘮濡傦細 sprintf(s, "%10.3f", 3.1415626); //浜х敓錛? 3.142" sprintf(s, "%-10.3f", 3.1415626); //浜х敓錛?3.142 " sprintf(s, "%.3f", 3.1415626); //涓嶆寚瀹氭誨搴︼紝浜х敓錛?3.142"
娉ㄦ剰涓涓棶棰橈紝浣犵寽 int i = 100; sprintf(s, "%.2f", i); 浼氭墦鍑轟粈涔堜笢涓滄潵錛?#8220;100.00”錛熷鍚楋紵鑷繁璇曡瘯灝辯煡閬撲簡錛屽悓鏃朵篃璇曡瘯涓嬮潰榪欎釜錛?br>sprintf(s, "%.2f", (double)i); 絎?
涓涓墦鍑烘潵鐨勮偗瀹氫笉鏄紜粨鏋滐紝鍘熷洜璺熷墠闈㈡彁鍒扮殑涓鏍鳳紝鍙傛暟鍘嬫爤鏃惰皟鐢ㄨ呭茍涓嶇煡閬撹窡i鐩稿搴旂殑鏍煎紡鎺у埗絎︽槸涓?#8221;%f”銆傝屽嚱鏁版墽琛屾椂鍑芥暟鏈韓鍒欏茍涓嶇煡閬撳綋
騫磋鍘嬪叆鏍堥噷鐨勬槸涓暣鏁幫紝浜庢槸鍙滅殑淇濆瓨鏁存暟i 鐨勯偅4
涓瓧鑺傚氨琚笉鐢卞垎璇村湴寮鴻浣滀負嫻偣鏁版牸寮忔潵瑙i噴浜嗭紝鏁翠釜涔卞浜嗐備笉榪囷紝濡傛灉鏈変漢鏈夊叴瓚d嬌鐢ㄦ墜宸ョ紪鐮佷竴涓誕鐐規暟錛岄偅涔堝掑彲浠ヤ嬌鐢ㄨ繖縐嶆柟娉曟潵媯楠屼竴涓嬩綘鎵嬪伐緙?
鎺掔殑緇撴灉鏄惁姝g‘銆?br>
瀛楃/Ascii 鐮佸鐓?br> 鎴戜滑鐭ラ亾錛屽湪C/C++璇█涓紝char 涔熸槸涓縐嶆櫘閫氱殑scalable 綾誨瀷錛岄櫎浜嗗瓧闀夸箣澶栵紝瀹冧笌short錛?br>int錛宭ong 榪欎簺綾誨瀷娌℃湁鏈川鍖哄埆錛屽彧涓嶈繃琚ぇ瀹朵範鎯敤鏉ヨ〃紺哄瓧絎﹀拰瀛楃涓茶屽凡銆傦紙鎴栬褰撳勾璇ユ妸 榪?
涓被鍨嬪彨鍋?#8220;byte”錛岀劧鍚庣幇鍦ㄥ氨鍙互鏍規嵁瀹為檯鎯呭喌錛屼嬌鐢╞yte 鎴杝hort 鏉ユ妸char 閫氳繃typedef
瀹氫箟鍑烘潵錛岃繖鏍鋒洿鍚堥備簺錛変簬鏄紝浣跨敤”%d”鎴栬?#8221;%x”鎵撳嵃涓涓瓧絎︼紝渚胯兘寰楀嚭瀹冪殑10 榪涘埗鎴?6 榪涘埗鐨凙SCII
鐮侊紱鍙嶈繃鏉ワ紝浣跨敤”%c”鎵撳嵃涓涓暣鏁幫紝渚垮彲浠ョ湅鍒板畠鎵瀵瑰簲鐨凙SCII 瀛楃銆備互涓嬬▼搴忔鎶婃墍鏈夊彲瑙佸瓧絎︾殑ASCII
鐮佸鐓ц〃鎵撳嵃鍒板睆騫曚笂錛堣繖閲岄噰鐢╬rintf錛屾敞鎰?#8221;#”涓?#8221;%X”鍚堢敤鏃惰嚜鍔ㄤ負16 榪涘埗鏁板鍔?#8221;0X”鍓嶇紑錛夛細 for(int i = 32; i < 127; i++) { printf("[ %c ]: %3d 0x%#04X ", i, i, i); }
榪炴帴瀛楃涓?/strong> sprintf 鐨勬牸寮忔帶鍒朵覆涓棦鐒跺彲浠ユ彃鍏ュ悇縐嶄笢瑗匡紝騫舵渶緇堟妸瀹冧滑“榪炴垚涓涓?#8221;錛岃嚜鐒朵篃灝辮兘澶熻繛 鎺ュ瓧絎︿覆錛屼粠鑰屽湪璁稿鍦哄悎鍙互鏇夸唬strcat錛屼絾sprintf 鑳藉涓嬈¤繛鎺ュ涓瓧絎︿覆錛堣嚜鐒朵篃鍙互鍚屾椂 鍦ㄥ畠浠腑闂存彃鍏ュ埆鐨勫唴瀹癸紝鎬諱箣闈炲父鐏墊椿錛夈傛瘮濡傦細 char* who = "I"; char* whom = "CSDN"; sprintf(s, "%s love %s.", who, whom); //浜х敓錛?I love CSDN. " strcat
鍙兘榪炴帴瀛楃涓詫紙涓孌典互’’緇撳熬鐨勫瓧絎︽暟緇勬垨鍙仛瀛楃緙撳啿錛宯ull-terminated-string錛夛紝浣嗘湁鏃舵垜浠湁涓ゆ瀛楃緙撳啿鍖猴紝浠栦滑騫朵笉鏄互
’’緇撳熬銆傛瘮濡傝澶氫粠絎笁鏂瑰簱鍑芥暟涓繑鍥炵殑瀛楃鏁扮粍錛屼粠紜歡鎴栬呯綉緇滀紶杈撲腑璇昏繘鏉ョ殑瀛楃嫻侊紝瀹冧滑鏈繀姣忎竴孌靛瓧絎﹀簭鍒楀悗闈㈤兘鏈変釜鐩稿簲鐨?#8217;’鏉ョ粨灝俱傚鏋滅洿鎺?
榪炴帴錛屼笉綆℃槸sprintf 榪樻槸strcat 鑲畾浼氬鑷撮潪娉曞唴瀛樻搷浣滐紝鑰宻trncat
涔熻嚦灝戣姹傜涓涓弬鏁版槸涓猲ull-terminated-string錛岄偅璇ユ庝箞鍔炲憿錛熸垜浠嚜鐒朵細鎯寵搗鍓嶉潰浠嬬粛鎵撳嵃鏁存暟鍜屾誕鐐規暟鏃跺彲浠ユ寚瀹氬搴︼紝瀛楃涓?
涔熶竴鏍風殑銆傛瘮濡傦細 char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'}; char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'}; 濡傛灉錛?br>sprintf(s, "%s%s", a1, a2); //Don't do that! 鍗佹湁鍏節瑕佸嚭闂浜嗐傛槸鍚﹀彲浠ユ敼鎴愶細 sprintf(s, "%7s%7s", a1, a2); 涔熸病濂藉埌鍝効鍘伙紝姝g‘鐨勫簲璇ユ槸錛?br>sprintf(s, "%.7s%.7s", a1, a2);//浜х敓錛?ABCDEFGHIJKLMN" 榪?
鍙互綾繪瘮鎵撳嵃嫻偣鏁扮殑”%m.nf”錛屽湪”%m.ns”涓紝m 琛ㄧず鍗犵敤瀹藉害錛堝瓧絎︿覆闀垮害涓嶈凍鏃惰ˉ絀烘牸錛岃秴鍑轟簡鍒欐寜鐓у疄闄呭搴︽墦鍗幫級錛宯
鎵嶈〃紺轟粠鐩稿簲鐨勫瓧絎︿覆涓渶澶氬彇鐢ㄧ殑瀛楃鏁般傞氬父鍦ㄦ墦鍗板瓧絎︿覆鏃秏 娌′粈涔堝ぇ鐢紝榪樻槸鐐瑰彿鍚庨潰鐨刵 鐢ㄧ殑澶氥傝嚜鐒訛紝涔熷彲浠ュ墠鍚庨兘鍙彇閮ㄥ垎瀛楃錛?br>sprintf(s, "%.6s%.5s", a1, a2);//浜х敓錛?ABCDEFHIJKL"鍦?
璁稿鏃跺欙紝鎴戜滑鎴栬榪樺笇鏈涜繖浜涙牸寮忔帶鍒剁涓敤浠ユ寚瀹氶暱搴︿俊鎭殑鏁板瓧鏄姩鎬佺殑錛岃屼笉鏄潤鎬佹寚瀹氱殑錛屽洜涓鴻澶氭椂鍊欙紝紼嬪簭瑕佸埌榪愯鏃舵墠浼氭竻妤氬埌搴曢渶瑕佸彇瀛楃鏁扮粍
涓殑鍑犱釜瀛楃錛岃繖縐嶅姩鎬佺殑瀹藉害/綺懼害璁劇疆鍔熻兘鍦╯printf 鐨勫疄鐜頒腑涔熻鑰冭檻鍒頒簡錛宻printf
閲囩敤”*”鏉ュ崰鐢ㄤ竴涓湰鏉ラ渶瑕佷竴涓寚瀹氬搴︽垨綺懼害鐨勫父鏁版暟瀛楃殑浣嶇疆錛屽悓鏍鳳紝鑰屽疄闄呯殑瀹藉害鎴栫簿搴﹀氨鍙互鍜屽叾瀹冭鎵撳嵃鐨勫彉閲忎竴鏍瘋鎻愪緵鍑烘潵錛屼簬鏄紝涓婇潰鐨勪緥瀛?
鍙互鍙樻垚錛?br>sprintf(s, "%.*s%.*s", 7, a1, 7, a2); 鎴栬咃細 sprintf(s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2); 瀹為檯涓婏紝鍓嶉潰浠嬬粛鐨勬墦鍗板瓧絎︺佹暣鏁般佹誕鐐規暟絳夐兘鍙互鍔ㄦ佹寚瀹氶偅浜涘父閲忓鹼紝姣斿錛?br>sprintf(s, "%-*d", 4, 'A'); //浜х敓"65 " sprintf(s, "%#0*X", 8, 128); //浜х敓"0X000080"錛?#"浜х敓0X sprintf(s, "%*.*f", 10, 2, 3.1415926); //浜х敓" 3.14"
鎵撳嵃鍦板潃淇℃伅 鏈夋椂璋冭瘯紼嬪簭鏃訛紝鎴戜滑鍙兘鎯蟲煡鐪嬫煇浜涘彉閲忔垨鑰呮垚鍛樼殑鍦板潃錛岀敱浜庡湴鍧鎴栬呮寚閽堜篃涓嶈繃鏄釜32 浣嶇殑鏁幫紝浣犲畬鍏ㄥ彲浠ヤ嬌鐢ㄦ墦鍗版棤絎﹀彿鏁存暟鐨?#8221;%u”鎶婁粬浠墦鍗板嚭鏉ワ細 sprintf(s, "%u", &i); 涓嶈繃閫氬父浜轟滑榪樻槸鍠滄浣跨敤16 榪涘埗鑰屼笉鏄?0 榪涘埗鏉ユ樉紺轟竴涓湴鍧錛?br>sprintf(s, "%08X", &i); 鐒惰岋紝榪欎簺閮芥槸闂存帴鐨勬柟娉曪紝瀵逛簬鍦板潃鎵撳嵃錛宻printf 鎻愪緵浜嗕笓闂ㄧ殑”%p”錛?br>sprintf(s, "%p", &i); 鎴戣寰楀畠瀹為檯涓婂氨鐩稿綋浜庯細 sprintf(s, "%0*x", 2 * sizeof(void *), &i); 鍒╃敤sprintf 鐨勮繑鍥炲?br>杈冨皯鏈変漢娉ㄦ剰printf/sprintf 鍑芥暟鐨勮繑鍥炲鹼紝浣嗘湁鏃跺畠鍗存槸鏈夌敤鐨勶紝spritnf 榪斿洖浜嗘湰嬈″嚱鏁拌皟鐢?br>鏈緇堟墦鍗板埌瀛楃緙撳啿鍖轟腑鐨勫瓧絎︽暟鐩備篃灝辨槸璇存瘡褰撲竴嬈prinf 璋冪敤緇撴潫浠ュ悗錛屼綘鏃犻』鍐嶈皟鐢ㄤ竴嬈?br>strlen 渚垮凡緇忕煡閬撲簡緇撴灉瀛楃涓茬殑闀垮害銆傚錛?br>int len = sprintf(s, "%d", i); 瀵逛簬姝f暣鏁版潵璇達紝len 渚跨瓑浜庢暣鏁癷 鐨?0 榪涘埗浣嶆暟銆?br>涓嬮潰鐨勬槸涓畬鏁寸殑渚嬪瓙錛屼駭鐢?0 涓猍0, 100)涔嬮棿鐨勯殢鏈烘暟錛屽茍灝嗕粬浠墦鍗板埌涓涓瓧絎︽暟緇剆 涓紝 浠ラ楀彿鍒嗛殧寮銆?br>#include #include #include int main() { srand(time(0)); char s[64]; int offset = 0; for(int i = 0; i < 10; i++) { offset += sprintf(s + offset, "%d,", rand() % 100); } s[offset - 1] = ' ';//灝嗘渶鍚庝竴涓楀彿鎹㈡垚鎹㈣絎︺?br>printf(s); return 0; } 璁炬兂褰撲綘浠庢暟鎹簱涓彇鍑轟竴鏉¤褰曪紝鐒跺悗甯屾湜鎶婁粬浠殑鍚勪釜瀛楁鎸夌収鏌愮瑙勫垯榪炴帴鎴愪竴涓瓧 絎︿覆鏃訛紝灝卞彲浠ヤ嬌鐢ㄨ繖縐嶆柟娉曪紝浠庣悊璁轟笂璁詫紝浠栧簲璇ユ瘮涓嶆柇鐨剆trcat 鏁堢巼楂橈紝鍥犱負strcat 姣忔璋冪敤 閮介渶瑕佸厛鎵懼埌鏈鍚庣殑閭d釜’’鐨勪綅緗紝鑰屽湪涓婇潰緇欏嚭鐨勪緥瀛愪腑錛屾垜浠瘡嬈¢兘鍒╃敤sprintf 榪斿洖鍊兼妸榪?br>涓綅緗洿鎺ヨ涓嬫潵浜嗐?
浣跨敤sprintf 鐨勫父瑙侀棶棰?/strong> sprintf 鏄釜鍙樺弬鍑芥暟錛屼嬌鐢ㄦ椂緇忓父鍑洪棶棰橈紝鑰屼笖鍙鍑洪棶棰橀氬父灝辨槸鑳藉鑷寸▼搴忓穿婧冪殑鍐呭瓨璁?br>闂敊璇紝浣嗗ソ鍦ㄧ敱sprintf 璇敤瀵艱嚧鐨勯棶棰樿櫧鐒朵弗閲嶏紝鍗村緢瀹規槗鎵懼嚭錛屾棤闈炲氨鏄偅涔堝嚑縐嶆儏鍐碉紝閫?br>甯哥敤鐪肩潧鍐嶆妸鍑洪敊鐨勪唬鐮佸鐪嬪嚑鐪煎氨鐪嬪嚭鏉ヤ簡銆?
?? 緙撳啿鍖烘孩鍑?br>絎竴涓弬鏁扮殑闀垮害澶煭浜嗭紝娌$殑璇達紝緇欎釜澶х偣鐨勫湴鏂瑰惂銆傚綋鐒朵篃鍙兘鏄悗闈㈢殑鍙傛暟鐨勯棶 棰橈紝寤鴻鍙樺弬瀵瑰簲涓瀹氳緇嗗績錛岃屾墦鍗板瓧絎︿覆鏃訛紝灝介噺浣跨敤”%.ns”鐨勫艦寮忔寚瀹氭渶澶у瓧絎︽暟銆?
?? 蹇樿浜嗙涓涓弬鏁?br>浣庣駭寰椾笉鑳藉啀浣庣駭闂錛岀敤printf 鐢ㄥ緱澶儻浜嗐?/鍋跺氨甯哥姱銆傦細銆傦紙
?? 鍙樺弬瀵瑰簲鍑洪棶棰?br>閫氬父鏄繕璁頒簡鎻愪緵瀵瑰簲鏌愪釜鏍煎紡絎︾殑鍙樺弬錛屽鑷翠互鍚庣殑鍙傛暟緇熺粺閿欎綅錛屾鏌ユ鏌ュ惂銆傚挨 鍏舵槸瀵瑰簲”*”鐨勯偅浜涘弬鏁幫紝閮芥彁渚涗簡鍚楋紵涓嶈鎶婁竴涓暣鏁板搴斾竴涓?#8221;%s”錛岀紪璇戝櫒浼氳寰椾綘 嬈哄ス澶敋浜嗭紙緙栬瘧鍣ㄦ槸obj 鍜宔xe 鐨勫濡堬紝搴旇鏄釜濂崇殑錛?P錛夈?br>
strftime sprnitf 榪樻湁涓笉閿欑殑琛ㄥ錛歴trftime錛屼笓闂ㄧ敤浜庢牸寮忓寲鏃墮棿瀛楃涓茬殑錛岀敤娉曡窡濂硅〃鍝ュ緢鍍忥紝涔?br>鏄竴澶у爢鏍煎紡鎺у埗絎︼紝鍙槸姣曠珶灝忓濞樺蹇冪粏錛屽ス榪樿璋冪敤鑰呮寚瀹氱紦鍐插尯鐨勬渶澶ч暱搴︼紝鍙兘鏄負 浜嗗湪鍑虹幇闂鏃跺彲浠ユ帹鍗歌矗浠誨惂銆傝繖閲屼婦涓緥瀛愶細 time_t t = time(0); //浜х敓"YYYY-MM-DD hh:mm:ss"鏍煎紡鐨勫瓧絎︿覆銆?br>char s[32]; strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t)); sprintf 鍦∕FC 涓篃鑳芥壘鍒頒粬鐨勭煡闊籌細CString::Format錛宻trftime 鍦∕FC 涓嚜鐒朵篃鏈夊ス鐨勫悓閬擄細 CTime::Format錛岃繖涓瀵圭敱浜庝粠闈㈠悜瀵硅薄鍝噷寰楀埌浜嗚禐鍔╋紝鐢ㄤ互鍐欏嚭鐨勪唬鐮佹洿瑙変紭闆呫?
C璇█鏍囧噯搴撳嚱鏁?:strncmp()
鍑芥暟鍘熷瀷
int strncmp(char *str1, char *str2, int maxlen);
鍑芥暟鍔熻兘
姣旇緝瀛楃涓瞫1鍜宻2鐨勫墠n涓瓧絎︺?br> 褰搒1<s2鏃訛紝榪斿洖鍊?lt;0 褰搒1=s2鏃訛紝榪斿洖鍊?0 褰搒1>s2鏃訛紝榪斿洖鍊?gt;0
澹版槑鏂囦歡
<string.h>
鐢ㄦ硶紺轟緥
#include <stdio.h> #include <string.h> int main(void) { char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc"; int ptr; ptr = strncmp(buf2,buf1,3); if (ptr > 0) printf("buffer 2 is greater than buffer 1\n"); else printf("buffer 2 is less than buffer 1\n"); ptr = strncmp(buf2,buf3,3); if (ptr > 0) printf("buffer 2 is greater than buffer 3\n"); else printf("buffer 2 is less than buffer 3\n"); return(0); }
]]> C璇█ 鏂囦歡鎿嶄綔 -杞澆鑷紪紼嬬埍濂借呰鍧?/title> http://www.shnenglu.com/jht/archive/2006/05/31/7933.html瀛f旦 瀛f旦 Wed, 31 May 2006 05:33:00 GMT http://www.shnenglu.com/jht/archive/2006/05/31/7933.html http://www.shnenglu.com/jht/comments/7933.html http://www.shnenglu.com/jht/archive/2006/05/31/7933.html#Feedback 1 http://www.shnenglu.com/jht/comments/commentRss/7933.html http://www.shnenglu.com/jht/services/trackbacks/7933.html 銆銆鏅氭枃浠舵槸鎸囬┗鐣欏湪紓佺洏鎴栧叾瀹冨閮ㄤ粙璐ㄤ笂鐨勪竴涓湁搴忔暟鎹泦錛屽彲浠ユ槸婧愭枃浠躲佺洰鏍囨枃浠躲佸彲鎵ц紼嬪簭錛?涔熷彲浠ユ槸涓緇勫緟杈撳叆澶勭悊鐨勫師濮嬫暟鎹紝鎴栬呮槸涓緇勮緭鍑虹殑緇撴灉銆傚浜庢簮鏂囦歡銆佺洰鏍囨枃浠躲?鍙墽琛岀▼搴忓彲浠ョО浣滅▼搴忔枃浠訛紝瀵硅緭鍏ヨ緭鍑烘暟鎹彲縐頒綔鏁版嵁鏂囦歡銆?br /> 銆銆璁懼鏂囦歡鏄寚涓庝富鏈虹浉鑱旂殑鍚勭澶栭儴璁懼錛屽鏄劇ず鍣ㄣ佹墦鍗版満銆侀敭鐩樼瓑銆傚湪鎿嶄綔緋葷粺涓紝鎶婂閮ㄨ澶囦篃鐪嬩綔鏄竴涓枃浠舵潵榪涜綆$悊錛屾妸瀹冧滑鐨勮緭鍏ャ佽緭鍑虹瓑鍚屼簬瀵圭鐩樻枃浠剁殑璇誨拰鍐欍?閫氬父鎶婃樉紺哄櫒瀹氫箟涓烘爣鍑嗚緭鍑烘枃浠訛紝 涓鑸儏鍐典笅鍦ㄥ睆騫曚笂鏄劇ず鏈夊叧淇℃伅灝辨槸鍚戞爣鍑嗚緭鍑烘枃浠惰緭鍑恒傚鍓嶉潰緇忓父浣跨敤鐨刾rintf,putchar 鍑芥暟灝辨槸榪欑被杈撳嚭銆傞敭鐩橀氬父琚寚瀹氭爣鍑嗙殑杈撳叆鏂囦歡錛?浠庨敭鐩樹笂杈撳叆灝辨剰鍛崇潃浠庢爣鍑嗚緭鍏ユ枃浠朵笂杈撳叆鏁版嵁銆俿canf,getchar鍑芥暟灝卞睘浜庤繖綾昏緭鍏ャ? 銆銆浠庢枃浠剁紪鐮佺殑鏂瑰紡鏉ョ湅錛屾枃浠跺彲鍒嗕負ASCII鐮佹枃浠跺拰浜岃繘鍒剁爜鏂囦歡涓ょ銆?br /> 銆銆ASCII鏂囦歡涔熺О涓烘枃鏈枃浠訛紝榪欑鏂囦歡鍦ㄧ鐩樹腑瀛樻斁鏃舵瘡涓瓧絎﹀搴斾竴涓瓧鑺傦紝鐢ㄤ簬瀛樻斁瀵瑰簲鐨凙SCII鐮併備緥濡傦紝鏁?678鐨勫瓨鍌ㄥ艦寮忎負錛?br />ASC鐮侊細 銆00110101 00110110 00110111 00111000 銆銆銆銆銆鈫?銆銆銆銆鈫撱銆銆銆鈫?銆銆銆鈫?br />鍗佽繘鍒剁爜錛?5銆銆銆銆銆6銆銆銆銆7銆銆銆銆8 鍏卞崰鐢?涓瓧鑺傘侫SCII鐮佹枃浠跺彲鍦ㄥ睆騫曚笂鎸夊瓧絎︽樉紺猴紝 渚嬪婧愮▼搴忔枃浠跺氨鏄疉SCII鏂囦歡錛岀敤DOS鍛戒護TYPE鍙樉紺烘枃浠剁殑鍐呭銆?鐢變簬鏄寜瀛楃鏄劇ず錛屽洜姝よ兘璇繪噦鏂囦歡鍐呭銆?br /> 銆銆浜岃繘鍒舵枃浠舵槸鎸変簩榪涘埗鐨勭紪鐮佹柟寮忔潵瀛樻斁鏂囦歡鐨勩?渚嬪錛?鏁?678鐨勫瓨鍌ㄥ艦寮忎負錛?00010110 00101110鍙崰浜屼釜瀛楄妭銆備簩榪涘埗鏂囦歡铏界劧涔熷彲鍦ㄥ睆騫曚笂鏄劇ず錛?浣嗗叾鍐呭鏃犳硶璇繪噦銆侰緋葷粺鍦ㄥ鐞嗚繖浜涙枃浠舵椂錛屽茍涓嶅尯鍒嗙被鍨嬶紝閮界湅鎴愭槸瀛楃嫻侊紝鎸夊瓧鑺傝繘琛屽鐞嗐?杈撳叆杈撳嚭瀛楃嫻佺殑寮濮嬪拰緇撴潫鍙敱紼嬪簭鎺у埗鑰屼笉鍙楃墿鐞嗙鍙?濡傚洖杞︾)鐨勬帶鍒躲?鍥犳涔熸妸榪欑鏂囦歡縐頒綔鈥滄祦寮忔枃浠垛濄?br /> 銆銆鏈珷璁ㄨ嫻佸紡鏂囦歡鐨勬墦寮銆佸叧闂佽銆佸啓銆?瀹氫綅絳夊悇縐嶆搷浣溿傛枃浠舵寚閽堝湪C璇█涓敤涓涓寚閽堝彉閲忔寚鍚戜竴涓枃浠訛紝 榪欎釜鎸囬拡縐頒負鏂囦歡鎸囬拡銆傞氳繃鏂囦歡鎸囬拡灝卞彲瀵瑰畠鎵鎸囩殑鏂囦歡榪涜鍚勭鎿嶄綔銆?瀹氫箟璇存槑鏂囦歡鎸囬拡鐨勪竴鑸艦寮忎負錛?FILE* 鎸囬拡鍙橀噺鏍囪瘑絎︼紱 鍏朵腑FILE搴斾負澶у啓錛屽畠瀹為檯涓婃槸鐢辯郴緇熷畾涔夌殑涓涓粨鏋勶紝 璇ョ粨鏋勪腑鍚湁鏂囦歡鍚嶃佹枃浠剁姸鎬佸拰鏂囦歡褰撳墠浣嶇疆絳変俊鎭?鍦ㄧ紪鍐欐簮紼嬪簭鏃朵笉蹇呭叧蹇僃ILE緇撴瀯鐨勭粏鑺傘備緥濡傦細FILE *fp錛?琛ㄧずfp鏄寚鍚慒ILE緇撴瀯鐨勬寚閽堝彉閲忥紝閫氳繃fp 鍗沖彲鎵懼瓨鏀炬煇涓枃浠朵俊鎭殑緇撴瀯鍙橀噺錛岀劧鍚庢寜緇撴瀯鍙橀噺鎻愪緵鐨勪俊鎭壘鍒拌鏂囦歡錛?瀹炴柦瀵規枃浠剁殑鎿嶄綔銆備範鎯笂涔熺緇熷湴鎶奻p縐頒負鎸囧悜涓涓枃浠剁殑鎸囬拡銆傛枃浠剁殑鎵撳紑涓庡叧闂枃浠跺湪榪涜璇誨啓鎿嶄綔涔嬪墠瑕佸厛鎵撳紑錛屼嬌鐢ㄥ畬姣曡鍏抽棴銆?鎵璋撴墦寮鏂囦歡錛屽疄闄呬笂鏄緩绔嬫枃浠剁殑鍚勭鏈夊叧淇℃伅錛?騫朵嬌鏂囦歡鎸囬拡鎸囧悜璇ユ枃浠訛紝浠ヤ究榪涜鍏跺畠鎿嶄綔銆傚叧闂枃浠跺垯鏂紑鎸囬拡涓庢枃浠朵箣闂寸殑鑱旂郴錛屼篃灝辯姝㈠啀瀵硅鏂囦歡榪涜鎿嶄綔銆?br /> 銆銆鍦–璇█涓紝鏂囦歡鎿嶄綔閮芥槸鐢卞簱鍑芥暟鏉ュ畬鎴愮殑銆?鍦ㄦ湰绔犲唴灝嗕粙緇嶄富瑕佺殑鏂囦歡鎿嶄綔鍑芥暟銆?br /> 銆銆鏂囦歡鎵撳紑鍑芥暟fopen 銆銆fopen鍑芥暟鐢ㄦ潵鎵撳紑涓涓枃浠訛紝鍏惰皟鐢ㄧ殑涓鑸艦寮忎負錛?鏂囦歡鎸囬拡鍚?fopen(鏂囦歡鍚嶏紝浣跨敤鏂囦歡鏂瑰紡) 鍏朵腑錛屸滄枃浠舵寚閽堝悕鈥濆繀欏繪槸琚鏄庝負FILE 綾誨瀷鐨勬寚閽堝彉閲忥紝鈥滄枃浠跺悕鈥濇槸琚墦寮鏂囦歡鐨勬枃浠跺悕銆?鈥滀嬌鐢ㄦ枃浠舵柟寮忊濇槸鎸囨枃浠剁殑綾誨瀷鍜屾搷浣滆姹傘傗滄枃浠跺悕鈥濇槸瀛楃涓插父閲忔垨瀛楃涓叉暟緇勩備緥濡傦細 FILE *fp錛?br />fp=("file a","r"); 銆銆鍏舵剰涔夋槸鍦ㄥ綋鍓嶇洰褰曚笅鎵撳紑鏂囦歡file a錛?鍙厑璁歌繘琛屸滆鈥濇搷浣滐紝騫朵嬌fp鎸囧悜璇ユ枃浠躲?br /> 銆銆鍙堝錛?br /> FILE *fphzk fphzk=("c:\\hzk16',"rb") 銆銆鍏舵剰涔夋槸鎵撳紑C椹卞姩鍣ㄧ鐩樼殑鏍圭洰褰曚笅鐨勬枃浠秇zk16錛?榪欐槸涓涓簩榪涘埗鏂囦歡錛屽彧鍏佽鎸変簩榪涘埗鏂瑰紡榪涜璇繪搷浣溿備袱涓弽鏂滅嚎鈥淺\ 鈥濅腑鐨勭涓涓〃紺鴻漿涔夊瓧絎︼紝絎簩涓〃紺烘牴鐩綍銆備嬌鐢ㄦ枃浠剁殑鏂瑰紡鍏辨湁12縐嶏紝涓嬮潰緇欏嚭浜嗗畠浠殑絎﹀彿鍜屾剰涔夈? 鏂囦歡浣跨敤鏂瑰紡 銆銆銆銆銆銆銆鎰?涔?br />鈥渞t鈥濄銆銆銆銆銆鍙鎵撳紑涓涓枃鏈枃浠訛紝鍙厑璁歌鏁版嵁 鈥渨t鈥濄銆銆銆銆銆鍙啓鎵撳紑鎴栧緩绔嬩竴涓枃鏈枃浠訛紝鍙厑璁稿啓鏁版嵁 鈥渁t鈥濄銆銆銆銆銆榪藉姞鎵撳紑涓涓枃鏈枃浠訛紝騫跺湪鏂囦歡鏈熬鍐欐暟鎹?br />鈥渞b鈥濄銆銆銆銆銆鍙鎵撳紑涓涓簩榪涘埗鏂囦歡錛屽彧鍏佽璇繪暟鎹?br />鈥渨b鈥濄銆銆銆 銆 鍙啓鎵撳紑鎴栧緩绔嬩竴涓簩榪涘埗鏂囦歡錛屽彧鍏佽鍐欐暟鎹?br />鈥渁b鈥?銆銆銆銆 銆榪藉姞鎵撳紑涓涓簩榪涘埗鏂囦歡錛屽茍鍦ㄦ枃浠舵湯灝懼啓鏁版嵁 鈥渞t+鈥濄銆銆銆銆 璇誨啓鎵撳紑涓涓枃鏈枃浠訛紝鍏佽璇誨拰鍐?br />鈥渨t+鈥濄銆銆銆銆 璇誨啓鎵撳紑鎴栧緩绔嬩竴涓枃鏈枃浠訛紝鍏佽璇誨啓 鈥渁t+鈥濄銆銆銆銆 璇誨啓鎵撳紑涓涓枃鏈枃浠訛紝鍏佽璇伙紝鎴栧湪鏂囦歡鏈拷鍔犳暟 鎹?br />鈥渞b+鈥濄銆銆銆銆 璇誨啓鎵撳紑涓涓簩榪涘埗鏂囦歡錛屽厑璁歌鍜屽啓 鈥渨b+鈥濄銆銆銆銆 璇誨啓鎵撳紑鎴栧緩绔嬩竴涓簩榪涘埗鏂囦歡錛屽厑璁歌鍜屽啓 鈥渁b+鈥?銆銆銆銆銆璇誨啓鎵撳紑涓涓簩榪涘埗鏂囦歡錛屽厑璁歌錛屾垨鍦ㄦ枃浠舵湯榪藉姞鏁版嵁 銆銆瀵逛簬鏂囦歡浣跨敤鏂瑰紡鏈変互涓嬪嚑鐐硅鏄庯細 銆銆1. 鏂囦歡浣跨敤鏂瑰紡鐢眗,w,a,t,b錛?鍏釜瀛楃鎷兼垚錛屽悇瀛楃鐨勫惈涔夋槸錛?br /> 銆銆r(read): 璇?br />銆銆w(write): 鍐?br />銆銆a(append): 榪藉姞 銆銆t(text): 鏂囨湰鏂囦歡錛屽彲鐪佺暐涓嶅啓 銆銆b(banary): 浜岃繘鍒舵枃浠?br />銆銆+: 璇誨拰鍐?br /> 銆銆2. 鍑$敤鈥渞鈥濇墦寮涓涓枃浠舵椂錛岃鏂囦歡蹇呴』宸茬粡瀛樺湪錛?涓斿彧鑳戒粠璇ユ枃浠惰鍑恒?br /> 銆銆3. 鐢ㄢ渨鈥濇墦寮鐨勬枃浠跺彧鑳藉悜璇ユ枃浠跺啓鍏ャ?鑻ユ墦寮鐨勬枃浠朵笉瀛樺湪錛屽垯浠ユ寚瀹氱殑鏂囦歡鍚嶅緩绔嬭鏂囦歡錛岃嫢鎵撳紑鐨勬枃浠跺凡緇忓瓨鍦紝鍒欏皢璇ユ枃浠跺垹鍘伙紝閲嶅緩涓涓柊鏂囦歡銆?br /> 銆銆4. 鑻ヨ鍚戜竴涓凡瀛樺湪鐨勬枃浠惰拷鍔犳柊鐨勪俊鎭紝鍙兘鐢ㄢ渁 鈥濇柟寮忔墦寮鏂囦歡銆備絾姝ゆ椂璇ユ枃浠跺繀欏繪槸瀛樺湪鐨勶紝鍚﹀垯灝嗕細鍑洪敊銆?br /> 銆銆5. 鍦ㄦ墦寮涓涓枃浠舵椂錛屽鏋滃嚭閿欙紝fopen灝嗚繑鍥炰竴涓┖鎸囬拡鍊糔ULL銆傚湪紼嬪簭涓彲浠ョ敤榪欎竴淇℃伅鏉ュ垽鍒槸鍚﹀畬鎴愭墦寮鏂囦歡鐨勫伐浣滐紝騫朵綔鐩稿簲鐨勫鐞嗐傚洜姝ゅ父鐢ㄤ互涓嬬▼搴忔鎵撳紑鏂囦歡錛?br /> if((fp=fopen("c:\\hzk16","rb")==NULL) { printf("\nerror on open c:\\hzk16 file!"); getch(); exit(1); } 銆銆榪欐紼嬪簭鐨勬剰涔夋槸錛屽鏋滆繑鍥炵殑鎸囬拡涓虹┖錛岃〃紺轟笉鑳芥墦寮C鐩樻牴鐩綍涓嬬殑hzk16鏂囦歡錛屽垯緇欏嚭鎻愮ず淇℃伅鈥渆rror on open c:\ hzk16file!鈥濓紝涓嬩竴琛実etch()鐨勫姛鑳芥槸浠庨敭鐩樿緭鍏ヤ竴涓瓧絎︼紝浣嗕笉鍦ㄥ睆騫曚笂鏄劇ず銆傚湪榪欓噷錛岃琛岀殑浣滅敤鏄瓑寰咃紝 鍙湁褰撶敤鎴蜂粠閿洏鏁蹭換涓閿椂錛岀▼搴忔墠緇х畫鎵ц錛?鍥犳鐢ㄦ埛鍙埄鐢ㄨ繖涓瓑寰呮椂闂撮槄璇誨嚭閿欐彁紺恒傛暡閿悗鎵цexit(1)閫鍑虹▼搴忋?br /> 銆銆6. 鎶婁竴涓枃鏈枃浠惰鍏ュ唴瀛樻椂錛岃灝咥SCII鐮佽漿鎹㈡垚浜岃繘鍒剁爜錛?鑰屾妸鏂囦歡浠ユ枃鏈柟寮忓啓鍏ョ鐩樻椂錛屼篃瑕佹妸浜岃繘鍒剁爜杞崲鎴怉SCII鐮侊紝鍥犳鏂囨湰鏂囦歡鐨勮鍐欒鑺辮垂杈冨鐨勮漿鎹㈡椂闂淬傚浜岃繘鍒舵枃浠剁殑璇誨啓涓嶅瓨鍦ㄨ繖縐嶈漿鎹€?br /> 銆銆7. 鏍囧噯杈撳叆鏂囦歡(閿洏)錛屾爣鍑嗚緭鍑烘枃浠?鏄劇ず鍣?)錛屾爣鍑嗗嚭閿欒緭鍑?鍑洪敊淇℃伅)鏄敱緋葷粺鎵撳紑鐨勶紝鍙洿鎺ヤ嬌鐢ㄣ傛枃浠跺叧闂嚱鏁幫絾C锝岋綇锝擄絽鏂囦歡涓鏃︿嬌鐢ㄥ畬姣曪紝搴旂敤鍏抽棴鏂囦歡鍑芥暟鎶婃枃浠跺叧闂紝 浠ラ伩鍏嶆枃浠剁殑鏁版嵁涓㈠け絳夐敊璇?br /> 銆銆fclose鍑芥暟 銆銆璋冪敤鐨勪竴鑸艦寮忔槸錛?fclose(鏂囦歡鎸囬拡)錛?渚嬪錛?br /> 銆銆fclose(fp); 姝e父瀹屾垚鍏抽棴鏂囦歡鎿嶄綔鏃訛紝fclose鍑芥暟榪斿洖鍊間負0銆傚榪斿洖闈為浂鍊煎垯琛ㄧず鏈夐敊璇彂鐢熴傛枃浠剁殑璇誨啓瀵規枃浠剁殑璇誨拰鍐欐槸鏈甯哥敤鐨勬枃浠舵搷浣溿? 銆銆鍦–璇█涓彁渚涗簡澶氱鏂囦歡璇誨啓鐨勫嚱鏁幫細 銆銆路瀛楃璇誨啓鍑芥暟 錛歠getc鍜宖putc 銆銆路瀛楃涓茶鍐欏嚱鏁幫細fgets鍜宖puts 銆銆路鏁版嵁鍧楄鍐欏嚱鏁幫細freed鍜宖write 銆銆路鏍煎紡鍖栬鍐欏嚱鏁幫細fscanf鍜宖prinf 銆銆涓嬮潰鍒嗗埆浜堜互浠嬬粛銆備嬌鐢ㄤ互涓婂嚱鏁伴兘瑕佹眰鍖呭惈澶存枃浠秙tdio.h銆傚瓧絎﹁鍐欏嚱鏁幫絾锝囷絽锝擟鍜岋絾锝愶綍锝擟瀛楃璇誨啓鍑芥暟鏄互瀛楃(瀛楄妭)涓哄崟浣嶇殑璇誨啓鍑芥暟銆?姣忔鍙粠鏂囦歡璇誨嚭鎴栧悜鏂囦歡鍐欏叆涓涓瓧絎︺?br /> 銆銆涓銆佽瀛楃鍑芥暟fgetc 銆銆fgetc鍑芥暟鐨勫姛鑳芥槸浠庢寚瀹氱殑鏂囦歡涓涓涓瓧絎︼紝鍑芥暟璋冪敤鐨勫艦寮忎負錛?瀛楃鍙橀噺=fgetc(鏂囦歡鎸囬拡)錛?渚嬪錛歝h=fgetc(fp);鍏舵剰涔夋槸浠庢墦寮鐨勬枃浠秄p涓鍙栦竴涓瓧絎﹀茍閫佸叆ch涓?br /> 銆銆瀵逛簬fgetc鍑芥暟鐨勪嬌鐢ㄦ湁浠ヤ笅鍑犵偣璇存槑錛?br /> 銆銆1. 鍦╢getc鍑芥暟璋冪敤涓紝璇誨彇鐨勬枃浠跺繀欏繪槸浠ヨ鎴栬鍐欐柟寮忔墦寮鐨勩?br /> 銆銆2. 璇誨彇瀛楃鐨勭粨鏋滀篃鍙互涓嶅悜瀛楃鍙橀噺璧嬪鹼紝渚嬪錛歠getc(fp);浣嗘槸璇誨嚭鐨勫瓧絎︿笉鑳戒繚瀛樸?br /> 銆銆3. 鍦ㄦ枃浠跺唴閮ㄦ湁涓涓綅緗寚閽堛傜敤鏉ユ寚鍚戞枃浠剁殑褰撳墠璇誨啓瀛楄妭銆傚湪鏂囦歡鎵撳紑鏃訛紝璇ユ寚閽堟繪槸鎸囧悜鏂囦歡鐨勭涓涓瓧鑺傘備嬌鐢╢getc 鍑芥暟鍚庯紝 璇ヤ綅緗寚閽堝皢鍚戝悗縐誨姩涓涓瓧鑺傘?鍥犳鍙繛緇嬈′嬌鐢╢getc鍑芥暟錛岃鍙栧涓瓧絎︺?搴旀敞鎰忔枃浠舵寚閽堝拰鏂囦歡鍐呴儴鐨勪綅緗寚閽堜笉鏄竴鍥炰簨銆傛枃浠舵寚閽堟槸鎸囧悜鏁翠釜鏂囦歡鐨勶紝欏誨湪紼嬪簭涓畾涔夎鏄庯紝鍙涓嶉噸鏂拌祴鍊鹼紝鏂囦歡鎸囬拡鐨勫兼槸涓嶅彉鐨勩傛枃浠跺唴閮ㄧ殑浣嶇疆鎸囬拡鐢ㄤ互鎸囩ず鏂囦歡鍐呴儴鐨勫綋鍓嶈鍐欎綅緗紝姣忚鍐欎竴嬈★紝璇ユ寚閽堝潎鍚戝悗縐誨姩錛屽畠涓嶉渶鍦ㄧ▼搴忎腑瀹氫箟璇存槑錛岃屾槸鐢辯郴緇熻嚜鍔ㄨ緗殑銆?br /> 銆銆[渚?0.1]璇誨叆鏂囦歡e10-1.c錛屽湪灞忓箷涓婅緭鍑恒?br /> #include<stdio.h> main() { FILE *fp; char ch; if((fp=fopen("e10_1.c","rt"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } ch=fgetc(fp); while (ch!=EOF) { putchar(ch); ch=fgetc(fp); } fclose(fp); } 銆銆鏈緥紼嬪簭鐨勫姛鑳芥槸浠庢枃浠朵腑閫愪釜璇誨彇瀛楃錛屽湪灞忓箷涓婃樉紺恒?紼嬪簭瀹氫箟浜嗘枃浠舵寚閽坒p,浠ヨ鏂囨湰鏂囦歡鏂瑰紡鎵撳紑鏂囦歡鈥渆10_1.c鈥濓紝 騫朵嬌fp鎸囧悜璇ユ枃浠躲傚鎵撳紑鏂囦歡鍑洪敊錛?緇欏嚭鎻愮ず騫墮鍑虹▼搴忋傜▼搴忕12琛屽厛璇誨嚭涓涓瓧絎︼紝鐒跺悗榪涘叆寰幆錛?鍙璇誨嚭鐨勫瓧絎︿笉鏄枃浠剁粨鏉熸爣蹇?姣忎釜鏂囦歡鏈湁涓緇撴潫鏍囧織EOF)灝辨妸璇ュ瓧絎︽樉紺哄湪灞忓箷涓婏紝鍐嶈鍏ヤ笅涓瀛楃銆傛瘡璇諱竴嬈★紝鏂囦歡鍐呴儴鐨勪綅緗寚閽堝悜鍚庣Щ鍔ㄤ竴涓瓧絎︼紝鏂囦歡緇撴潫鏃訛紝璇ユ寚閽堟寚鍚慐OF銆傛墽琛屾湰紼嬪簭灝嗘樉紺烘暣涓枃浠躲?br /> 銆銆浜屻佸啓瀛楃鍑芥暟fputc 銆銆fputc鍑芥暟鐨勫姛鑳芥槸鎶婁竴涓瓧絎﹀啓鍏ユ寚瀹氱殑鏂囦歡涓紝鍑芥暟璋冪敤鐨?褰㈠紡涓猴細 fputc(瀛楃閲忥紝鏂囦歡鎸囬拡)錛?鍏朵腑錛屽緟鍐欏叆鐨勫瓧絎﹂噺鍙互鏄瓧絎﹀父閲忔垨鍙橀噺錛屼緥濡傦細fputc('a',fp);鍏舵剰涔夋槸鎶婂瓧絎鍐欏叆fp鎵鎸囧悜鐨勬枃浠朵腑銆?br /> 銆銆瀵逛簬fputc鍑芥暟鐨勪嬌鐢ㄤ篃瑕佽鏄庡嚑鐐癸細 銆銆1. 琚啓鍏ョ殑鏂囦歡鍙互鐢ㄣ佸啓銆佽鍐欙紝榪藉姞鏂瑰紡鎵撳紑錛岀敤鍐欐垨璇誨啓鏂瑰紡鎵撳紑涓涓凡瀛樺湪鐨勬枃浠舵椂灝嗘竻闄ゅ師鏈夌殑鏂囦歡鍐呭錛屽啓鍏ュ瓧絎︿粠鏂囦歡棣栧紑濮嬨傚闇淇濈暀鍘熸湁鏂囦歡鍐呭錛屽笇鏈涘啓鍏ョ殑瀛楃浠ユ枃浠舵湯寮濮嬪瓨鏀撅紝蹇呴』浠ヨ拷鍔犳柟寮忔墦寮鏂囦歡銆傝鍐欏叆鐨勬枃浠惰嫢涓嶅瓨鍦紝鍒欏垱寤鴻鏂囦歡銆?br /> 銆銆2. 姣忓啓鍏ヤ竴涓瓧絎︼紝鏂囦歡鍐呴儴浣嶇疆鎸囬拡鍚戝悗縐誨姩涓涓瓧鑺傘?br /> 銆銆3. fputc鍑芥暟鏈変竴涓繑鍥炲鹼紝濡傚啓鍏ユ垚鍔熷垯榪斿洖鍐欏叆鐨勫瓧絎︼紝 鍚﹀垯榪斿洖涓涓狤OF銆傚彲鐢ㄦ鏉ュ垽鏂啓鍏ユ槸鍚︽垚鍔熴?br /> 銆銆[渚?0.2]浠庨敭鐩樿緭鍏ヤ竴琛屽瓧絎︼紝鍐欏叆涓涓枃浠訛紝 鍐嶆妸璇ユ枃浠跺唴瀹硅鍑烘樉紺哄湪灞忓箷涓娿?br /> #include<stdio.h> main() { FILE *fp; char ch; if((fp=fopen("string","wt+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("input a string:\n"); ch=getchar(); while (ch!='\n') { fputc(ch,fp); ch=getchar(); } rewind(fp); ch=fgetc(fp); while(ch!=EOF) { putchar(ch); ch=fgetc(fp); } printf("\n"); fclose(fp); } 銆銆紼嬪簭涓6琛屼互璇誨啓鏂囨湰鏂囦歡鏂瑰紡鎵撳紑鏂囦歡string銆傜▼搴忕13琛屼粠閿洏璇誨叆涓涓瓧絎﹀悗榪涘叆寰幆錛屽綋璇誨叆瀛楃涓嶄負鍥炶濺絎︽椂錛?鍒欐妸璇ュ瓧絎﹀啓鍏ユ枃浠朵箣涓紝鐒跺悗緇х畫浠庨敭鐩樿鍏ヤ笅涓瀛楃銆?姣忚緭鍏ヤ竴涓瓧絎︼紝鏂囦歡鍐呴儴浣嶇疆鎸囬拡鍚戝悗縐誨姩涓涓瓧鑺傘傚啓鍏ュ畬姣曪紝 璇ユ寚閽堝凡鎸囧悜鏂囦歡鏈傚瑕佹妸鏂囦歡浠庡ご璇誨嚭錛岄』鎶婃寚閽堢Щ鍚戞枃浠跺ご錛?紼嬪簭絎?9琛宺ewind鍑芥暟鐢ㄤ簬鎶奻p鎵鎸囨枃浠剁殑鍐呴儴浣嶇疆鎸囬拡縐誨埌鏂囦歡澶淬?絎?0鑷?5琛岀敤浜庤鍑烘枃浠朵腑鐨勪竴琛屽唴瀹廣?br /> 銆銆[渚?0.3]鎶婂懡浠よ鍙傛暟涓殑鍓嶄竴涓枃浠跺悕鏍囪瘑鐨勬枃浠訛紝 澶嶅埗鍒板悗涓涓枃浠跺悕鏍囪瘑鐨勬枃浠朵腑錛?濡傚懡浠よ涓彧鏈変竴涓枃浠跺悕鍒欐妸璇ユ枃浠跺啓鍒版爣鍑嗚緭鍑烘枃浠?鏄劇ず鍣?涓?br /> #include<stdio.h> main(int argc,char *argv[]) { FILE *fp1,*fp2; char ch; if(argc==1) { printf("have not enter file name strike any key exit"); getch(); exit(0); } if((fp1=fopen(argv[1],"rt"))==NULL) { printf("Cannot open %s\n",argv[1]); getch(); exit(1); } if(argc==2) fp2=stdout; else if((fp2=fopen(argv[2],"wt+"))==NULL) { printf("Cannot open %s\n",argv[1]); getch(); exit(1); } while((ch=fgetc(fp1))!=EOF) fputc(ch,fp2); fclose(fp1); fclose(fp2); } 銆銆鏈▼搴忎負甯﹀弬鐨刴ain鍑芥暟銆傜▼搴忎腑瀹氫箟浜嗕袱涓枃浠舵寚閽?fp1 鍜宖p2錛屽垎鍒寚鍚戝懡浠よ鍙傛暟涓粰鍑虹殑鏂囦歡銆傚鍛戒護琛屽弬鏁頒腑娌℃湁緇欏嚭鏂囦歡鍚嶏紝鍒欑粰鍑烘彁紺轟俊鎭傜▼搴忕18琛岃〃紺哄鏋滃彧緇欏嚭涓涓枃浠跺悕錛屽垯浣縡p2鎸囧悜鏍囧噯杈撳嚭鏂囦歡(鍗蟲樉紺哄櫒)銆傜▼搴忕25琛岃嚦28琛岀敤寰幆璇彞閫愪釜璇誨嚭鏂囦歡1涓殑瀛楃鍐嶉佸埌鏂囦歡2涓傚啀嬈¤繍琛屾椂錛岀粰鍑轟簡涓涓枃浠跺悕(鐢變緥10.2鎵寤虹珛鐨勬枃浠?錛?鏁呰緭鍑虹粰鏍囧噯杈撳嚭鏂囦歡stdout錛屽嵆鍦ㄦ樉紺哄櫒涓婃樉紺烘枃浠跺唴瀹廣傜涓夋榪愯錛岀粰鍑轟簡浜屼釜鏂囦歡鍚嶏紝鍥犳鎶妔tring涓殑鍐呭璇誨嚭錛屽啓鍏ュ埌OK涔嬩腑銆傚彲鐢―OS鍛戒護type鏄劇ずOK鐨勫唴瀹癸細 ******************************************************************************************** 瀛楃涓茶鍐欏嚱鏁癴gets鍜宖puts 銆銆涓銆佽瀛楃涓插嚱鏁癴gets鍑芥暟鐨勫姛鑳芥槸浠庢寚瀹氱殑鏂囦歡涓涓涓瓧絎︿覆鍒板瓧絎︽暟緇勪腑錛屽嚱鏁拌皟鐢ㄧ殑褰㈠紡涓猴細 fgets(瀛楃鏁扮粍鍚嶏紝n錛屾枃浠舵寚閽?錛?鍏朵腑鐨刵鏄竴涓鏁存暟銆傝〃紺轟粠鏂囦歡涓鍑虹殑瀛楃涓蹭笉瓚呰繃 n-1涓瓧絎︺傚湪璇誨叆鐨勬渶鍚庝竴涓瓧絎﹀悗鍔犱笂涓茬粨鏉熸爣蹇?\0'銆備緥濡傦細fgets(str,n,fp);鐨勬剰涔夋槸浠巉p鎵鎸囩殑鏂囦歡涓鍑簄-1涓瓧絎﹂佸叆瀛楃鏁扮粍str涓?br /> 銆銆[渚?0.4]浠巈10_1.c鏂囦歡涓鍏ヤ竴涓惈10涓瓧絎︾殑瀛楃涓層?br /> #include<stdio.h> main() { FILE *fp; char str[11]; if((fp=fopen("e10_1.c","rt"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } fgets(str,11,fp); printf("%s",str); fclose(fp); } 銆銆鏈緥瀹氫箟浜嗕竴涓瓧絎︽暟緇剆tr鍏?1涓瓧鑺傦紝鍦ㄤ互璇繪枃鏈枃浠舵柟寮忔墦寮鏂囦歡e101.c鍚庯紝浠庝腑璇誨嚭10涓瓧絎﹂佸叆str鏁扮粍錛屽湪鏁扮粍鏈鍚庝竴涓崟鍏冨唴灝嗗姞涓?\0'錛岀劧鍚庡湪灞忓箷涓婃樉紺鴻緭鍑簊tr鏁扮粍銆傝緭鍑虹殑鍗佷釜瀛楃姝f槸渚?0.1紼嬪簭鐨勫墠鍗佷釜瀛楃銆?br /> 銆銆瀵筬gets鍑芥暟鏈変袱鐐硅鏄庯細 銆銆1. 鍦ㄨ鍑簄-1涓瓧絎︿箣鍓嶏紝濡傞亣鍒頒簡鎹㈣絎︽垨EOF錛屽垯璇誨嚭緇撴潫銆?br /> 銆銆2. fgets鍑芥暟涔熸湁榪斿洖鍊鹼紝鍏惰繑鍥炲兼槸瀛楃鏁扮粍鐨勯鍦板潃銆?br /> 銆銆浜屻佸啓瀛楃涓插嚱鏁癴puts 銆銆fputs鍑芥暟鐨勫姛鑳芥槸鍚戞寚瀹氱殑鏂囦歡鍐欏叆涓涓瓧絎︿覆錛屽叾璋冪敤褰㈠紡涓猴細 fputs(瀛楃涓詫紝鏂囦歡鎸囬拡) 鍏朵腑瀛楃涓插彲浠ユ槸瀛楃涓插父閲忥紝涔熷彲浠ユ槸瀛楃鏁扮粍鍚嶏紝 鎴栨寚閽?鍙橀噺錛屼緥濡傦細 fputs(鈥渁bcd鈥滐紝fp)錛?br /> 銆銆鍏舵剰涔夋槸鎶婂瓧絎︿覆鈥渁bcd鈥濆啓鍏p鎵鎸囩殑鏂囦歡涔嬩腑銆俒渚?0.5]鍦ㄤ緥10.2涓緩绔嬬殑鏂囦歡string涓拷鍔犱竴涓瓧絎︿覆銆?br /> #include<stdio.h> main() { FILE *fp; char ch,st[20]; if((fp=fopen("string","at+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("input a string:\n"); scanf("%s",st); fputs(st,fp); rewind(fp); ch=fgetc(fp); while(ch!=EOF) { putchar(ch); ch=fgetc(fp); } printf("\n"); fclose(fp); } 銆銆鏈緥瑕佹眰鍦╯tring鏂囦歡鏈姞鍐欏瓧絎︿覆錛屽洜姝わ紝鍦ㄧ▼搴忕6琛屼互榪藉姞璇誨啓鏂囨湰鏂囦歡鐨勬柟寮忔墦寮鏂囦歡string 銆?鐒跺悗杈撳叆瀛楃涓詫紝 騫剁敤fputs鍑芥暟鎶婅涓插啓鍏ユ枃浠秙tring銆傚湪紼嬪簭15琛岀敤rewind鍑芥暟鎶婃枃浠跺唴閮ㄤ綅緗寚閽堢Щ鍒版枃浠墮銆?鍐嶈繘鍏ュ驚鐜愪釜鏄劇ず褰撳墠鏂囦歡涓殑鍏ㄩ儴鍐呭銆?br /> 銆銆鏁版嵁鍧楄鍐欏嚱鏁癴read鍜宖write 銆銆C璇█榪樻彁渚涗簡鐢ㄤ簬鏁村潡鏁版嵁鐨勮鍐欏嚱鏁般?鍙敤鏉ヨ鍐欎竴緇勬暟鎹紝濡備竴涓暟緇勫厓绱狅紝涓涓粨鏋勫彉閲忕殑鍊肩瓑銆傝鏁版嵁鍧楀嚱鏁拌皟鐢ㄧ殑涓鑸艦寮忎負錛?fread(buffer,size,count,fp); 鍐欐暟鎹潡鍑芥暟璋冪敤鐨勪竴鑸艦寮忎負錛?fwrite(buffer,size,count,fp); 鍏朵腑buffer鏄竴涓寚閽堬紝鍦╢read鍑芥暟涓紝瀹冭〃紺哄瓨鏀捐緭鍏ユ暟鎹殑棣栧湴鍧銆傚湪fwrite鍑芥暟涓紝瀹冭〃紺哄瓨鏀捐緭鍑烘暟鎹殑棣栧湴鍧銆?size 琛ㄧず鏁版嵁鍧楃殑瀛楄妭鏁般俢ount 琛ㄧず瑕佽鍐欑殑鏁版嵁鍧楀潡鏁般俧p 琛ㄧず鏂囦歡鎸囬拡銆?br /> 銆銆渚嬪錛?br /> fread(fa,4,5,fp); 鍏舵剰涔夋槸浠巉p鎵鎸囩殑鏂囦歡涓紝姣忔璇?涓瓧鑺?涓涓疄鏁?閫佸叆瀹炴暟緇刦a涓紝榪炵畫璇?嬈★紝鍗寵5涓疄鏁板埌fa涓?br /> 銆銆[渚?0.6]浠庨敭鐩樿緭鍏ヤ袱涓鐢熸暟鎹紝鍐欏叆涓涓枃浠朵腑錛?鍐嶈鍑鴻繖涓や釜瀛︾敓鐨勬暟鎹樉紺哄湪灞忓箷涓娿?br /> #include<stdio.h> struct stu { char name[10]; int num; int age; char addr[15]; }boya[2],boyb[2],*pp,*qq; main() { FILE *fp; char ch; int i; pp=boya; qq=boyb; if((fp=fopen("stu_list","wb+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("\ninput data\n"); for(i=0;i<2;i++,pp++) scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr); pp=boya; fwrite(pp,sizeof(struct stu),2,fp); rewind(fp); fread(qq,sizeof(struct stu),2,fp); printf("\n\nname\tnumber age addr\n"); for(i=0;i<2;i++,qq++) printf("%s\t%5d%7d%s\n",qq->name,qq->num,qq->age,qq->addr); fclose(fp); } 銆銆鏈緥紼嬪簭瀹氫箟浜嗕竴涓粨鏋剆tu,璇存槑浜嗕袱涓粨鏋勬暟緇刡oya鍜?boyb浠ュ強涓や釜緇撴瀯鎸囬拡鍙橀噺pp鍜宷q銆俻p鎸囧悜boya,qq鎸囧悜boyb銆傜▼搴忕16琛屼互璇誨啓鏂瑰紡鎵撳紑浜岃繘鍒舵枃浠垛渟tu_list鈥濓紝杈撳叆浜屼釜瀛︾敓鏁版嵁涔嬪悗錛屽啓鍏ヨ鏂囦歡涓紝 鐒跺悗鎶婃枃浠跺唴閮ㄤ綅緗寚閽堢Щ鍒版枃浠墮錛岃鍑轟袱鍧楀鐢熸暟鎹悗錛屽湪灞忓箷涓婃樉紺恒?br /> 銆銆鏍煎紡鍖栬鍐欏嚱鏁癴scanf鍜宖printf 銆銆fscanf鍑芥暟錛宖printf鍑芥暟涓庡墠闈嬌鐢ㄧ殑scanf鍜宲rintf 鍑芥暟鐨勫姛鑳界浉浼鹼紝閮芥槸鏍煎紡鍖栬鍐欏嚱鏁般?涓よ呯殑鍖哄埆鍦ㄤ簬 fscanf 鍑芥暟鍜宖printf鍑芥暟鐨勮鍐欏璞′笉鏄敭鐩樺拰鏄劇ず鍣紝鑰屾槸紓佺洏鏂囦歡銆傝繖涓や釜鍑芥暟鐨勮皟鐢ㄦ牸寮忎負錛?fscanf(鏂囦歡鎸囬拡錛屾牸寮忓瓧絎︿覆錛岃緭鍏ヨ〃鍒?錛?fprintf(鏂囦歡鎸囬拡錛屾牸寮忓瓧絎︿覆錛岃緭鍑鴻〃鍒?錛?渚嬪錛?br /> 銆銆fscanf(fp,"%d%s",&i,s); 銆銆fprintf(fp,"%d%c",j,ch); 銆銆鐢╢scanf鍜宖printf鍑芥暟涔熷彲浠ュ畬鎴愪緥10.6鐨勯棶棰樸備慨鏀瑰悗鐨勭▼搴忓渚?0.7鎵紺恒?br /> 銆銆[渚?0.7] #include<stdio.h> struct stu { char name[10]; int num; int age; char addr[15]; }boya[2],boyb[2],*pp,*qq; main() { FILE *fp; char ch; int i; pp=boya; qq=boyb; if((fp=fopen("stu_list","wb+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("\ninput data\n"); for(i=0;i<2;i++,pp++) scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr); pp=boya; for(i=0;i<2;i++,pp++) fprintf(fp,"%s %d %d %s\n",pp->name,pp->num,pp->age,pp-> addr); rewind(fp); for(i=0;i<2;i++,qq++) fscanf(fp,"%s %d %d %s\n",qq->name,&qq->num,&qq->age,qq->addr); printf("\n\nname\tnumber age addr\n"); qq=boyb; for(i=0;i<2;i++,qq++) printf("%s\t%5d %7d %s\n",qq->name,qq->num, qq->age, qq->addr); fclose(fp); } 銆銆涓庝緥10.6鐩告瘮錛屾湰紼嬪簭涓璮scanf鍜宖printf鍑芥暟姣忔鍙兘璇誨啓涓涓粨鏋勬暟緇勫厓绱狅紝鍥犳閲囩敤浜嗗驚鐜鍙ユ潵璇誨啓鍏ㄩ儴鏁扮粍鍏冪礌銆?榪樿娉ㄦ剰鎸囬拡鍙橀噺pp,qq鐢變簬寰幆鏀瑰彉浜嗗畠浠殑鍊鹼紝鍥犳鍦ㄧ▼搴忕殑25鍜?2琛屽垎鍒瀹冧滑閲嶆柊璧嬩簣浜嗘暟緇勭殑棣栧湴鍧銆?br /> 銆銆鏂囦歡鐨勯殢鏈鴻鍐?br /> 銆銆鍓嶉潰浠嬬粛鐨勫鏂囦歡鐨勮鍐欐柟寮忛兘鏄『搴忚鍐欙紝 鍗寵鍐欐枃浠跺彧鑳戒粠澶村紑濮嬶紝欏哄簭璇誨啓鍚勪釜鏁版嵁銆?浣嗗湪瀹為檯闂涓父瑕佹眰鍙鍐欐枃浠朵腑鏌愪竴鎸囧畾鐨勯儴鍒嗐?涓轟簡瑙e喅榪欎釜闂鍙Щ鍔ㄦ枃浠跺唴閮ㄧ殑浣嶇疆鎸囬拡鍒伴渶瑕佽鍐欑殑浣嶇疆錛屽啀榪涜璇誨啓錛岃繖縐嶈鍐欑О涓洪殢鏈鴻鍐欍?瀹炵幇闅忔満璇誨啓鐨勫叧閿槸瑕佹寜瑕佹眰縐誨姩浣嶇疆鎸囬拡錛岃繖縐頒負鏂囦歡鐨勫畾浣嶃傛枃浠跺畾浣嶇Щ鍔ㄦ枃浠跺唴閮ㄤ綅緗寚閽堢殑鍑芥暟涓昏鏈変袱涓紝 鍗?rewind 鍑芥暟鍜宖seek鍑芥暟銆?br /> 銆銆rewind鍑芥暟鍓嶉潰宸插嬈′嬌鐢ㄨ繃錛屽叾璋冪敤褰㈠紡涓猴細 rewind(鏂囦歡鎸囬拡)錛?瀹冪殑鍔熻兘鏄妸鏂囦歡鍐呴儴鐨勪綅緗寚閽堢Щ鍒版枃浠墮銆?涓嬮潰涓昏浠嬬粛 fseek鍑芥暟銆?br /> 銆銆fseek鍑芥暟鐢ㄦ潵縐誨姩鏂囦歡鍐呴儴浣嶇疆鎸囬拡錛屽叾璋冪敤褰㈠紡涓猴細 fseek(鏂囦歡鎸囬拡錛屼綅縐婚噺錛岃搗濮嬬偣)錛?鍏朵腑錛氣滄枃浠舵寚閽堚濇寚鍚戣縐誨姩鐨勬枃浠躲?鈥滀綅縐婚噺鈥濊〃紺虹Щ鍔ㄧ殑瀛楄妭鏁幫紝瑕佹眰浣嶇Щ閲忔槸long鍨嬫暟鎹紝浠ヤ究鍦ㄦ枃浠墮暱搴﹀ぇ浜?4KB 鏃朵笉浼氬嚭閿欍傚綋鐢ㄥ父閲忚〃紺轟綅縐婚噺鏃訛紝瑕佹眰鍔犲悗緙鈥淟鈥濄傗滆搗濮嬬偣鈥濊〃紺轟粠浣曞寮濮嬭綆椾綅縐婚噺錛岃瀹氱殑璧峰鐐規湁涓夌錛氭枃浠墮錛屽綋鍓嶄綅緗拰鏂囦歡灝俱?br /> 銆銆鍏惰〃紺烘柟娉曞琛?0.2銆? 璧峰鐐?銆銆銆琛ㄧず絎﹀彿 銆銆銆鏁板瓧琛ㄧず 鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹 鏂囦歡棣?銆銆銆SEEK鈥擲ET銆銆銆銆0 褰撳墠浣嶇疆 銆銆SEEK鈥擟UR銆銆銆銆1 鏂囦歡鏈熬 銆銆SEEK鈥擡ND 銆銆銆 2 銆銆渚嬪錛?br /> 銆銆fseek(fp,100L,0);鍏舵剰涔夋槸鎶婁綅緗寚閽堢Щ鍒扮鏂囦歡棣?00涓瓧鑺傚銆傝繕瑕佽鏄庣殑鏄痜seek鍑芥暟涓鑸敤浜庝簩榪涘埗鏂囦歡銆傚湪鏂囨湰鏂囦歡涓敱浜庤榪涜杞崲錛屾晠寰寰璁$畻鐨勪綅緗細鍑虹幇閿欒銆傛枃浠剁殑闅忔満璇誨啓鍦ㄧЩ鍔ㄤ綅緗寚閽堜箣鍚庯紝 鍗沖彲鐢ㄥ墠闈粙緇嶇殑浠諱竴縐嶈鍐欏嚱鏁拌繘琛岃鍐欍傜敱浜庝竴鑸槸璇誨啓涓涓暟鎹嵁鍧楋紝鍥犳甯哥敤fread鍜宖write鍑芥暟銆備笅闈㈢敤渚嬮鏉ヨ鏄庢枃浠剁殑闅忔満璇誨啓銆?br /> 銆銆[渚?0.8]鍦ㄥ鐢熸枃浠秙tu list涓鍑虹浜屼釜瀛︾敓鐨勬暟鎹?br /> #include<stdio.h> struct stu { 銆char name[10]; 銆int num; 銆int age; 銆char addr[15]; }boy,*qq; main() { 銆FILE *fp; 銆char ch; 銆int i=1; 銆qq=&boy; 銆if((fp=fopen("stu_list","rb"))==NULL) 銆{ 銆銆printf("Cannot open file strike any key exit!"); 銆銆getch(); 銆銆exit(1); 銆} 銆rewind(fp); 銆fseek(fp,i*sizeof(struct stu),0); 銆fread(qq,sizeof(struct stu),1,fp); 銆printf("\n\nname\tnumber age addr\n"); 銆printf("%s\t%5d %7d %s\n",qq->name,qq->num,qq->age, 銆qq->addr); } 銆銆鏂囦歡stu_list宸茬敱渚?0.6鐨勭▼搴忓緩绔嬶紝鏈▼搴忕敤闅忔満璇誨嚭鐨勬柟娉曡鍑虹浜屼釜瀛︾敓鐨勬暟鎹傜▼搴忎腑瀹氫箟boy涓簊tu綾誨瀷鍙橀噺錛宷q涓烘寚鍚慴oy鐨勬寚閽堛備互璇諱簩榪涘埗鏂囦歡鏂瑰紡鎵撳紑鏂囦歡錛岀▼搴忕22琛岀Щ鍔ㄦ枃浠朵綅緗寚閽堛傚叾涓殑i鍊間負1錛岃〃紺轟粠鏂囦歡澶村紑濮嬶紝縐誨姩涓涓猻tu綾誨瀷鐨勯暱搴︼紝 鐒跺悗鍐嶈鍑虹殑鏁版嵁鍗充負絎簩涓鐢熺殑鏁版嵁銆?br /> 銆銆鏂囦歡媯嫻嬪嚱鏁?br /> 銆銆C璇█涓父鐢ㄧ殑鏂囦歡媯嫻嬪嚱鏁版湁浠ヤ笅鍑犱釜銆?br /> 銆銆涓銆佹枃浠剁粨鏉熸嫻嬪嚱鏁癴eof鍑芥暟璋冪敤鏍煎紡錛?feof(鏂囦歡鎸囬拡)錛? 銆銆鍔熻兘錛氬垽鏂枃浠舵槸鍚﹀浜庢枃浠剁粨鏉熶綅緗紝濡傛枃浠剁粨鏉燂紝鍒欒繑鍥炲間負1錛屽惁鍒欎負0銆?br /> 銆銆浜屻佽鍐欐枃浠跺嚭閿欐嫻嬪嚱鏁癴error鍑芥暟璋冪敤鏍煎紡錛?ferror(鏂囦歡鎸囬拡)錛? 銆銆鍔熻兘錛氭鏌ユ枃浠跺湪鐢ㄥ悇縐嶈緭鍏ヨ緭鍑哄嚱鏁拌繘琛岃鍐欐椂鏄惁鍑洪敊銆?濡俧error榪斿洖鍊間負0琛ㄧず鏈嚭閿欙紝鍚﹀垯琛ㄧず鏈夐敊銆?br /> 銆銆涓夈佹枃浠跺嚭閿欐爣蹇楀拰鏂囦歡緇撴潫鏍囧織緗?鍑芥暟clearerr鍑芥暟璋冪敤鏍煎紡錛?clearerr(鏂囦歡鎸囬拡); 銆銆鍔熻兘錛氭湰鍑芥暟鐢ㄤ簬娓呴櫎鍑洪敊鏍囧織鍜屾枃浠剁粨鏉熸爣蹇楋紝浣垮畠浠負0鍊箋?br /> 銆銆C搴撴枃浠?br /> 銆銆C緋葷粺鎻愪緵浜嗕赴瀵岀殑緋葷粺鏂囦歡錛岀О涓哄簱鏂囦歡錛孋鐨勫簱鏂囦歡鍒嗕負涓ょ被錛屼竴綾繪槸鎵╁睍鍚嶄負".h"鐨勬枃浠訛紝縐頒負澶存枃浠訛紝 鍦ㄥ墠闈㈢殑鍖呭惈鍛戒護涓垜浠凡澶氭浣跨敤榪囥傚湪".h"鏂囦歡涓寘鍚簡甯擱噺瀹氫箟銆?綾誨瀷瀹氫箟銆佸畯瀹氫箟銆佸嚱鏁板師鍨嬩互鍙婂悇縐嶇紪璇戦夋嫨璁劇疆絳変俊鎭傚彟涓綾繪槸鍑芥暟搴擄紝鍖呮嫭浜嗗悇縐嶅嚱鏁扮殑鐩爣浠g爜錛屼緵鐢ㄦ埛鍦ㄧ▼搴忎腑璋冪敤銆?閫氬父鍦ㄧ▼搴忎腑璋冪敤涓涓簱鍑芥暟鏃訛紝瑕佸湪璋冪敤涔嬪墠鍖呭惈璇ュ嚱鏁板師鍨嬫墍鍦ㄧ殑".h" 鏂囦歡銆?br /> 銆銆鍦ㄩ檮褰曚腑緇欏嚭浜嗗叏閮ㄥ簱鍑芥暟銆?br /> ALLOC.H 銆銆銆璇存槑鍐呭瓨綆$悊鍑芥暟(鍒嗛厤銆侀噴鏀劇瓑)銆?br />ASSERT.H 銆 銆瀹氫箟 assert璋冭瘯瀹忋?br />BIOS.H 銆銆 銆璇存槑璋冪敤IBM鈥擯C ROM BIOS瀛愮▼搴忕殑鍚勪釜鍑芥暟銆?br />CONIO.H 銆銆銆璇存槑璋冪敤DOS鎺у埗鍙癐/O瀛愮▼搴忕殑鍚勪釜鍑芥暟銆?br />CTYPE.H 銆銆銆鍖呭惈鏈夊叧瀛楃鍒嗙被鍙婅漿鎹㈢殑鍚嶇被淇℃伅(濡?isalpha鍜宼oascii絳?銆?br />DIR.H 銆銆銆銆鍖呭惈鏈夊叧鐩綍鍜岃礬寰勭殑緇撴瀯銆佸畯瀹氫箟鍜屽嚱鏁般?br />DOS.H 銆銆銆銆瀹氫箟鍜岃鏄嶮SDOS鍜?086璋冪敤鐨勪竴浜涘父閲忓拰鍑芥暟銆?br />ERRON.H 銆銆銆瀹氫箟閿欒浠g爜鐨勫姪璁扮銆?br />FCNTL.H 銆銆銆瀹氫箟鍦ㄤ笌open搴撳瓙紼嬪簭榪炴帴鏃剁殑絎﹀彿甯擱噺銆?br />FLOAT.H 銆銆銆鍖呭惈鏈夊叧嫻偣榪愮畻鐨勪竴浜涘弬鏁板拰鍑芥暟銆?br />GRAPHICS.H 銆 璇存槑鏈夊叧鍥懼艦鍔熻兘鐨勫悇涓嚱鏁幫紝鍥懼艦閿欒浠g爜鐨勫父閲忓畾涔夛紝姝e涓嶅悓椹卞姩紼嬪簭鐨勫悇縐嶉鑹插鹼紝鍙婂嚱鏁扮敤鍒扮殑涓浜涚壒孌婄粨鏋勩?br />IO.H 銆銆銆銆 鍖呭惈浣庣駭I/O瀛愮▼搴忕殑緇撴瀯鍜岃鏄庛?br />LIMIT.H 銆銆銆鍖呭惈鍚勭幆澧冨弬鏁般佺紪璇戞椂闂撮檺鍒躲佹暟鐨勮寖鍥寸瓑淇℃伅銆?br />MATH.H 銆銆銆 璇存槑鏁板榪愮畻鍑芥暟錛岃繕瀹氫簡 HUGE VAL 瀹忥紝 璇存槑浜唌atherr鍜宮atherr瀛愮▼搴忕敤鍒扮殑鐗規畩緇撴瀯銆?br />MEM.H 銆銆銆銆璇存槑涓浜涘唴瀛樻搷浣滃嚱鏁?鍏朵腑澶у鏁頒篃鍦⊿TRING.H 涓鏄?銆?br />PROCESS.H 銆銆璇存槑榪涚▼綆$悊鐨勫悇涓嚱鏁幫紝spawn鈥﹀拰EXEC 鈥﹀嚱鏁扮殑緇撴瀯璇存槑銆?br />SETJMP.H 銆銆 瀹氫箟longjmp鍜宻etjmp鍑芥暟鐢ㄥ埌鐨刯mp buf綾誨瀷錛?璇存槑榪欎袱涓嚱鏁般?br />SHARE.H 銆銆銆瀹氫箟鏂囦歡鍏變韓鍑芥暟鐨勫弬鏁般?br />SIGNAL.H 銆銆 瀹氫箟SIG[ZZ(Z] [ZZ)]IGN鍜孲IG[ZZ(Z] [ZZ)]DFL甯擱噺錛岃鏄巖ajse鍜宻ignal涓や釜鍑芥暟銆?br />STDARG.H 銆銆 瀹氫箟璇誨嚱鏁板弬鏁拌〃鐨勫畯銆?濡倂printf,vscarf鍑芥暟)銆?br />STDDEF.H 銆銆 瀹氫箟涓浜涘叕鍏辨暟鎹被鍨嬪拰瀹忋?br />STDIO.H 銆銆銆瀹氫箟Kernighan鍜孯itchie鍦║nix System V 涓畾涔夌殑鏍囧噯鍜屾墿灞曠殑綾誨瀷鍜屽畯銆傝繕瀹氫箟鏍囧噯I/O 棰勫畾涔夋祦錛歴tdin,stdout鍜宻tderr錛岃鏄?I/O嫻佸瓙紼嬪簭銆?br />STDLIB.H 銆銆 璇存槑涓浜涘父鐢ㄧ殑瀛愮▼搴忥細杞崲瀛愮▼搴忋佹悳绱? 鎺掑簭瀛愮▼搴忕瓑銆?br />STRING.H 銆銆 璇存槑涓浜涗覆鎿嶄綔鍜屽唴瀛樻搷浣滃嚱鏁般?br />SYS\STAT.H 銆 瀹氫箟鍦ㄦ墦寮鍜屽垱寤烘枃浠舵椂鐢ㄥ埌鐨勪竴浜涚鍙峰父閲忋?br />SYS\TYPES.H 銆璇存槑ftime鍑芥暟鍜宼imeb緇撴瀯銆?br />SYS\TIME.H 銆 瀹氫箟鏃墮棿鐨勭被鍨媡ime[ZZ(Z] [ZZ)]t銆?br />TIME.H 銆銆銆 瀹氫箟鏃墮棿杞崲瀛愮▼搴廰sctime銆乴ocaltime鍜実mtime鐨勭粨鏋勶紝ctime銆?difftime銆?gmtime銆?localtime鍜宻time鐢ㄥ埌鐨勭被鍨嬶紝騫舵彁渚涜繖浜涘嚱鏁扮殑鍘熷瀷銆?br />VALUE.H 銆銆銆瀹氫箟涓浜涢噸瑕佸父閲忥紝 鍖呮嫭渚濊禆浜庢満鍣ㄧ‖浠剁殑鍜屼負涓嶶nix System V鐩稿吋瀹硅岃鏄庣殑涓浜涘父閲忥紝鍖呮嫭嫻偣鍜屽弻綺懼害鍊肩殑鑼冨洿銆?br /> ]]> UNIX緋葷粺緙栫▼甯哥敤搴撳嚱鏁拌鏄嶽杞澆] http://www.shnenglu.com/jht/archive/2006/05/31/7928.html瀛f旦 瀛f旦 Wed, 31 May 2006 05:17:00 GMT http://www.shnenglu.com/jht/archive/2006/05/31/7928.html http://www.shnenglu.com/jht/comments/7928.html http://www.shnenglu.com/jht/archive/2006/05/31/7928.html#Feedback 0 http://www.shnenglu.com/jht/comments/commentRss/7928.html http://www.shnenglu.com/jht/services/trackbacks/7928.html
聽
UNIX緋葷粺涓虹▼搴忓憳鎻愪緵浜嗚澶氬瓙紼嬪簭,榪欎簺瀛愮▼搴忓彲瀛樺彇鍚勭瀹夊叏灞炴?鏈? 浜涙槸淇℃伅瀛愮▼搴?榪斿洖鏂囦歡灞炴?瀹為檯鐨勫拰鏈夋晥鐨刄ID,GID絳変俊鎭?鏈変簺瀛愮▼搴忓彲 鏀瑰彉鏂囦歡灞炴?UID,GID絳夋湁浜涘鐞嗗彛浠ゆ枃浠跺拰灝忕粍鏂囦歡,榪樻湁浜涘畬鎴愬姞瀵嗗拰瑙e瘑. 鏈枃涓昏璁ㄨ鏈夊叧緋葷粺瀛愮▼搴?鏍囧噯C搴撳瓙紼嬪簭鐨勫畨鍏?濡備綍鍐欏畨鍏ㄧ殑C紼嬪簭 騫朵粠root鐨勮搴︿粙緇嶇▼搴忚璁?浠呰兘琚玶oot璋冪敤鐨勫瓙紼嬪簭). 1.緋葷粺瀛愮▼搴? (1)I/O瀛愮▼搴? *creat():寤虹珛涓涓柊鏂囦歡鎴栭噸鍐欎竴涓殏瀛樻枃浠? 闇瑕佷袱涓弬鏁?鏂囦歡鍚嶅拰瀛樺彇璁稿彲鍊?8榪涘埗鏂瑰紡).濡? creat(鈥?usr/pat/read_write鈥?0666) /* 寤虹珛瀛樺彇璁稿彲鏂瑰紡涓?666鐨勬枃浠?*/ 璋冪敤姝ゅ瓙紼嬪簭鐨勮繘紼嬪繀欏昏鏈夊緩绔嬬殑鏂囦歡鐨勬墍鍦ㄧ洰褰曠殑鍐欏拰鎵ц璁稿彲,緗? 緇檆reat()鐨勮鍙柟寮忓彉閲忓皢琚玼mask()璁劇疆鐨勬枃浠跺緩绔嬪睆钄藉兼墍淇敼,鏂? 鏂囦歡鐨勬墍鏈夎呭拰灝忕粍鐢辨湁鏁堢殑UID鍜孏ID鍐沖畾. 榪斿洖鍊間負鏂板緩鏂囦歡鐨勬枃浠舵弿榪扮. *fstat():瑙佸悗闈㈢殑stat(). *open():鍦–紼嬪簭鍐呴儴鎵撳紑鏂囦歡. 闇瑕佷袱涓弬鏁?鏂囦歡璺緞鍚嶅拰鎵撳紑鏂瑰紡(I,O,I&O). 濡傛灉璋冪敤姝ゅ瓙紼嬪簭鐨勮繘紼嬫病鏈夊浜庤鎵撳紑鐨勬枃浠剁殑姝g‘瀛樺彇璁稿彲(鍖呮嫭鏂? 浠惰礬寰勪笂鎵鏈夌洰褰曞垎閲忕殑鎼滅儲璁稿彲),灝嗕細寮曡搗鎵ц澶辮觸. 濡傛灉姝ゅ瓙紼嬪簭琚皟鐢ㄥ幓鎵撳紑涓嶅瓨鍦ㄧ殑鏂囦歡,闄ら潪璁劇疆浜哋_CREAT鏍囧織,璋冪敤 灝嗕笉鎴愬姛.姝ゆ椂,鏂版枃浠剁殑瀛樺彇璁稿彲浣滀負絎笁涓弬鏁?鍙鐢ㄦ埛鐨剈mask淇? 鏀?. 褰撴枃浠惰榪涚▼鎵撳紑鍚庡啀鏀瑰彉璇ユ枃浠舵垨璇ユ枃浠舵墍鍦ㄧ洰褰曠殑瀛樺彇璁稿彲,涓嶅獎鍝? 瀵硅鏂囦歡鐨処/O鎿嶄綔. *read():浠庡凡鐢眔pen()鎵撳紑騫剁敤浣滆緭鍏ョ殑鏂囦歡涓淇℃伅. 瀹冨茍涓嶅叧蹇冭鏂囦歡鐨勫瓨鍙栬鍙?涓鏃︽枃浠朵綔涓鴻緭鍏ユ墦寮,鍗沖彲浠庤鏂囦歡涓 鍙栦俊鎭? *write():杈撳嚭淇℃伅鍒板凡鐢眔pen()鎵撳紑騫剁敤浣滆緭鍑虹殑鏂囦歡涓?鍚宺ead()涓鏍? 瀹冧篃涓嶅叧蹇冭鏂囦歡鐨勫瓨鍙栬鍙? (2)榪涚▼鎺у埗 *exec()鏃?鍖呮嫭execl(),execv(),execle(),execve(),execlp()鍜宔xecvp() 鍙皢涓鍙墽琛屾ā蹇嫹璐濆埌璋冪敤榪涚▼鍗犳湁鐨勫瓨璐┖闂?姝h璋冪敤榪? 紼嬫墽琛岀殑紼嬪簭灝嗕笉澶嶅瓨鍦?鏂扮▼搴忓彇浠e叾浣嶇疆. 榪欐槸UNIX緋葷粺涓竴涓▼搴忚鎵ц鐨勫敮涓鏂瑰紡:鐢ㄥ皢鎵ц鐨勭▼搴忓鐩栧師鏈夌殑 紼嬪簭. 瀹夊叏娉ㄦ剰浜嬮」: . 瀹為檯鐨勫拰鏈夋晥鐨刄ID鍜孏ID浼犻掔粰鐢眅xec()璋冨叆鐨勪笉鍏鋒湁SUID鍜孲GID璁? 鍙殑紼嬪簭. . 濡傛灉鐢眅xec()璋冨叆鐨勭▼搴忔湁SUID鍜孲GID璁稿彲,鍒欐湁鏁堢殑UID鍜孏ID灝嗚 緗粰璇ョ▼搴忕殑鎵鏈夎呮垨灝忕粍. . 鏂囦歡寤虹珛灞忚斀鍊煎皢浼犻掔粰鏂扮▼搴? . 闄よ浜嗗exec()鍏抽棴鏍囧織鐨勬枃浠跺,鎵鏈夋墦寮鐨勬枃浠墮兘浼犻掔粰鏂扮▼搴? 鐢╢cntl()瀛愮▼搴忓彲璁劇疆瀵筫xec()鐨勫叧闂爣蹇? *fork():鐢ㄦ潵寤虹珛鏂拌繘紼?鍏跺緩绔嬬殑瀛愯繘紼嬫槸涓庤皟鐢╢ork()鐨勮繘紼?鐖惰繘紼? 瀹屽叏鐩稿悓鐨勬嫹璐?闄や簡榪涚▼鍙峰) 瀹夊叏娉ㄦ剰浜嬮」: . 瀛愯繘紼嬪皢緇ф壙鐖惰繘紼嬬殑瀹為檯鍜屾湁鏁堢殑UID鍜孏ID. . 瀛愯繘紼嬬戶鎵挎枃浠舵柟寮忓緩绔嬪睆钄藉? . 鎵鏈夋墦寮鐨勬枃浠朵紶緇欏瓙榪涚▼. *signal():鍏佽榪涚▼澶勭悊鍙兘鍙戠敓鐨勬剰澶栦簨浠跺拰涓柇. 闇瑕佷袱涓弬鏁?淇″彿緙栧彿鍜屼俊鍙峰彂鐢熸椂瑕佽皟鐢ㄧ殑瀛愮▼搴? 淇″彿緙栧彿瀹氫箟鍦╯ignal.h涓? 淇″彿鍙戠敓鏃惰璋冪敤鐨勫瓙紼嬪簭鍙敱鐢ㄦ埛緙栧啓,涔熷彲鐢ㄧ郴緇熺粰鐨勫?濡?SIG_IGN 鍒欎俊鍙峰皢琚拷鐣?SIG_DFL鍒欎俊鍙峰皢鎸夌郴緇熺殑緙虹渷鏂瑰紡澶勭悊. 濡傝澶氫笌瀹夊叏鏈夊叧鐨勭▼搴忕姝㈢粓绔彂涓柇淇℃伅(BREAK鍜孌ELETE),浠ュ厤鑷繁 琚敤鎴風粓绔粓姝㈣繍琛? 鏈変簺淇″彿浣縐NIX緋葷粺鐨勪駭鐢熻繘紼嬬殑鏍稿績杞偍(榪涚▼鎺ユ敹鍒頒俊鍙鋒椂鎵鍗犲唴瀛? 鐨勫唴瀹?鏈夋椂鍚湁閲嶈淇℃伅),姝ょ郴緇熷瓙紼嬪簭鍙敤浜庣姝㈡牳蹇冭漿鍌? (3)鏂囦歡灞炴? *access():媯嫻嬫寚瀹氭枃浠剁殑瀛樺彇鑳藉姏鏄惁絎﹀悎鎸囧畾鐨勫瓨鍙栫被鍨? 闇瑕佷袱涓弬鏁?鏂囦歡鍚嶅拰瑕佹嫻嬬殑瀛樺彇綾誨瀷(鏁存暟). 瀛樺彇綾誨瀷瀹氫箟濡備笅: 0: 媯鏌ユ枃浠舵槸鍚﹀瓨鍦? 1: 媯鏌ユ槸鍚﹀彲鎵ц(鎼滅儲) 2: 媯鏌ユ槸鍚﹀彲鍐? 3: 媯鏌ユ槸鍚﹀彲鍐欏拰鎵ц 4: 媯鏌ユ槸鍚﹀彲璇? 5: 媯鏌ユ槸鍚﹀彲璇誨拰鎵ц 6: 媯鏌ユ槸鍚﹀彲璇誨彲鍐欏彲鎵ц 榪欎簺鏁板瓧鐨勬剰涔夊拰chmod鍛戒護涓瀹氳鍙柟寮忕殑鏁板瓧鎰忎箟鐩稿悓. 姝ゅ瓙紼嬪簭浣跨敤瀹為檯鐨刄ID鍜孏ID媯嫻嬫枃浠剁殑瀛樺彇鑳藉姏(涓鑸湁鏁堢殑UID鍜孏ID 鐢ㄤ簬媯鏌ユ枃浠跺瓨鍙栬兘鍔?. 榪斿洖鍊? 0:璁稿彲 -1:涓嶈鍙? *chmod():灝嗘寚瀹氭枃浠舵垨鐩綍鐨勫瓨鍙栬鍙柟寮忔敼鎴愭柊鐨勮鍙柟寮? 闇瑕佷袱涓弬鏁?鏂囦歡鍚嶅拰鏂扮殑瀛樺彇璁稿彲鏂瑰紡. *chown():鍚屾椂鏀瑰彉鎸囧畾鏂囦歡鐨勬墍鏈夎呭拰灝忕粍鐨刄ID鍜孏ID.(涓巆hown鍛戒護涓? 鍚?. 鐢變簬姝ゅ瓙紼嬪簭鍚屾椂鏀瑰彉鏂囦歡鐨勬墍鏈夎呭拰灝忕粍,鏁呭繀欏誨彇娑堟墍鎿嶄綔鏂囦歡鐨凷UID 鍜孲GID璁稿彲,浠ラ槻姝㈢敤鎴峰緩绔婼UID鍜孲GID紼嬪簭,鐒跺悗榪愯chown()鍘昏幏寰楀埆 浜虹殑鏉冮檺. *stat():榪斿洖鏂囦歡鐨勭姸鎬?灞炴?. 闇瑕佷袱涓弬鏁?鏂囦歡璺緞鍚嶅拰涓涓粨鏋勬寚閽?鎸囧悜鐘舵佷俊鎭殑瀛樻斁 鐨勪綅緗? 緇撴瀯瀹氫箟濡備笅: st_mode: 鏂囦歡綾誨瀷鍜屽瓨鍙栬鍙柟寮? st_ino: I鑺傜偣鍙? st_dev: 鏂囦歡鎵鍦ㄨ澶囩殑ID st_rdev: 鐗瑰埆鏂囦歡鐨処D st_nlink: 鏂囦歡閾炬帴鏁? st_uid: 鏂囦歡鎵鏈夎呯殑UID st_gid: 鏂囦歡灝忕粍鐨凣ID st_size: 鎸夊瓧鑺傝鏁扮殑鏂囦歡澶у皬 st_atime: 鏈鍚庡瓨鍙栨椂闂?璇? st_mtime: 鏈鍚庝慨鏀規椂闂?鍐?鍜屾渶鍚庣姸鎬佺殑鏀瑰彉 st_ctime: 鏈鍚庣殑鐘舵佷慨鏀規椂闂? 榪斿洖鍊? 0:鎴愬姛 1:澶辮觸 *umask():灝嗚皟鐢ㄨ繘紼嬪強鍏跺瓙榪涚▼鐨勬枃浠跺緩绔嬪睆钄藉艱緗負鎸囧畾鐨勫瓨鍙栬鍙? 闇瑕佷竴涓弬鏁? 鏂扮殑鏂囦歡寤虹珛灞忓? (4)UID鍜孏ID鐨勫鐞? *getuid():榪斿洖榪涚▼鐨勫疄闄匲ID. *getgid():榪斿洖榪涚▼鐨勫疄闄匞ID. 浠ヤ笂涓や釜瀛愮▼搴忓彲鐢ㄤ簬紜畾鏄皝鍦ㄨ繍琛岃繘紼? *geteuid():榪斿洖榪涚▼鐨勬湁鏁圲ID. *getegid():榪斿洖榪涚▼鐨勬湁鏁圙ID. 浠ヤ笂涓や釜瀛愮▼搴忓彲鍦ㄤ竴涓▼搴忎笉寰椾笉紜畾瀹冩槸鍚﹀湪榪愯鏌愮敤鎴瘋屼笉鏄繍琛? 瀹冪殑鐢ㄦ埛鐨凷UID紼嬪簭鏃跺緢鏈夌敤,鍙皟鐢ㄥ畠浠潵媯鏌ョ‘璁ゆ湰紼嬪簭鐨勭‘鏄互璇? 鐢ㄦ埛鐨凷UID璁稿彲鍦ㄨ繍琛? *setuid():鐢ㄤ簬鏀瑰彉鏈夋晥鐨刄ID. 瀵逛簬涓鑸敤鎴?姝ゅ瓙紼嬪簭浠呭瑕佸湪鏈夋晥鍜屽疄闄呯殑UID涔嬮棿鍙樻崲鐨凷UID紼嬪簭鎵? 鏈夌敤(浠庡師鏈夋晥UID鍙樻崲涓哄疄闄匲ID),浠ヤ繚鎶よ繘紼嬩笉鍙楀埌瀹夊叏鍗卞.瀹為檯涓婅 榪涚▼涓嶅啀鏄疭UID鏂瑰紡榪愯. *setgid():鐢ㄤ簬鏀瑰彉鏈夋晥鐨凣ID. 2.鏍囧噯C搴? (1)鏍囧噯I/O *fopen():鎵撳紑涓涓枃浠朵緵璇繪垨鍐?瀹夊叏鏂歸潰鐨勮冭檻鍚宱pen()涓鏍? *fread(),getc(),fgetc(),gets(),scanf()鍜宖scanf():浠庡凡鐢眆open()鎵? 寮渚涜鐨勬枃浠朵腑璇誨彇淇℃伅.瀹冧滑騫朵笉鍏沖績鏂囦歡鐨勫瓨鍙栬鍙?榪欎竴鐐? 鍚宺ead(). *fwrite(),put(),fputc(),puts,fputs(),printf(),fprintf():鍐欎俊鎭埌 宸茬敱fopen()鎵撳紑渚涘啓鐨勬枃浠朵腑.瀹冧滑涔熶笉鍏沖績鏂囦歡鐨勫瓨鍙栬鍙? 鍚寃rite(). *getpass():浠庣粓绔笂璇昏嚦澶?涓瓧絎﹂暱鐨勫彛浠?涓嶅洖鏄劇敤鎴瘋緭鍏ョ殑瀛楃. 闇瑕佷竴涓弬鏁? 鎻愮ず淇℃伅. 璇ュ瓙紼嬪簭灝嗘彁紺轟俊鎭樉紺哄湪緇堢涓?紱佹瀛楃鍥炴樉鍔熻兘,浠?dev/tty璇誨彇鍙? 浠?鐒跺悗鍐嶆仮澶嶅瓧絎﹀洖鏄懼姛鑳?榪斿洖鍒氭暡鍏ョ殑鍙d護鐨勬寚閽? *popen():灝嗗湪(5)榪愯shell涓粙緇? (2)/etc/passwd澶勭悊 鏈変竴緇勫瓙紼嬪簭鍙/etc/passwd鏂囦歡榪涜鏂逛究鐨勫瓨鍙?鍙鏂囦歡璇誨彇鍒板叆鍙? 欏規垨鍐欐柊鐨勫叆鍙i」鎴栨洿鏂扮瓑絳? *getpwuid():浠?etc/passwd鏂囦歡涓幏鍙栨寚瀹氱殑UID鐨勫叆鍙i」. *getpwnam():瀵逛簬鎸囧畾鐨勭櫥褰曞悕,鍦?etc/passwd鏂囦歡媯绱㈠叆鍙i」. 浠ヤ笂涓や釜瀛愮▼搴忚繑鍥炰竴鎸囧悜passwd緇撴瀯鐨勬寚閽?璇ョ粨鏋勫畾涔夊湪 /usr/include/pwd.h涓?瀹氫箟濡備笅: struct passwd { char * pw_name; /* 鐧誨綍鍚?*/ char * pw_passwd; /* 鍔犲瘑鍚庣殑鍙d護 */ uid_t pw_uid; /* UID */ gid_t pw_gid; /* GID */ char * pw_age; /* 浠g悊淇℃伅 */ char * pw_comment; /* 娉ㄩ噴 */ char * pw_gecos; char * pw_dir; /* 涓葷洰褰?*/ char * pw_shell; /* 浣跨敤鐨剆hell */ }; *getpwent(),setpwent(),endpwent():瀵瑰彛浠ゆ枃浠朵綔鍚庣畫澶勭悊. 棣栨璋冪敤getpwent(),鎵撳紑/etc/passwd騫惰繑鍥炴寚鍚戞枃浠朵腑絎竴涓叆鍙i」鐨? 鎸囬拡,淇濇寔璋冪敤涔嬮棿鏂囦歡鐨勬墦寮鐘舵? 鍐嶈皟鐢╣etpwent()鍙『搴忓湴榪斿洖鍙d護鏂囦歡涓殑鍚勫叆鍙i」. 璋冪敤setpwent()鎶婂彛浠ゆ枃浠剁殑鎸囬拡閲嶆柊緗負鏂囦歡鐨勫紑濮嬪. 浣跨敤瀹屽彛浠ゆ枃浠跺悗璋冪敤endpwent()鍏抽棴鍙d護鏂囦歡. *putpwent():淇敼鎴栧鍔?etc/passwd鏂囦歡涓殑鍏ュ彛欏? 姝ゅ瓙紼嬪簭灝嗗叆鍙i」鍐欏埌涓涓寚瀹氱殑鏂囦歡涓?涓鑸槸涓涓復鏃舵枃浠?鐩存帴鍐欏彛 浠ゆ枃浠舵槸寰堝嵄闄╃殑.鏈濂藉湪鎵ц鍓嶅仛鏂囦歡灝侀攣,浣夸袱涓▼搴忎笉鑳藉悓鏃跺啓涓涓? 鏂囦歡.綆楁硶濡備笅: . 寤虹珛涓涓嫭绔嬬殑涓存椂鏂囦歡,鍗?etc/passnnn,nnn鏄疨ID鍙? . 寤虹珛鏂頒駭鐢熺殑涓存椂鏂囦歡鍜屾爣鍑嗕復鏃舵枃浠?etc/ptmp鐨勯摼,鑻ュ緩閾懼け璐? 鍒欎負鏈変漢姝e湪浣跨敤/etc/ptmp,絳夊緟鐩村埌/etc/ptmp鍙敤涓烘鎴栭鍑? . 灝?etc/passwd鎷瘋礉鍒?etc/ptmp,鍙姝ゆ枃浠跺仛浠諱綍淇敼. . 灝?etc/passwd縐誨埌澶囦喚鏂囦歡/etc/opasswd. . 寤虹珛/etc/ptmp鍜?etc/passwd鐨勯摼. . 鏂紑/etc/passnnn涓?etc/ptmp鐨勯摼. 娉ㄦ剰:涓存椂鏂囦歡搴斿緩绔嬪湪/etc鐩綍,鎵嶈兘淇濊瘉鏂囦歡澶勪簬鍚屼竴鏂囦歡緋葷粺涓?寤? 閾炬墠鑳芥垚鍔?涓斾復鏃舵枃浠朵笉浼氫笉瀹夊叏.姝ゅ,鑻ユ柊鏂囦歡宸插瓨鍦?鍗充究寤? 閾劇殑鏄痳oot鐢ㄦ埛,涔熷皢澶辮觸,浠庤屼繚璇佷簡涓鏃︿復鏃舵枃浠舵垚鍔熷湴寤洪摼鍚? 娌℃湁浜鴻兘鍐嶆彃榪涙潵騫叉壈.褰撶劧,浣跨敤涓存椂鏂囦歡鐨勭▼搴忓簲紜繚娓呴櫎鎵鏈? 涓存椂鏂囦歡,姝g‘鍦版崟鎹変俊鍙? (3)/etc/group鐨勫鐞? 鏈変竴緇勭被浼間簬鍓嶉潰鐨勫瓙紼嬪簭澶勭悊/etc/group鐨勪俊鎭?浣跨敤鏃跺繀欏葷敤include 璇彞灝?usr/include/grp.h鏂囦歡鍔犲叆鍒拌嚜宸辯殑紼嬪簭涓?璇ユ枃浠跺畾涔変簡group 緇撴瀯,灝嗙敱getgrnam(),getgrgid(),getgrent()榪斿洖group緇撴瀯鎸囬拡. *getgrnam():鍦?etc/group鏂囦歡涓悳绱㈡寚瀹氱殑灝忕粍鍚?鐒跺悗榪斿洖鎸囧悜灝忕粍鍏? 鍙i」鐨勬寚閽? *getgrgid():綾諱技浜庡墠涓瀛愮▼搴?涓嶅悓鐨勬槸鎼滅儲鎸囧畾鐨凣ID. *getgrent():榪斿洖group鏂囦歡涓殑涓嬩竴涓叆鍙i」. *setgrent():灝唃roup鏂囦歡鐨勬枃浠舵寚閽堟仮澶嶅埌鏂囦歡鐨勮搗鐐? *endgrent():鐢ㄤ簬瀹屾垚宸ヤ綔鍚?鍏抽棴group鏂囦歡. *getuid():榪斿洖璋冪敤榪涚▼鐨勫疄闄匲ID. *getpruid():浠etuid()榪斿洖鐨勫疄闄匲ID涓哄弬鏁?紜畾涓庡疄闄匲ID鐩稿簲鐨勭櫥褰? 鍚?鎴栨寚瀹氫竴UID涓哄弬鏁? *getlogin():榪斿洖鍦ㄧ粓绔笂鐧誨綍鐨勭敤鎴風殑鎸囬拡. 緋葷粺渚濇媯鏌TDIN,STDOUT,STDERR鏄惁涓庣粓绔浉鑱?涓庣粓绔浉鑱旂殑鏍囧噯杈? 鍏ョ敤浜庣‘瀹氱粓绔悕,緇堢鍚嶇敤浜庢煡鎵懼垪浜?etc/utmp鏂囦歡涓殑鐢ㄦ埛,璇ユ枃浠? 鐢眑ogin緇存姢,鐢眞ho紼嬪簭鐢ㄦ潵紜鐢ㄦ埛. *cuserid():棣栧厛璋冪敤getlogin(),鑻etlogin()榪斿洖NULL鎸囬拡,鍐嶈皟鐢? getpwuid(getuid()). *浠ヤ笅涓哄懡浠? *logname:鍒楀嚭鐧誨綍榪涚粓绔殑鐢ㄦ埛鍚? *who am i:鏄劇ず鍑鴻繍琛岃繖鏉″懡浠ょ殑鐢ㄦ埛鐨勭櫥褰曞悕. *id:鏄劇ず瀹為檯鐨刄ID鍜孏ID(鑻ユ湁鏁堢殑UID鍜孏ID鍜屽疄闄呯殑涓嶅悓鏃朵篃鏄劇ず鏈夋晥鐨? UID鍜孏ID)鍜岀浉搴旂殑鐧誨綍鍚? (4)鍔犲瘑瀛愮▼搴? 1977騫?鏈?NBS瀹e竷涓涓敤浜庣編鍥借仈閭︽斂搴淎DP緋葷粺鐨勭綉緇滅殑鏍囧噯鍔犲瘑娉?鏁? 鎹姞瀵嗘爣鍑嗗嵆DES鐢ㄤ簬闈炴満瀵嗗簲鐢ㄦ柟闈?DES涓嬈″鐞?4BITS鐨勫潡,56浣嶇殑鍔? 瀵嗛敭. *setkey(),encrypt():鎻愪緵鐢ㄦ埛瀵笵ES鐨勫瓨鍙? 姝や袱瀛愮▼搴忛兘鍙?4BITS闀跨殑瀛楃鏁扮粍,鏁扮粍涓殑姣忎釜鍏冪礌浠h〃涓涓綅,涓? 鎴?.setkey()璁劇疆灝嗘寜DES澶勭悊鐨勫姞瀵嗛敭,蹇界暐姣忕8浣嶆瀯鎴愪竴涓?6浣嶇殑鍔? 瀵嗛敭.encrypt()鐒跺悗鍔犲瘑鎴栬В瀵嗙粰瀹氱殑64BITS闀跨殑涓鍧?鍔犲瘑鎴栬В瀵嗗彇鍐? 浜庤瀛愮▼搴忕殑絎簩涓彉鍏?0:鍔犲瘑 1:瑙e瘑. *crypt():鏄疷NIX緋葷粺涓殑鍙d護鍔犲瘑紼嬪簭,涔熻/usr/lib/makekey鍛戒護璋冪敤. crypt()瀛愮▼搴忎笌crypt鍛戒護鏃犲叧,瀹冧笌/usr/lib/makekey涓鏍峰彇8涓瓧絎﹂暱 鐨勫叧閿瘝,2涓猻alt瀛楃.鍏抽敭璇嶉佺粰setkey(),salt瀛楃鐢ㄤ簬娣峰悎encrypt() 涓殑DES綆楁硶,鏈緇堣皟鐢╡ncrypt()閲嶅25嬈″姞瀵嗕竴涓浉鍚岀殑瀛楃涓? 榪斿洖鍔犲瘑鍚庣殑瀛楃涓叉寚閽? (5)榪愯shell *system():榪愯/bin/sh鎵ц鍏跺弬鏁版寚瀹氱殑鍛戒護,褰撴寚瀹氬懡浠ゅ畬鎴愭椂榪斿洖. *popen():綾諱技浜巗ystem(),涓嶅悓鐨勬槸鍛戒護榪愯鏃?鍏舵爣鍑嗚緭鍏ユ垨杈撳嚭鑱斿埌鐢? popen()榪斿洖鐨勬枃浠舵寚閽? 浜岃呴兘璋冪敤fork(),exec(),popen()榪樿皟鐢╬ipe(),瀹屾垚鍚勮嚜鐨勫伐浣?鍥犺? fork()鍜宔xec()鐨勫畨鍏ㄦ柟闈㈢殑鑰冭檻寮濮嬭搗浣滅敤. 3.鍐欏畨鍏ㄧ殑C紼嬪簭 涓鑸湁涓ゆ柟闈㈢殑瀹夊叏闂,鍦ㄥ啓紼嬪簭鏃跺繀欏昏冭檻: (1)紜繚鑷繁寤虹珛鐨勪換浣曚復鏃舵枃浠朵笉鍚湁鏈哄瘑鏁版嵁,濡傛灉鏈夋満瀵嗘暟鎹?璁劇疆 涓存椂鏂囦歡浠呭鑷繁鍙/鍐?紜繚寤虹珛涓存椂鏂囦歡鐨勭洰褰曚粎瀵硅嚜宸卞彲鍐? (2)紜繚鑷繁瑕佽繍琛岀殑浠諱綍鍛戒護(閫氳繃system(),popen(),execlp(), execvp()榪愯鐨勫懡浠?鐨勭‘鏄嚜宸辮榪愯鐨勫懡浠?鑰屼笉鏄叾瀹冧粈涔堝懡 浠?灝ゅ叾鏄嚜宸辯殑紼嬪簭涓篠UID鎴朣GID璁稿彲鏃惰灝忓績. 絎竴鏂歸潰姣旇緝綆鍗?鍦ㄧ▼搴忓紑濮嬪墠璋冪敤umask(077).鑻ヨ浣挎枃浠跺鍏朵粬浜哄彲 璇?鍙啀璋僣hmod(),涔熷彲鐢ㄤ笅榪拌鍚嶅緩绔嬩竴涓濅笉鍙鈥濈殑涓存椂鏂囦歡. creat(鈥?tmp/xxx鈥?0); file=open(鈥?tmp/xxx鈥?O_RDWR); unlink(鈥?tmp/xxx鈥?; 鏂囦歡/tmp/xxx寤虹珛鍚?鎵撳紑,鐒跺悗鏂紑閾?浣嗘槸鍒嗛厤緇欒鏂囦歡鐨勫瓨鍌ㄥ櫒騫舵湭鍒? 闄?鐩村埌鏈緇堟寚鍚戣鏂囦歡鐨勬枃浠墮氶亾琚叧闂椂鎵嶈鍒犻櫎.鎵撳紑璇ユ枃浠剁殑榪涚▼ 鍜屽畠鐨勪換浣曞瓙榪涚▼閮藉彲瀛樺彇榪欎釜涓存椂鏂囦歡,鑰屽叾瀹冭繘紼嬩笉鑳藉瓨鍙栬鏂囦歡,鍥? 涓哄畠鍦?tmp涓殑鐩綍欏瑰凡琚玼nlink()鍒犻櫎. 絎簩鏂歸潰姣旇緝澶嶆潅鑰屽井濡?鐢變簬system(),popen(),execlp(),execvp()鎵ц 鏃?鑻ヤ笉緇欏嚭鎵ц鍛戒護鐨勫叏璺緞,灝辮兘鈥濋獥鈥濈敤鎴風殑紼嬪簭鍘繪墽琛屼笉鍚岀殑鍛戒護.鍥? 涓虹郴緇熷瓙紼嬪簭鏄牴鎹甈ATH鍙橀噺紜畾鍝欏哄簭鎼滅儲鍝簺鐩綍,浠ュ鎵炬寚瀹氱殑鍛? 浠?榪欑О涓篠UID闄蜂簳.鏈瀹夊叏鐨勫姙娉曟槸鍦ㄨ皟鐢╯ystem()鍓嶅皢鏈夋晥UID鏀瑰彉鎴愬疄 闄匲ID,鍙︿竴縐嶆瘮杈冨ソ鐨勬柟娉曟槸浠ュ叏璺緞鍚嶅懡浠や綔涓哄弬鏁?execl(),execv(), execle(),execve()閮借姹傚叏璺緞鍚嶄綔涓哄弬鏁?鏈夊叧SUID闄蜂簳鐨勫彟涓鏂瑰紡鏄? 鍦ㄧ▼搴忎腑璁劇疆PATH,鐢變簬system()鍜宲open()閮藉惎鍔╯hell,鏁呭彲浣跨敤shell鍙? 娉?濡? system(鈥漃ATH=/bin:/usr/bin cd鈥?; 榪欐牱鍏佽鐢ㄦ埛榪愯緋葷粺鍛戒護鑰屼笉蹇呯煡閬撹鎵ц鐨勫懡浠ゅ湪鍝釜鐩綍涓?浣嗚繖縐? 鏂規硶涓嶈兘鐢ㄤ簬execlp(),execvp()涓?鍥犱負瀹冧滑涓嶈兘鍚姩shell鎵ц璋冪敤搴忓垪 浼犻掔殑鍛戒護瀛楃涓? 鍏充簬shell瑙i噴浼犻掔粰system()鍜宲open()鐨勫懡浠よ鐨勬柟寮?鏈変袱涓叾瀹冪殑闂? 棰? *shell浣跨敤IFS shell鍙橀噺涓殑瀛楃,灝嗗懡浠よ鍒嗚В鎴愬崟璇?閫氬父榪欎釜 shell鍙橀噺涓槸絀烘牸,tab,鎹㈣),濡侷FS涓槸/,瀛楃涓?bin/ed琚В閲婃垚鍗曡瘝 bin,鎺ヤ笅鏉ユ槸鍗曡瘝ed,浠庤屽紩璧峰懡浠よ鐨勬洸瑙? 鍐嶅己璋冧竴嬈?鍦ㄩ氳繃鑷繁鐨勭▼搴忚繍琛屽彟涓涓▼搴忓墠,搴斿皢鏈夋晥UID鏀逛負瀹為檯鐨? UID,絳夊彟涓涓▼搴忛鍑哄悗,鍐嶅皢鏈夋晥UID鏀瑰洖鍘熸潵鐨勬湁鏁圲ID. SUID/SGID紼嬪簭鎸囧鍑嗗垯 (1)涓嶈鍐橲UID/SGID紼嬪簭,澶у鏁版椂鍊欐棤姝ゅ繀瑕? (2)璁劇疆SGID璁稿彲,涓嶈璁劇疆SUID璁稿彲.搴旂嫭鑷緩绔嬩竴涓柊鐨勫皬緇? (3)涓嶈鐢╡xec()鎵ц浠諱綍紼嬪簭.璁頒綇exec()涔熻system()鍜宲open()璋冪敤. . 鑻ヨ璋冪敤exec()(鎴杝ystem(),popen()),搴斾簨鍏堢敤setgid(getgid()) 灝嗘湁鏁圙ID緗姞瀹為檯GID. . 鑻ヤ笉鑳界敤setgid(),鍒欒皟鐢╯ystem()鎴杙open()鏃?搴旇緗甀FS: popen(鈥滻FS=\t\n;export IFS;/bin/ls鈥?鈥漴鈥?; . 浣跨敤瑕佹墽琛岀殑鍛戒護鐨勫叏璺緞鍚? . 鑻ヤ笉鑳戒嬌鐢ㄥ叏璺緞鍚?鍒欏簲鍦ㄥ懡浠ゅ墠鍏堣緗甈ATH: popen(鈥滻FS=\t\n;export IFS;PATH=/bin:/usr/bin;/bin/ls鈥?鈥漴鈥?; . 涓嶈灝嗙敤鎴瘋瀹氱殑鍙傛暟浼犵粰system()鎴杙open();鑻ユ棤娉曢伩鍏嶅垯搴旀鏌? 鍙樺厓瀛楃涓蹭腑鏄惁鏈夌壒孌婄殑shell瀛楃. . 鑻ョ敤鎴鋒湁涓ぇ紼嬪簭,璋冪敤exec()鎵ц璁稿鍏跺畠紼嬪簭,榪欑鎯呭喌涓嬩笉瑕佸皢 澶х▼搴忚緗負SGID璁稿彲.鍙互鍐欎竴涓?鎴栧涓?鏇村皬,鏇寸畝鍗曠殑SGID紼嬪簭 鎵ц蹇呴』鍏鋒湁SGID璁稿彲鐨勪換鍔?鐒跺悗鐢卞ぇ紼嬪簭鎵ц榪欎簺灝廠GID紼嬪簭. (4)鑻ョ敤鎴峰繀欏諱嬌鐢⊿UID鑰屼笉鏄疭GID,浠ョ浉鍚岀殑欏哄簭璁頒綇(2),(3)欏瑰唴瀹?騫? 鐩稿簲璋冩暣.涓嶈璁劇疆root鐨凷UID璁稿彲.閫変竴涓叾瀹冩埛澶? (5)鑻ョ敤鎴鋒兂緇欎簣鍏朵粬浜烘墽琛岃嚜宸辯殑shell紼嬪簭鐨勮鍙?浣嗗張涓嶆兂璁╀粬浠兘 璇昏紼嬪簭,鍙皢紼嬪簭璁劇疆涓轟粎鎵ц璁稿彲,騫跺彧鑳介氳繃鑷繁鐨剆hell紼嬪簭鏉? 榪愯. 緙栬瘧,瀹夎SUID/SGID紼嬪簭鏃跺簲鎸変笅闈㈢殑鏂規硶 (1)紜繚鎵鏈夌殑SUID(SGID)紼嬪簭鏄浜庡皬緇勫拰鍏朵粬鐢ㄦ埛閮芥槸涓嶅彲鍐欑殑,瀛樺彇 鏉冮檺鐨勯檺鍒朵綆浜?755(2755)灝嗗甫鏉ラ夯鐑?鍙兘鏇翠弗鏍?4111(2111)灝嗕嬌 鍏朵粬浜烘棤娉曞鎵劇▼搴忎腑鐨勫畨鍏ㄦ紡媧? (2)璀︽儠澶栨潵鐨勭紪鐮佸拰make/install鏂規硶 . 鏌愪簺make/install鏂規硶涓嶅姞閫夋嫨鍦板緩绔婼UID/SGID紼嬪簭. . 媯鏌ヨ繚鑳屼笂榪版寚瀵煎師鍒欑殑SUID/SGID璁稿彲鐨勭紪鐮? . 媯鏌akefile鏂囦歡涓彲鑳藉緩绔婼UID/SGID鏂囦歡鐨勫懡浠? 4.root紼嬪簭鐨勮璁? 鏈夎嫢騫蹭釜瀛愮▼搴忓彲浠ヤ粠鏈夋晥UID涓?鐨勮繘紼嬩腑璋冪敤.璁稿鍓嶉潰鎻愬埌鐨勫瓙紼嬪簭, 褰撲粠root榪涚▼涓皟鐢ㄦ椂,灝嗗畬鎴愬拰鍘熸潵涓嶅悓鐨勫鐞?涓昏鏄拷鐣ヤ簡璁稿彲鏉冮檺鐨勬 鏌? 鐢眗oot鐢ㄦ埛榪愯鐨勭▼搴忓綋鐒舵槸root榪涚▼(SUID闄ゅ),鍥犳湁鏁圲ID鐢ㄤ簬紜畾鏂? 浠剁殑瀛樺彇鏉冮檺,鎵浠ヤ粠鍏鋒湁root鐨勭▼搴忎腑,璋冪敤fork()浜х敓鐨勮繘紼?涔熸槸root榪涚▼. (1)setuid():浠巖oot榪涚▼璋冪敤setuid()鏃?鍏跺鐞嗘湁鎵涓嶅悓,setuid()灝嗘妸鏈? 鏁堢殑鍜屽疄闄呯殑UID閮界疆涓烘寚瀹氱殑鍊?榪欎釜鍊煎彲浠ユ槸浠諱綍鏁村瀷鏁?鑰屽闈瀝oot 榪涚▼鍒欎粎鑳戒互瀹為檯UID鎴栨湰榪涚▼鍘熸潵鏈夋晥鐨刄ID涓哄彉閲忓艱皟鐢╯etuid(). (2)setgid():鍦ㄧ郴緇熻繘紼嬩腑璋冪敤setgid()鏃?涓巗etuid()綾諱技,灝嗗疄闄呭拰鏈夋晥 鐨凣ID閮芥敼鍙樻垚鍏跺弬鏁版寚瀹氱殑鍊? * 璋冪敤浠ヤ笂涓や釜瀛愮▼搴忔椂,搴斿綋娉ㄦ剰涓嬮潰鍑犵偣: . 璋冪敤涓嬈etuid()(setgid())灝嗗悓鏃惰緗湁鏁堝拰瀹為檯UID(GID),鐙珛鍒? 鍒緗湁鏁堟垨瀹為檯UID(GID)鍥虹劧寰堝ソ,浣嗘棤娉曞仛鍒拌繖鐐? . setuid()(setgid())鍙皢鏈夋晥鍜屽疄闄匲ID(GID)璁劇疆鎴愪換浣曟暣鍨嬫暟,鍏舵暟 鍊間笉蹇呬竴瀹氫笌/etc/passwd(/etc/group)涓敤鎴?灝忕粍)鐩稿叧鑱? . 涓鏃︾▼搴忎互涓涓敤鎴風殑UID浜唖etuid(),璇ョ▼搴忓氨涓嶅啀鍋氫負root榪愯,涔? 涓嶅彲鑳藉啀鑾穜oot鐗規潈. (3)chown():褰搑oot榪涚▼榪愯chown()鏃?chown()灝嗕笉鍒犻櫎鏂囦歡鐨凷UID鍜?鎴? SGID璁稿彲,浣嗗綋闈瀝oot榪涚▼榪愯chown()鏃?chown()灝嗗彇娑堟枃浠剁殑SUID鍜? 鎴朣GID璁稿彲. (4)chroot():鏀瑰彉榪涚▼瀵規牴鐩綍鐨勬蹇?璋冪敤chroot()鍚?榪涚▼灝變笉鑳芥妸褰撳墠 宸ヤ綔鐩綍鏀瑰彉鍒版柊鐨勬牴鐩綍浠ヤ笂鐨勪換涓鐩綍,鎵鏈変互/寮濮嬬殑璺緞鎼滅儲,閮? 浠庢柊鐨勬牴鐩綍寮濮? (5)mknod():鐢ㄤ簬寤虹珛涓涓枃浠?綾諱技浜巆reat(),宸埆鏄痬knod()涓嶈繑鍥炴墍鎵撳紑 鏂囦歡鐨勬枃浠舵弿榪扮,騫朵笖鑳藉緩绔嬩換浣曠被鍨嬬殑鏂囦歡(鏅氭枃浠?鐗規畩鏂囦歡,鐩綍 鏂囦歡).鑻ヤ粠闈瀝oot榪涚▼璋冪敤mknod()灝嗘墽琛屽け璐?鍙湁寤虹珛FIFO鐗瑰埆鏂囦歡 (鏈夊悕綆¢亾鏂囦歡)鏃朵緥澶?鍏跺畠浠諱綍鎯呭喌涓?蹇呴』浠巖oot榪涚▼璋冪敤mknod().鐢? 浜巆reat()浠呰兘寤虹珛鏅氭枃浠?mknod()鏄緩绔嬬洰褰曟枃浠剁殑鍞竴閫斿緞,鍥犺屼粎
鏈塺oot鑳藉緩绔嬬洰褰?榪欏氨鏄負浠涔坢kdir鍛戒護鍏鋒湁SUID璁稿彲騫跺睘root鎵鏈? 涓鑸笉浠庣▼搴忎腑璋冪敤mknod().閫氬父鐢?etc/mknod鍛戒護寤虹珛鐗瑰埆璁懼鏂囦歡鑰? 榪欎簺鏂囦歡涓鑸笉鑳藉湪浣跨敤鐫鏃跺緩绔嬪拰鍒犻櫎,mkdir鍛戒護鐢ㄤ簬寤虹珛鐩綍.褰撶敤 mknod()寤虹珛鐗瑰埆鏂囦歡鏃?搴斿綋娉ㄦ剰紜粠鎵寤虹殑鐗瑰埆鏂囦歡涓嶅厑璁稿瓨鍙栧唴瀛? 紓佺洏,緇堢鍜屽叾瀹冭澶? (6)unlink():鐢ㄤ簬鍒犻櫎鏂囦歡.鍙傛暟鏄鍒犻櫎鏂囦歡鐨勮礬寰勫悕鎸囬拡.褰撴寚瀹氫簡鐩綍 鏃?蹇呴』浠巖oot榪涚▼璋冪敤unlink(),榪欐槸蹇呴』浠巖oot榪涚▼璋冪敤unlink()鐨勫敮 涓鎯呭喌,榪欏氨鏄負浠涔坮mdir鍛戒護鍏鋒湁root鐨凷GID璁稿彲鐨勫師鍥? (7)mount(),umount():鐢眗oot榪涚▼璋冪敤,鍒嗗埆鐢ㄤ簬瀹夎鍜屾媶鍗告枃浠剁郴緇?榪欎袱 涓瓙紼嬪簭涔熻mount鍜寀mount鍛戒護璋冪敤,鍏跺弬鏁板熀鏈拰鍛戒護鐨勫弬鏁扮浉鍚?璋? 鐢╩ount(),闇瑕佺粰鍑轟竴涓壒鍒枃浠跺拰涓涓洰褰曠殑鎸囬拡,鐗瑰埆鏂囦歡涓婄殑鏂囦歡 緋葷粺灝卞皢瀹夎鍦ㄨ鐩綍涓?璋冪敤鏃惰繕瑕佺粰鍑轟竴涓爣璇嗛夐」,鎸囧畾琚畨瑁呯殑鏂? 浠剁郴緇熻琚/鍐?0)榪樻槸浠呰(1).umount()鐨勫弬鏁版槸瑕佷竴涓鎷嗗嵏鐨勭壒鍒? 鏂囦歡鐨勬寚閽? 鏈枃鐢眎sbase鎴愬憳緙栬瘧鎴栧師鍒涳紝濡傝杞澆璇蜂繚鎸佹枃绔犵殑瀹屾暣鎬?
]]>[杞琞C++涓被鐨勫鎬佷笌铏氬嚱鏁扮殑浣跨敤 http://www.shnenglu.com/jht/archive/2006/05/05/6647.html瀛f旦 瀛f旦 Fri, 05 May 2006 09:37:00 GMT http://www.shnenglu.com/jht/archive/2006/05/05/6647.html http://www.shnenglu.com/jht/comments/6647.html http://www.shnenglu.com/jht/archive/2006/05/05/6647.html#Feedback 0 http://www.shnenglu.com/jht/comments/commentRss/6647.html http://www.shnenglu.com/jht/services/trackbacks/6647.html 闃呰鍏ㄦ枃 ]]> [杞琞C/C+璇█struct娣卞眰鎺㈢儲 http://www.shnenglu.com/jht/archive/2006/05/05/6646.html瀛f旦 瀛f旦 Fri, 05 May 2006 09:26:00 GMT http://www.shnenglu.com/jht/archive/2006/05/05/6646.html http://www.shnenglu.com/jht/comments/6646.html http://www.shnenglu.com/jht/archive/2006/05/05/6646.html#Feedback 0 http://www.shnenglu.com/jht/comments/commentRss/6646.html http://www.shnenglu.com/jht/services/trackbacks/6646.html
C/C+璇█struct娣卞眰鎺㈢儲
鍑哄錛歅Conline
[ 2005-08-11 10:30:50 ]
浣滆咃細瀹嬪疂鍗?
璐d換緙栬緫錛歺ietaoming
1. struct鐨勫法澶т綔鐢?/h4>
銆銆闈㈠涓涓漢鐨勫ぇ鍨婥/C++紼嬪簭鏃訛紝鍙湅鍏跺struct鐨勪嬌鐢ㄦ儏鍐墊垜浠氨鍙互瀵瑰叾緙栧啓鑰呯殑緙栫▼緇忛獙榪涜璇勪及銆傚洜涓轟竴涓ぇ鍨嬬殑C/C++紼嬪簭錛屽娍蹇呰娑夊強涓浜?鐢氳嚦澶ч噺)榪涜鏁版嵁緇勫悎鐨勭粨鏋勪綋錛岃繖浜涚粨鏋勪綋鍙互灝嗗師鏈剰涔夊睘浜庝竴涓暣浣撶殑鏁版嵁緇勫悎鍦ㄤ竴璧楓備粠鏌愮紼嬪害涓婃潵璇達紝浼氫笉浼氱敤struct錛屾庢牱鐢╯truct鏄尯鍒竴涓紑鍙戜漢鍛樻槸鍚﹀叿澶囦赴瀵屽紑鍙戠粡鍘嗙殑鏍囧織 鍦ㄧ綉緇滃崗璁侀氫俊鎺у埗銆佸祵鍏ュ紡緋葷粺鐨凜/C++緙栫▼涓紝鎴戜滑緇忓父瑕佷紶閫佺殑涓嶆槸綆鍗曠殑瀛楄妭嫻侊紙char鍨嬫暟緇勶級錛岃屾槸澶氱鏁版嵁緇勫悎璧鋒潵鐨勪竴涓暣浣擄紝鍏惰〃鐜板艦寮忔槸涓涓粨鏋勪綋銆?/p>
銆銆緇忛獙涓嶈凍鐨勫紑鍙戜漢鍛樺線寰灝嗘墍鏈夐渶瑕佷紶閫佺殑鍐呭渚濋『搴忎繚瀛樺湪char鍨嬫暟緇勪腑錛岄氳繃鎸囬拡鍋忕Щ鐨勬柟娉曚紶閫佺綉緇滄姤鏂囩瓑淇℃伅銆傝繖鏍峰仛緙栫▼澶嶆潅錛屾槗鍑洪敊錛岃屼笖涓鏃︽帶鍒舵柟寮忓強閫氫俊鍗忚鏈夋墍鍙樺寲錛岀▼搴忓氨瑕佽繘琛岄潪甯哥粏鑷寸殑淇敼銆?/p>
銆銆涓涓湁緇忛獙鐨勫紑鍙戣呭垯鐏墊椿榪愮敤緇撴瀯浣擄紝涓句竴涓緥瀛愶紝鍋囪緗戠粶鎴栨帶鍒跺崗璁腑闇瑕佷紶閫佷笁縐嶆姤鏂囷紝鍏舵牸寮忓垎鍒負packetA銆乸acketB銆乸acketC錛?/p>
struct
聽structA聽
{ 聽
int
聽a; 聽
char
聽b; }
;
struct
聽structB聽
{ 聽
char
聽a; 聽
short
聽b; }
;
struct
聽structC
{ 聽
int
聽a; 聽
char
聽b; 聽
float
聽c; }
聽
銆銆浼樼鐨勭▼搴忚璁¤呰繖鏍瘋璁′紶閫佺殑鎶ユ枃錛?/p>
struct
聽CommuPacket
{ 聽
int
聽iPacketType;銆銆
//
鎶ユ枃綾誨瀷鏍囧織
聽union銆銆銆銆銆銆
//
姣忔浼犻佺殑鏄笁縐嶆姤鏂囦腑鐨勪竴縐嶏紝浣跨敤union
聽
{ 聽聽
struct
聽structA聽packetA; 聽聽
struct
聽structB聽packetB; 聽聽
struct
聽structC聽packetC; 聽}
}
;
銆銆鍦ㄨ繘琛屾姤鏂囦紶閫佹椂錛岀洿鎺ヤ紶閫乻truct CommuPacket涓涓暣浣撱?/p>
銆銆鍋囪鍙戦佸嚱鏁扮殑鍘熷艦濡備笅錛?/p>
//
聽pSendData錛氬彂閫佸瓧鑺傛祦鐨勯鍦板潃錛宨Len錛氳鍙戦佺殑闀垮害
Send(
char
聽
*
聽pSendData,聽unsigned聽
int
聽聽iLen); 鍙戦佹柟鍙互鐩存帴榪涜濡備笅璋冪敤鍙戦乻truct聽CommuPacket鐨勪竴涓疄渚媠endCommuPacket錛?br /> Send(聽(
char
聽
*
)
&
sendCommuPacket聽,聽
sizeof
(CommuPacket)聽); 鍋囪鎺ユ敹鍑芥暟鐨勫師褰㈠涓嬶細
//
聽pRecvData錛氬彂閫佸瓧鑺傛祦鐨勯鍦板潃錛宨Len錛氳鎺ユ敹鐨勯暱搴?br />
//
榪斿洖鍊鹼細瀹為檯鎺ユ敹鍒扮殑瀛楄妭鏁?/span>
unsigned聽
int
聽Recv(
char
聽
*
聽pRecvData,聽unsigned聽
int
聽聽iLen)錛?/span>
銆銆鎺ユ敹鏂瑰彲浠ョ洿鎺ヨ繘琛屽涓嬭皟鐢ㄥ皢鎺ユ敹鍒扮殑鏁版嵁淇濆瓨鍦╯truct CommuPacket鐨勪竴涓疄渚媟ecvCommuPacket涓細
Recv(聽(
char
聽
*
)
&
recvCommuPacket聽,聽
sizeof
(CommuPacket)聽); 銆銆鎺ョ潃鍒ゆ柇鎶ユ枃綾誨瀷榪涜鐩稿簲澶勭悊錛?br />
switch
(recvCommuPacket.聽iPacketType)
{ 聽聽聽聽
case
聽PACKET_A: 聽聽聽聽鈥β犅犅犅?/span>
//
A綾繪姤鏂囧鐞?/span>
聽聽聽聽
break
; 聽聽聽聽
case
聽PACKET_B: 聽聽聽聽鈥︺聽聽
//
B綾繪姤鏂囧鐞?/span>
聽聽聽聽
break
; 聽聽聽聽
case
聽PACKET_C: 聽聽聽聽鈥β犅犅?/span>
//
C綾繪姤鏂囧鐞?/span>
聽聽聽聽
break
; }
銆銆浠ヤ笂紼嬪簭涓渶鍊煎緱娉ㄦ剰鐨勬槸
Send( (char *)&sendCommuPacket , sizeof(CommuPacket) ); Recv( (char *)&recvCommuPacket , sizeof(CommuPacket) );
銆銆涓殑寮哄埗綾誨瀷杞崲錛?char *)&sendCommuPacket銆?char *)&recvCommuPacket錛屽厛鍙栧湴鍧錛屽啀杞寲涓篶har鍨嬫寚閽堬紝榪欐牱灝卞彲浠ョ洿鎺ュ埄鐢ㄥ鐞嗗瓧鑺傛祦鐨勫嚱鏁般?/p>
銆銆鍒╃敤榪欑寮哄埗綾誨瀷杞寲錛屾垜浠繕鍙互鏂逛究紼嬪簭鐨勭紪鍐欙紝渚嬪瑕佸sendCommuPacket鎵澶勫唴瀛樺垵濮嬪寲涓?錛屽彲浠ヨ繖鏍瘋皟鐢ㄦ爣鍑嗗簱鍑芥暟memset()錛?/p>
memset((char *)&sendCommuPacket,0, sizeof(CommuPacket));
2. struct鐨勬垚鍛樺榻?/h4>
銆銆Intel銆佸井杞瓑鍏徃鏇劇粡鍑鴻繃涓閬撶被浼肩殑闈㈣瘯棰橈細
1
.聽#include聽
<
iostream.h
>
2
.聽#pragma聽pack(
8
)
3
.聽
struct
聽example1
4
.聽
{
5
.聽
short
聽a;
6
.聽
long
聽b;
7
.聽}
;
8
.聽
struct
聽example2
9
.聽
{
10
.聽
char
聽c;
11
.聽example1聽struct1; 聽
12
.聽
short
聽e;聽聽聽聽
13
.聽}
;
14
.聽#pragma聽pack()
15
.聽
int
聽main(
int
聽argc,聽
char
*
聽argv[])
16
.聽
{ 聽
17
.聽example2聽struct2;
18
.聽cout聽
<<
聽
sizeof
(example1)聽
<<
聽endl;
19
.聽cout聽
<<
聽
sizeof
(example2)聽
<<
聽endl;
20
.聽cout聽
<<
聽(unsigned聽
int
)(
&
struct2.struct1)聽
-
聽(unsigned聽
int
)(
&
struct2)聽
<<
聽endl;
21
.聽
return
聽
0
;
22
.聽}
銆銆闂▼搴忕殑杈撳叆緇撴灉鏄粈涔堬紵
銆銆絳旀鏄細
8 16 4
銆銆涓嶆槑鐧斤紵榪樻槸涓嶆槑鐧斤紵涓嬮潰涓涓閬撴潵錛?/p>
2.1 鑷劧瀵圭晫
銆銆struct鏄竴縐嶅鍚堟暟鎹被鍨嬶紝鍏舵瀯鎴愬厓绱犳棦鍙互鏄熀鏈暟鎹被鍨嬶紙濡俰nt銆乴ong銆乫loat絳夛級鐨勫彉閲忥紝涔熷彲浠ユ槸涓浜涘鍚堟暟鎹被鍨嬶紙濡俛rray銆乻truct銆乽nion絳夛級鐨勬暟鎹崟鍏冦傚浜庣粨鏋勪綋錛岀紪璇戝櫒浼氳嚜鍔ㄨ繘琛屾垚鍛樺彉閲忕殑瀵歸綈錛屼互鎻愰珮榪愮畻鏁堢巼銆傜己鐪佹儏鍐典笅錛岀紪璇戝櫒涓虹粨鏋勪綋鐨勬瘡涓垚鍛樻寜鍏惰嚜鐒跺鐣岋紙natural alignment錛夋潯浠跺垎閰嶇┖闂淬傚悇涓垚鍛樻寜鐓у畠浠澹版槑鐨勯『搴忓湪鍐呭瓨涓『搴忓瓨鍌紝絎竴涓垚鍛樼殑鍦板潃鍜屾暣涓粨鏋勭殑鍦板潃鐩稿悓銆?/p>
銆銆鑷劧瀵圭晫(natural alignment)鍗抽粯璁ゅ榻愭柟寮忥紝鏄寚鎸夌粨鏋勪綋鐨勬垚鍛樹腑size鏈澶х殑鎴愬憳瀵歸綈銆?/p>
銆銆渚嬪錛?/p>
struct naturalalign { 聽char a; 聽short b; 聽char c; };
銆銆鍦ㄤ笂榪扮粨鏋勪綋涓紝size鏈澶х殑鏄痵hort錛屽叾闀垮害涓?瀛楄妭錛屽洜鑰岀粨鏋勪綋涓殑char鎴愬憳a銆乧閮戒互2涓哄崟浣嶅榻愶紝sizeof(naturalalign)鐨勭粨鏋滅瓑浜?錛?/p>
銆銆濡傛灉鏀逛負錛?/p>
struct naturalalign { 聽char a; 聽int b; 聽char c; };
銆銆鍏剁粨鏋滄樉鐒朵負12銆?/p>
2.2鎸囧畾瀵圭晫
銆銆涓鑸湴錛屽彲浠ラ氳繃涓嬮潰鐨勬柟娉曟潵鏀瑰彉緙虹渷鐨勫鐣屾潯浠訛細
銆銆路 浣跨敤浼寚浠?pragma pack (n)錛岀紪璇戝櫒灝嗘寜鐓涓瓧鑺傚榻愶紱 銆銆路 浣跨敤浼寚浠?pragma pack ()錛屽彇娑堣嚜瀹氫箟瀛楄妭瀵歸綈鏂瑰紡銆?/p>
銆銆娉ㄦ剰錛?strong>濡傛灉#pragma pack (n)涓寚瀹氱殑n澶т簬緇撴瀯浣撲腑鏈澶ф垚鍛樼殑size錛屽垯鍏朵笉璧蜂綔鐢紝緇撴瀯浣撲粛鐒舵寜鐓ize鏈澶х殑鎴愬憳榪涜瀵圭晫銆?/strong>
銆銆渚嬪錛?/p>
#pragma pack (n) struct naturalalign { 聽char a; 聽int b; 聽char c; }; #pragma pack ()
銆銆褰搉涓?銆?銆?6鏃訛紝鍏跺榻愭柟寮忓潎涓鏍鳳紝sizeof(naturalalign)鐨勭粨鏋滈兘絳変簬12銆傝屽綋n涓?鏃訛紝鍏跺彂鎸ヤ簡浣滅敤錛屼嬌寰梥izeof(naturalalign)鐨勭粨鏋滀負8銆?/p>
銆銆鍦╒C++ 6.0緙栬瘧鍣ㄤ腑錛屾垜浠彲浠ユ寚瀹氬叾瀵圭晫鏂瑰紡錛堣鍥?錛夛紝鍏舵搷浣滄柟寮忎負渚濇閫夋嫨projetct > setting > C/C++鑿滃崟錛屽湪struct member alignment涓寚瀹氫綘瑕佺殑瀵圭晫鏂瑰紡銆?/p>
鍥?錛?/strong>
鍦╒C++ 6.0涓寚瀹氬鐣屾柟寮?/em>
銆銆鍙﹀錛岄氳繃__attribute((aligned (n)))涔熷彲浠ヨ鎵浣滅敤鐨勭粨鏋勪綋鎴愬憳瀵歸綈鍦╪瀛楄妭杈圭晫涓婏紝浣嗘槸瀹冭緝灝戣浣跨敤錛屽洜鑰屼笉浣滆緇嗚瑙c?/p>
2.3 闈㈣瘯棰樼殑瑙g瓟
銆銆鑷蟲錛屾垜浠彲浠ュIntel銆佸井杞殑闈㈣瘯棰樿繘琛屽叏闈㈢殑瑙g瓟銆?/p>
銆銆紼嬪簭涓2琛?pragma pack (8)铏界劧鎸囧畾浜嗗鐣屼負8錛屼絾鏄敱浜巗truct example1涓殑鎴愬憳鏈澶ize涓?錛坙ong鍙橀噺size涓?錛夛紝鏁卻truct example1浠嶇劧鎸?瀛楄妭瀵圭晫錛宻truct example1鐨剆ize涓?錛屽嵆絎?8琛岀殑杈撳嚭緇撴灉錛?/p>
銆銆struct example2涓寘鍚簡struct example1錛屽叾鏈韓鍖呭惈鐨勭畝鍗曟暟鎹垚鍛樼殑鏈澶ize涓?錛坰hort鍙橀噺e錛夛紝浣嗘槸鍥犱負鍏跺寘鍚簡struct example1錛岃宻truct example1涓殑鏈澶ф垚鍛榮ize涓?錛宻truct example2涔熷簲浠?瀵圭晫錛?pragma pack (8)涓寚瀹氱殑瀵圭晫瀵箂truct example2涔熶笉璧蜂綔鐢紝鏁?9琛岀殑杈撳嚭緇撴灉涓?6錛?/p>
銆銆鐢變簬struct example2涓殑鎴愬憳浠?涓哄崟浣嶅鐣岋紝鏁呭叾char鍙橀噺c鍚庡簲琛ュ厖3涓┖錛屽叾鍚庢墠鏄垚鍛榮truct1鐨勫唴瀛樼┖闂達紝20琛岀殑杈撳嚭緇撴灉涓?銆?/p>
3. C鍜孋++闂磗truct鐨勬繁灞傚尯鍒?/h4>
銆銆鍦–++璇█涓璼truct鍏鋒湁浜嗏滅被鈥濄鐨勫姛鑳斤紝鍏朵笌鍏抽敭瀛梒lass鐨勫尯鍒湪浜巗truct涓垚鍛樺彉閲忓拰鍑芥暟鐨勯粯璁よ闂潈闄愪負public錛岃宑lass鐨勪負private銆?/p>
銆銆渚嬪錛屽畾涔塻truct綾誨拰class綾伙細
struct structA { char a; 鈥?br />} class classB { 聽聽聽聽聽 char a; 聽聽聽聽聽 鈥?br />}
銆銆鍒欙細
struct A a; a.a = 'a';聽聽聽 //璁塊棶public鎴愬憳錛屽悎娉?br />classB b; b.a = 'a';聽聽聽 //璁塊棶private鎴愬憳錛屼笉鍚堟硶
銆銆璁稿鏂囩尞鍐欏埌榪欓噷灝辮涓哄凡緇忕粰鍑轟簡C++涓璼truct鍜宑lass鐨勫叏閮ㄥ尯鍒紝瀹炲垯涓嶇劧錛屽彟澶栦竴鐐歸渶瑕佹敞鎰忕殑鏄細
銆銆C++涓殑struct淇濇寔浜嗗C涓璼truct鐨勫叏闈㈠吋瀹癸紙榪欑鍚圕++鐨勫垵琛封斺斺渁 better c鈥濓級錛屽洜鑰岋紝涓嬮潰鐨勬搷浣滄槸鍚堟硶鐨勶細
//瀹氫箟struct struct structA { char a; char b; int c; }; structA a = {'a' , 'a' ,1};聽聽聽 //聽 瀹氫箟鏃剁洿鎺ヨ祴鍒濆?/p>
銆銆鍗硈truct鍙互鍦ㄥ畾涔夌殑鏃跺欑洿鎺ヤ互{ }瀵瑰叾鎴愬憳鍙橀噺璧嬪垵鍊鹼紝鑰宑lass鍒欎笉鑳斤紝鍦ㄧ粡鍏鎬功鐩妕hinking C++ 2nd edition銆嬩腑浣滆呭姝ょ偣榪涜浜嗗己璋冦?/p>
4. struct緙栫▼娉ㄦ剰浜嬮」
銆銆鐪嬬湅涓嬮潰鐨勭▼搴忥細
1. #include <iostream.h> 2. struct structA 3. { 4. int iMember; 5.聽char *cMember; 6. }; 7. int main(int argc, char* argv[]) 8. { 9.聽structA instant1,instant2; 10.char c = 'a'; 聽聽聽 11. instant1.iMember = 1; 12. instant1.cMember = &c; 聽 13.instant2 = instant1; 聽 14.cout << *(instant1.cMember) << endl; 聽 15.*(instant2.cMember) = 'b'; 聽 16. cout << *(instant1.cMember) << endl; 聽 17. return 0; }
銆銆14琛岀殑杈撳嚭緇撴灉鏄細a 銆銆16琛岀殑杈撳嚭緇撴灉鏄細b
銆銆Why?鎴戜滑鍦?5琛屽instant2鐨勪慨鏀規敼鍙樹簡instant1涓垚鍛樼殑鍊鹼紒
銆銆鍘熷洜鍦ㄤ簬13琛岀殑instant2 = instant1璧嬪艱鍙ラ噰鐢ㄧ殑鏄彉閲忛愪釜鎷瘋礉錛岃繖浣垮緱instant1鍜宨nstant2涓殑cMember鎸囧悜浜嗗悓涓鐗囧唴瀛橈紝鍥犺屽instant2鐨勪慨鏀逛篃鏄instant1鐨勪慨鏀廣?/p>
銆銆鍦–璇█涓紝褰撶粨鏋勪綋涓瓨鍦ㄦ寚閽堝瀷鎴愬憳鏃訛紝涓瀹氳娉ㄦ剰鍦ㄩ噰鐢ㄨ祴鍊艱鍙ユ椂鏄惁灝?涓疄渚嬩腑鐨勬寚閽堝瀷鎴愬憳鎸囧悜浜嗗悓涓鐗囧唴瀛樸?/p>
銆銆鍦–++璇█涓紝褰撶粨鏋勪綋涓瓨鍦ㄦ寚閽堝瀷鎴愬憳鏃訛紝鎴戜滑闇瑕侀噸鍐檚truct鐨勬嫹璐濇瀯閫犲嚱鏁板茍榪涜鈥?鈥濇搷浣滅閲嶈澆銆?/p>
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
亚洲黄页视频免费观看 |
午夜天堂精品久久久久
|
亚洲伊人伊色伊影伊综合网 |
亚洲激情成人在线 |
欧美电影免费观看网站 |
亚洲精品永久免费 |
日韩一区二区免费高清 |
欧美亚州在线观看 |
久久精品国产第一区二区三区最新章节 |
亚洲尤物在线 |
…久久精品99久久香蕉国产 |
亚洲丁香婷深爱综合 |
欧美先锋影音 |
另类欧美日韩国产在线 |
欧美激情成人在线 |
欧美一区视频 |
麻豆成人在线播放 |
午夜欧美电影在线观看 |
久久久精品国产99久久精品芒果 |
亚洲黑丝在线 |
亚洲免费中文 |
亚洲欧洲在线观看 |
午夜精品久久久久久久男人的天堂
|
久久久久久久网 |
亚洲美女淫视频 |
性欧美暴力猛交另类hd |
亚洲精品乱码 |
香蕉久久一区二区不卡无毒影院 |
亚洲国产精品一区二区久 |
亚洲网在线观看 |
91久久久在线 |
欧美一区二区在线视频 |
亚洲视频第一页 |
久久久av毛片精品 |
欧美一二三视频 |
欧美精品午夜 |
欧美gay视频 |
国产日韩免费 |
一区二区日韩免费看 |
永久免费视频成人 |
小黄鸭精品密入口导航 |
亚洲欧美久久久 |
欧美日韩精品一区视频
|
亚洲欧美日韩精品久久 |
欧美成人高清视频 |
美国成人毛片 |
国产在线麻豆精品观看 |
亚洲一区二区三区久久 |
在线视频一区观看 |
欧美成人a视频 |
欧美粗暴jizz性欧美20 |
国产一区二区三区久久久 |
亚洲一区一卡 |
亚洲欧美国产精品va在线观看 |
久热精品视频在线观看 |
欧美亚洲网站 |
久久精品国产亚洲一区二区三区 |
欧美日韩亚洲综合一区 |
亚洲美女91 |
亚洲最新合集 |
欧美猛交免费看 |
99国产精品一区 |
亚洲视频观看 |
国产精品国产三级国产 |
一区二区三区国产 |
亚洲男女毛片无遮挡 |
欧美午夜不卡 |
亚洲欧美日韩国产 |
久久米奇亚洲 |
亚洲高清不卡在线观看 |
久热国产精品视频 |
亚洲国产欧美一区 |
夜夜嗨av一区二区三区网站四季av |
欧美电影美腿模特1979在线看 |
亚洲成色www久久网站 |
99re6这里只有精品 |
欧美日韩综合不卡 |
亚洲无线视频 |
久久综合色播五月 |
日韩一级精品视频在线观看 |
欧美看片网站 |
亚洲欧美国产另类 |
久久资源av |
亚洲精品黄色 |
国产精品家庭影院 |
久久精品国产一区二区三区 |
亚洲高清不卡在线观看 |
国产精品99久久久久久人 |
国产欧美日韩亚洲 |
久久久亚洲国产美女国产盗摄 |
美女精品一区 |
一区二区三区蜜桃网 |
国产精品素人视频 |
久久久久久久久久久一区 |
亚洲欧洲精品一区 |
久久免费视频网站 |
9国产精品视频 |
国产视频亚洲精品 |
欧美精品一区二区三区高清aⅴ |
一本色道久久综合精品竹菊 |
久久夜色撩人精品 |
一区二区欧美在线观看 |
国产综合视频 |
国产精品超碰97尤物18 |
久久躁日日躁aaaaxxxx |
亚洲一区二区在线免费观看视频 |
噜噜噜在线观看免费视频日韩 |
亚洲视频在线观看 |
亚洲高清久久久 |
国产精品区免费视频 |
欧美国产高清 |
久久久久国产精品一区二区 |
在线视频亚洲欧美 |
欧美搞黄网站 |
久久亚洲综合色 |
亚洲欧美另类国产 |
亚洲免费黄色 |
1000精品久久久久久久久 |
国产精品美腿一区在线看
|
久久久蜜桃精品 |
亚洲欧美高清 |
亚洲午夜免费视频 |
亚洲精品国产精品乱码不99按摩 |
久久久综合激的五月天 |
欧美永久精品 |
亚洲黄色尤物视频 |
免费欧美在线 |
久久久久国产一区二区三区 |
亚洲一区二区免费视频 |
亚洲精品一区二区三区福利 |
欧美福利电影网 |
欧美插天视频在线播放 |
久久国产精品亚洲77777 |
亚洲女女做受ⅹxx高潮 |
国产精品99久久不卡二区 |
亚洲精品欧美日韩专区 |
亚洲国产精品一区二区尤物区 |
激情欧美国产欧美 |
一区二区三区在线视频免费观看 |
国内自拍亚洲 |
亚洲成人自拍视频 |
亚洲二区在线观看 |
亚洲国产91 |
亚洲国产精品一区二区第一页
|
国产日产欧美a一级在线 |
国产精品日韩在线 |
国产欧美精品一区二区三区介绍 |
欧美视频在线免费看 |
欧美视频一区二区三区四区 |
欧美性开放视频 |
国产欧美日韩激情 |
国产一区二区中文字幕免费看 |
国产日韩在线亚洲字幕中文 |
国语自产精品视频在线看 |
精品av久久久久电影 |
1024日韩 |
亚洲免费福利视频 |
一区二区免费在线播放 |
亚洲欧美视频在线 |
久久久之久亚州精品露出 |
欧美成人免费va影院高清 |
亚洲丶国产丶欧美一区二区三区
|
亚洲午夜国产成人av电影男同 |
亚洲一本大道在线 |
欧美在线视频免费观看 |
麻豆精品91 |
亚洲精品乱码久久久久久 |
一区二区三区精品久久久 |
欧美在线视频日韩 |
欧美国产先锋 |
国产日韩精品入口 |
亚洲高清资源综合久久精品 |
亚洲视频免费在线 |
久久青草福利网站 |
99re这里只有精品6 |
性欧美大战久久久久久久免费观看
|
亚洲一区二区三区乱码aⅴ |
久久精品首页 |
亚洲国产一区二区三区高清 |
亚洲一区视频在线 |
免费一区二区三区 |
国产欧美大片 |
99视频精品免费观看 |
久久爱另类一区二区小说 |
欧美风情在线观看 |
性欧美办公室18xxxxhd |
欧美日韩国产首页在线观看 |
国产一二三精品 |
亚洲视频免费在线观看 |
蜜臀91精品一区二区三区 |
一区二区三区日韩 |
欧美国产日本高清在线 |
激情综合色丁香一区二区 |
亚洲午夜激情网页 |
亚洲国产精品久久久久婷婷老年 |
性久久久久久久久 |
国产精品麻豆va在线播放 |
亚洲精品影视 |
欧美黄色免费 |
久久国产精品第一页 |