BBSˮľÇ廪վ¡Ã¾«»ªÇø

·¢ÐÅÈË: SuperSB (¹ÂÓ¥), ÐÅÇø: Linux        
±ê  Ìâ: [×ªÔØ]unix»·¾³¸ß¼¶±à³Ì-6 
·¢ÐÅÕ¾: BBS Ë®Ä¾Ç廪վ (Wed Mar 15 14:28:47 2000) 
 
 
 
 
·¢ÐÅÈË: taosm (128+64-->cool), ÐÅÇø: unix  
±ê  Ìâ: unix»·¾³¸ß¼¶±à³Ì--µÚ6Õ ϵͳÊý¾ÝÎļþºÍÐÅÏ¢  
·¢ÐÅÕ¾: Î÷Ê®°ËBBS (Fri Mar 10 13:15:45 2000), ×ªÐÅ  
   
  £È£Ô¡½µÚÁùÕ¡þϵͳÊý¾ÝÎļþºÍÐÅÏ¢ª¥  
6ª±1¡þÒýÑÔª¥  
Óкܶà²Ù×÷ÐèҪʹÓÃһЩÓëϵͳÓйصÄÊý¾ÝÎļþ£¬ÀýÈ磬¿ÚÁî×ÖÎļþ/etc/passwc  
lºÍ×éÎļþ  
/etc/group¾ÍÊǾ­³£ÓɶàÖÖ³ÌÐòʹÓõÄÁ½¸öÎļþ¡£Óû§Ã¿´ÎµÇ¼ÈëUnixϵͳʱ£¬ÒÔ  
¼°Ã¿´ÎÖ´  
ÐÐls-lÃüÁîʱ¶¼ÒªÊ¹ÓÿÚÁî×ÖÎļþ¡£ª¥  
ÓÉÓÚÀúÊ·Ô­Òò£¬ÕâЩÊý¾ÝÎļþ¶¼ÊÇASCIIÎı¾Îļþ£¬²¢ÇÒʹÓñê×¼I/O¿â¶ÁÕâЩÎļþ  
¡£µ«ÊÇ£¬  
¶ÔÓڽϴóµÄϵͳ£¬Ë³ÐòɨÃè¿ÚÁî×ÖÎļþ±äµÃºÜ»¨·Ñʱ¼ä£¬ÎÒÃÇÏëÒÔ·ÇASCIIÎı¾¸ñ  
ʽ´æ·ÅÕâ  
ЩÎļþ£¬µ«ÈÔÏòÓ¦ÓóÌÐòÌṩһ¸ö¿ÉÒÔ´¦ÀíÈκÎÒ»ÖÖÎļþ¸ñʽµÄ½çÃæ¡£¶ÔÓÚÕâЩÊý  
¾ÝÎļþµÄ  
¿ÉÒÆÖ²½çÃæÊDZ¾ÕµÄÖ÷Ìâ¡£±¾ÕÂÒ²°üÀ¨ÁËϵͳ±êʶº¯Êý¡¢Ê±¼äºÍÈÕÆÚº¯Êý¡£ª¥  
6ª±2¡þ¿ÚÁî×ÖÎļþª¥  
Unix¿ÚÁî×ÖÎļþ(POSIXª±1Ôò½«Æä³ÆÎªÓû§Êý¾Ý¿â)°üº¬ÁËͼ6ª±1ÖÐËùʾµÄ¸÷×ֶΣ¬  
ÕâЩ×ֶΠ 
°üº¬ÔÚ<pwdª±h>Öж¨ÒåµÄpasswd½á¹¹ÖС£ª¥  
×¢Ò⣬POSIXª±1Ö»Ö¸¶¨passwd½á¹¹ÖÐ7¸ö×Ö¶ÎÖеÄ5¸ö¡£ÁíÍâ2¸öÔªËØÓÉSVR4ºÍ4ª±3  
+BSDÖ§³Ö  
¡£ª¥ª¥ª¥P146ª¥  
ͼ6ª±1¡þ/etc/passwdÎļþÖеÄ×ֶΪ¥  
ÓÉÓÚÀúÊ·Ô­Òò£¬¿ÚÁî×ÖÎļþÊÇ/etc/passwd£¬¶øÇÒÊÇÒ»¸öÎı¾Îļþ¡£Ã¿Ò»Ðаüº¬Í¼  
6ª±1ÖÐËù  
ʾµÄ7¸ö×ֶΣ¬×Ö¶ÎÖ®¼äÓÃðºÅÏà·Ö¸ô¡£ÀýÈ磬¸ÃÎļþÖпÉÄÜÓÐÏÂÁÐÈýÐУºª¥  
root:jheVopR58x9Fx:0:1:The superuser:/:/bin/shª¥  
nobody:*:65534:65534::/:ª¥  
stevens:3hKVD8R58r9Fx:224:20:Richard Stevens:/home/stevens:/bin/kshª¥  
¹ØÓÚÕâЩ¼Ç¼ÏîÇë×¢ÒâÏÂÁи÷µã£ºª¥  
¡¤Í¨³£ÓÐÒ»¸ö¼Ç¼ÏÆäÓû§ÃûΪroot¡£´Ë¼Ç¼ÏîµÄÓû§IDÊÇO(³¬¼¶Óû§)¡£ª¥  
¡¤ÃÜÂë¿ÚÁî×Ö×ֶΰüº¬Á˾­µ¥ÏòÃÜÂëµ¥·¨´¦Àí¹ýµÄÓû§¿ÚÁî×Ö¸±±¾¡£ÒòΪ´ËËã·¨ÊÇ  
µ¥Îʵ쬠 
ËùÒÔÎÒÃDz»ÄÜ´ÓÃÜÂë¿ÚÁî×ֲ²⵽ԭÀ´µÄ¿ÚÁî×Ö¡£µ±Ç°Ê¹ÓõÄËã·¨(¼ûMorrisºÍTh  
ompson¡²  
£±£¹£·£¹¡³£©×ÜÊDzúÉú13¸ö¿É´òÓ¡×Ö·û(ÔÚ64×Ö·û¼¯¡²a-zA-Z0-9ª±1¡³ÖÐ)¡£ÒòΪ¶Ô  
Óû§Ãûno  
b  
odyµÄ¼Ç¼µÄÃÜÂë¿ÚÁî×Ö¶ÎÖ»°üº¬Ò»¸ö×Ö·û(*)£¬ËùÒÔÃÜÂë¿ÚÁî×Ö¾ö²»»áÓë´ËÖµÏàÆ¥  
Åä¡£´ËÓà 
»§Ãû¿ÉÓÃÓÚÍøÂç·þÎñÆ÷£¬ÕâЩ·þÎñÆ÷ÔÊÐíÎÒÃǵǼµ½Ò»¸öϵͳ£¬µ«ÆäÓû§IDºÍ×éI  
D(65534)  
£¬²¢²»ÌṩÓÅÏÈȨ¡£ÒÔ´ËÓû§IDºÍ×éIDÎÒÃǿɴæÈ¡µÄÎļþÖ»ÊÇ´ó¼Ò¶¼¿É¶Á¡¢Ð´µÄÎÄ  
¼þ¡£(Õâ  
¼Ù¶¨Óû§ID65534ºÍ×éID65534²¢²»ÓµÓÐÈκÎÎļþ¡£)ÔÚ±¾½ÚÉԺ󲿷ÖÎÒÃǽ«ÌÖÂÛ¶Ô  
¿ÚÁî×ÖÎÄ  
¼þ×î½üËù×÷µÄ¸ü¸Ä(ÒõÓ°¿ÚÁî×Ö)¡£ª¥  
¡¤ÔÚ¿ÚÁî×ÖÎļþ¼Ç¼ÖеÄijЩ×ֶοÉÄÜÊǿա£Èç¹ûÃÜÂë¿ÚÁî×Ö¶ÎΪ¿Õ£¬Õâͨ³£¾ÍÒâ  
ζןÃÓà 
»§Ã»ÓпÚÁî×Ö¡£(²»Ï£ÍûÕâÑù×ö¡£)nobody¼Ç¼ÓÐÁ½¸ö¿Õ°××ֶΣº×¢ÊÍ×ֶκͳõʼs  
hell×ֶΠ 
¡£¿Õ°××¢ÊÍ×ֶβ»²úÉúÈκÎÓ°Ïì¡£¿Õ°×shell×Ö¶ÎÔò±íʾȡϵͳĬÈÏÖµ£¬Õâͨ³£ÊÇ  
/bin/sh¡£  
ª¥  
¡¤Ö§³Öfinger(1)ÃüÁîµÄijЩUnixϵͳ֧³ÖÔÚ×¢ÊÍ×Ö¶ÎÖеĸ½¼ÓÐÅÏ¢¡£ÆäÖУ¬¸÷²¿  
·ÖÖ®¼ä¶¼  
ÓöººÅ·Ö¸ô£ºÓû§ÐÕÃû£¬°ì¹«Êҵص㣬°ì¹«Êҵ绰ºÅÂ룬¼ÒÍ¥µç»°ºÅÂë¡£ÁíÍ⣬Èç  
¹ûÔÚ×¢ÊÍ  
×Ö¶ÎÖеÄÓû§ÐÕÃûÊÇÒ»¸ö&£¬ÔòËü±»´ú»»ÎªµÇ¼Ãû¡£ÀýÈ磬¿ÉÒÔÓÐÏÂÁмǼ£ºª¤ª¥  
   
stevens:3hKVD8R58r9Fx:224:20:Richard &,B232,555-1111,555-2222:/home/ste  
vens:/bin  
/kshª¥  
¼´Ê¹ÄãËùʹÓõÄϵͳ²¢²»Ö§³ÖfingerÃüÁÕâЩÐÅÏ¢ÈÔ¿É´æ·ÅÔÚ×¢ÊÍ×Ö¶ÎÖУ¬ÒòΪ  
¸Ã×Ö¶ÎÖ»  
ÊÇÒ»¸ö×¢ÊÍ£¬²¢²»ÓÉϵͳ¹«ÓóÌÐò½âÊÍ¡£ª¥  
POXIXª±1Ö»¶¨ÒåÁËÁ½¸ö´æÈ¡¿ÚÁî×ÖÎļþÖÐÐÅÏ¢µÄº¯Êý¡£ÔÚ¸ø³öÓû§µÇ¼Ãû»òÊýÖµÓà 
»§IDºó£¬  
ÕâÁ½¸öº¯Êý¾ÍÄܲ鿴Ïà¹Ø¼Ç¼¡£ª¥  
#include <sys/typesª±h>ª¥  
include <pwdª±h>ª¥  
struct passwd *getpwuid(uid ¼£Ã£Ä££ª³£²¡½t ª«uidª«);ª¥  
struct passwd *getpwnaw(const char *ª«nameª«);ª¥  
Both return:pointer if OK,NULL on errorª¥  
Á½¸öº¯Êý·´»Ø£º¿´³É¹¦ÎªÖ¸Õ룬³ö´íΪNULLª¥  
getpwuidÓÉls(1)³ÌÐòʹÓã¬ÒԱ㽫°üº¬ÔÚÒ»¸öi-nodeÖеÄÊýÖµÓû§IDÓ³ÕÕΪÓû§  
µÇ¼Ãû¡£g  
etpwnawÔÚÎÒÃǼüÈëµÇ¼ÃûʱÓÉlogin(1)³ÌÐòʹÓᣪ¥  
ÕâÁ½¸öº¯Êý¶¼·µ»ØÒ»¸öÖ¸Ïòpasswd½á¹¹µÄÖ¸Õ룬¸Ã½á¹¹ÒÑÓÉÕâÁ½¸öº¯ÊýÔÚÖ´ÐÐʱÌî  
ÈëÁËËùÐè  
µÄÐÅÏ¢¡£´Ë½á¹¹Í¨³£ÊÇÔÚÏà¹Øº¯ÊýÄڵľ²Ì¬±äÁ¿£¬Ö»Òªµ÷ÓÃÏà¹Øº¯Êý£¬ÆäÄÚÈݾͻᠠ
±»ÖØÐ´¡£  
ª¥  
Èç¹ûÎÒÃÇÒª²é¿´µÄÖ»ÊÇÒ»¸öµÇ¼Ãû»òÒ»¸öÓû§ID£¬ÄÇôÕâÁ½¸öPOSIXª±1º¯ÊýÊÇÄÜÂú  
×ãÒªÇóµÄ  
£¬µ«ÊÇÒ²ÓÐЩ³ÌÐòÒª²é¿´Õû¸ö¿ÚÁî×ÖÎļþ¡£ÏÂÁÐÈý¸öº¯ÊýÔò¿ÉÓÃÓÚ´ËÖÖÄ¿µÄ¡£ª¥  
#include <sys/typesª±h>ª¥  
#include <pwdª±h>ª¥  
struct passwd *getpwent(void);ª¥  
Returns:pointer if OK,NULL on error or end of fileª¥  
·µ»Ø£º¿´³É¹¦ÎªÖ¸Õ룬³ö´í»òÎļþβΪNULLª¤ª¥  
void setpwent(void);ª¥  
void endpwent(void);ª¥  
POXIXª±1ûÓж¨ÒåÕâÈý¸öº¯Êý£¬µ«ËüÃÇÊܵ½SVR4ºÍ4ª±3+BSDµÄÖ§³Ö¡£ª¥  
µ÷ÓÃgetpwentʱ£¬Ëü·µ»Ø¿ÚÁî×ÖÎļþÖеÄÏÂÒ»¸ö¼Ç¼¡£ÈçͬÉÏÃæËùÊöµÄÁ½¸öPOSIX  
ª±1º¯ÊýÒ»  
Ñù£¬Ëü·µ»ØÒ»¸öÓÉËüÌîдºÃµÄpasswd½á¹¹µÄÖ¸Õ롣ÿ´Îµ÷Óô˺¯Êýʱ¶¼ÖØÐ´¸Ã½á¹¹  
¡£ÔÚµÚÒ»  
´Îµ÷Óøú¯Êýʱ£¬Ëü´ò¿ªËüËùʹÓõĸ÷¸öÎļþ¡£ÔÚʹÓñ¾º¯Êýʱ£¬¶Ô¿ÚÁî×ÖÎļþÖР 
¸÷¸ö¼Ç¼  
°²ÅŵÄ˳Ðò²¢ÎÞÒªÇ󡣪¥  
º¯Êýsetpwent·´ÈÆËüËùʹÓõÄÎļþ£¬endpwentÔò¹Ø±ÕÕâЩÎļþ¡£ÔÚʹÓÃgetpwent²é  
¿´ÍêÁ˿ڠ 
Áî×ÖÎļþºó£¬Ò»¶¨Òªµ÷ÓÃendpwent¹Ø±ÕÕâЩÎļþ¡£getpwentÖªµÀʲôʱ¼äËüÓ¦µ±´ò  
¿ªËüËùʹ  
ÓõÄÎļþ(µÚÒ»´Î±»µ÷ÓÃʱ)£¬µ«ÊÇËü²¢²»ÄÜÖªµÀºÎʱ¹Ø±ÕÕâЩÎļþ¡£ª¥  
ʵÀýª¥  
³ÌÐò6ª±1ʾ³öÁ˺¯ÊýgetpwnamµÄÒ»¸öʵÏÖ¡£ª¥  
³ÌÐò6ª±1¡þgetpwentº¯Êýª¥  
P148ª¥  
ÔÚ³ÌÐò¿ªÊ¼´¦µ÷ÓÃsetpwentÊDZ£»¤ÐԵĴëÊ©£¬ÒÔ±ãÔÚµ÷ÓÃÕßÔÚ´Ë֮ǰÒѾ­µ÷Óùýg  
etpwentµÄ  
Çé¿öÏ£¬·´ÈÆÓйØÎļþʹËüÃǶ¨Î»µ½Îļþ¿ªÊ¼´¦¡£getpwnawºÍgetpwuidÍê³Éºó²»Ó¦  
ʹÓйØÎÄ  
¼þÈÔ´¦ÓÚ´ò¿ª×´Ì¬£¬ËùÒÔÓ¦µ÷ÓÃendpwent¹Ø±ÕËüÃÇ¡£ª¥  
6ª±3¡þÒõÓ°¿ÚÁî×Ö(Shadow Passwords)ª¥  
ÔÚÉÏÃæÒ»½ÚÎÒÃÇÔøÌá¼°£¬¶ÔUnix¿ÚÁî×Öͨ³£Ê¹ÓõÄÃÜÂëËã·¨Êǵ¥ÏòËã·¨¡£¸ø³öÒ»¸ö  
ÃÜÂë¿ÚÁî  
×Ö£¬ÎÒÃÇÕÒ²»µ½Ò»ÖÖËã·¨¿ÉÒÔ½«Æä·´±ä»»µ½ÆÕͨÎı¾¿ÚÁî×Ö¡£(ÆÕͨÎı¾¿ÚÁî×ÖÊÇ  
ÔÚPasswor  
d:Ìáʾºó¼üÈëµÄ¿ÚÁî×Ö¡£)µ«ÊÇÎÒÃÇ¿ÉÒÔ¶Ô¿ÚÁî×Ö½øÐв²⣬½«²Â²âµÄ¿ÚÁî×Ö¾­µ¥  
ÏòËã·¨±ä  
»»³ÉÃÜÂëÐγɣ¬È»ºó½«ÆäÓëÓû§µÄÃÜÂë¿ÚÁî×ÖÏà±È½Ï¡£Èç¹ûÓû§¿ÚÁî×ÖÊÇËæ»úÑ¡Ôñ  
µÄ£¬ÄÇô  
ÕâÖÖ·½·¨²¢²»ÊǺÜÓÐÓõġ£µ«ÊÇÓû§ÍùÍùÒÔ·ÇËæ»ú·½Ê½Ñ¡Ôñ¿ÚÁî×Ö(¶ÔżµÄÐÕÃû¡¢  
½ÖÃû¡¢³è  
ÎïÃûµÈ)¡£Ò»¸ö¾­³£Öظ´µÄÊÔÑéÊÇÏȵõ½Ò»·Ý¿ÚÁî×ÖÎļþ£¬È»ºóÓÃÊÔ̽·½·¨²Â²â¿Ú  
Áî×Ö¡£(Ga  
rfinkelºÍSpaftord¡²£±£¹£¹£±¡³µÄµÚ¶þÕ¶ÔUnix¿ÚÁî×Ö¼°¿ÚÁî×ÖÃÜÂë´¦Àí·½°¸µÄ  
ÀúÊ·Çé¿ö  
¼°Ï¸½Ú½øÐÐÁË˵Ã÷¡£)ª¥  
ΪʹÆóͼÕâÑù×öµÄÈËÄÑÒÔ»ñµÃԭʼ×ÊÁÏ(ÃÜÂë¿ÚÁî×Ö)£¬Ä³Ð©ÏµÍ³½«ÃÜÂë¿ÚÁî×Ö´æ·Å  
ÔÚÁíÒ»¸ö  
ͨ³£³ÆÎªÒõÓ°¿ÚÁî×ÖÎļþÖС£¸ÃÎļþÖÁÉÙÒª°üº¬Óû§ÃûºÍÃÜÂë¿ÚÁî×Ö¡£Óë¸Ã¿ÚÁî×Ö  
Ïà¹ØµÄÆä  
ËüÐÅÏ¢Ò²¿É´æ·ÅÔÚ¸ÃÎļþÖС£ÀýÈ磬¾ßÓÐÒõÓ°¿ÚÁî×ÖµÄϵͳ¾­³£ÒªÇóÓû§ÔÚÒ»¶¨Ê±  
¼ä¼ä¸ôºó  
Ñ¡ÔñÒ»¸öпÚÁî×Ö¡£Õâ±»³ÆÖ®Îª¿ÚÁî×ÖʱЧ£¬ÒªÑ¡ÔñпÚÁî×ÖµÄʱ¼ä¼ä¸ô³¤¶È¾­³£  
Ò²´æ·ÅÔÚ  
ÒõÓ°¿ÚÁî×ÖÎļþÖС£ª¥  
ÔÚSVR4ÖУ¬ÒõÓ°¿ÚÁîÎļþÊÇ/etc/shadow¡£ÔÚ4ª±3+BSDÖУ¬ÃÜÂë¿ÚÁî×Ö´æ·ÅÔÚ/etc  
/masterª±  
passwdÖС£ª¥  
ÒõÓ°¿ÚÁî×ÖÎļþ²»Ó¦ÊÇÒ»°ãÓû§¿ÉÒÔ¶ÁÈ¡µÄ¡£½öÓÐÉÙÊý¼¸¸ö³ÌÐòÐèÒª´æÈ¡ÃÜÂë¿ÚÁî  
×ÖÎļþ£¬  
ÀýÈçlogin(1)ºÍpasswd(1)£¬ÕâЩ³ÌÐò³£³£ÊÇÉèÖÃ-Óû§-IDΪroot¡£ÓÐÁËÒõÓ°¿ÚÁî  
×Öºó£¬ÆÕ  
ͨ¿ÚÁî×ÖÎļþ/etc/passwd¿ÉÓɸ÷Óû§×ÔÓɶÁÈ¡¡£ª¥  
6ª±4¡þ×éÎļþª¥  
Unix×éÎļþ(POSIXª±1³ÆÆäΪ×éÊý¾Ý¿â)°üº¬ÁËͼ6ª±2ÖÐËùʾ×ֶΡ£ÕâЩ×ֶΰüº¬ÔÚ  
<grpª±h>  
ÖÐËù¶¨ÒåµÄgroup½á¹¹ÖС£ª¥ª¥  
P149ª¥ª¥ª¥  
ͼ6ª±2¡þ/etc/groupÎļþÖеÄ×ֶΪ¥  
POSIXª±1Ö»¶¨ÒåÁËÆäÖÐ3¸ö×ֶΡ£ÁíÒ»¸ö×Ö¶Îgr ¼£Ã£Ä££ª³£²¡½passwdÔòÓÉSVR4ºÍ  
4ª±3+BSD  
Ö§³Ö¡£ª¥  
×Ö¶Îgr-memÊÇÒ»¸öÖ¸ÕëÊý×飬ÆäÖеÄÖ¸Õë¸÷Ö¸ÏòÒ»¸öÊôÓÚ¸Ã×éµÄÓû§Ãû¡£¸ÃÊý×éÒÔ  
¿ÕÖ¸Õë(n  
ull)½áβ¡£ª¥  
ÎÒÃÇ¿ÉÒÔÓÃÏÂÁÐÁ½¸öÓÉposixª±1¶¨ÒåµÄº¯ÊýÀ´²é¿´×éÃû»òÊýÖµ×éI¡£ª¥  
#include <sys/typesª±h>ª¥  
#include <grpª±h>ª¥  
struct group *getgrgid(gid ¼£Ã£Ä££ª³£²¡½t ª«gidª«);ª¥  
struct group *getgrnam(const char *ª«nameª«);ª¥  
Both return:pointer if OK,NULL on errorÁ½¸öº¯Êý·µ»Ø£ºÈô³É¹¦ÎªÖ¸Õ룬³ö´í  
ΪNULLª¥  
Èçͬ¶Ô¿ÚÁî×ÖÎļþ½øÐвÙ×÷µÄº¯ÊýÒ»Ñù£¬ÕâÁ½¸öº¯Êýͨ³£Ò²·µ»ØÖ¸ÏòÒ»¸ö¾²Ì¬±äÁ¿  
µÄÖ¸Õ룬  
ÔÚÿ´Îµ÷ÓÃʱ¶¼ÖØÐ´¸Ã¾²Ì¬±äÁ¿¡£ª¥  
Èç¹ûÐèÒªËÑË÷Õû¸ö×éÎļþ£¬ÔòÐëʹÓÃÁíÍ⼸¸öº¯Êý¡£ÏÂÁÐÈý¸öº¯ÊýÀàËÆÓÚÕë¶Ô¿ÚÁî  
×ÖÎļþµÄ  
Èý¸öº¯Êý¡£ª¥  
#include <sys/typesª±h>ª¥  
#include <grpª±h>ª¥  
struct group *getgrent(void);ª¥  
Returns:Pointer if OK,NULL on error or end of fileª¥  
·µ»Ø£ºÈô³É¹¦ÎªÖ¸Õ룬³ö´í»òÎļþβΪNULLª¥  
void setgrent(void);ª¥  
void endgrent(void);ª¥  
ÕâÈý¸öº¯ÊýÓÉSVR4ºÍ4ª±3+BSDÌṩPOSIXª±1²¢Ä©¶¨ÒåÕâЩº¯Êý¡£ª¥  
setgrent´ò¿ª×éÎļþ(ÈçÈôËüÉÐÄ©±»´ò¿ª)²¢·´ÈÆËü¡£getgrent´Ó×éÎļþÖжÁÏÂÒ»¸ö  
¼Ç¼£¬Èç  
Èô¸ÃÎļþÉÐÄ©´ò¿ªÔòÏÈ´ò¿ªËü¡£endgrent¹Ø±Õ×éÎļþ¡£ª¥  
6ª±5¡þÌí¼Ó×éIDª¥  
ÔÚUnixÖУ¬×éµÄʹÓÃÒѾ­×÷ÁËЩ¸ü¸Ä¡£ÔÚVersion7ÖУ¬Ã¿¸öÓû§ÈκÎʱºò¶¼Ö»ÊôÓÚ  
Ò»¸ö×é¡£  
µ±Óû§µÇ¼ʱ£¬ÏµÍ³¾Í°´¿ÚÁî×ÖÎļþÖÐÓëÆäÏà¹Ø¼Ç¼ÖеÄÊý×Ö×éID£¬¸³¸øËûʵ¼Ê×é  
ID¡£ÎÒÃÇ  
¿ÉÒÔÔÚÈκÎʱºòÖ´ÐÐnewgrp(1)ÒÔ¸ü¸Ä×éID¡£Èç¹ûnewgrpÃüÁîÖ´Ðгɹ¦(¹ØÓÚÐí¿ÉȨ  
¹æÔò£¬Çë  
²ÎÔÄÊÖ²áÒ³¡£)£¬ÔòÎÒÃǵÄʵ¼Ê×éID¾Í¸ü¸ÄΪеÄ×éID£¬Ëü½«±»ÓÃÓÚºóÐøµÄÎļþ´æ  
È¡Ðí¿ÉȨ  
¼ì²é¡£Ö´Ðв»´øÈκβÎÊýµÄnewgrp£¬Ôò¿É·µ»Øµ½Ô­À´µÄ×é¡£ª¥  
ÕâÖÖ×éµÄ³ÉÔ±¹ØÏµÒ»Ö±Î¬³Öµ½1983Äê×óÓÒ¡£´Ëʱ£¬4ª±2BSDÒýÈëÁËÌí¼Ó×éIDµÄ¸ÅÄî  
¡£ÎÒÃDz»  
½öÊôÓÚÎÒÃǵĿÚÁî×ּǼÖÐ×éIDËù¶ÔÓ¦µÄ×飬Ҳ¿ÉÊôÓÚ¶àÖÁ16¸öÁíÍâµÄһЩ×é¡£ÎÄ  
¼þ´æÈ¡È¨  
¼ì²éÏàÓ¦ÐÞ¸ÄΪ£º²»½ö½«½ø³ÌµÄÓÐЧ×éIDÓëÎļþµÄ×éIDÏà±È½Ï£¬¶øÇÒÒ²½«ËùÓÐÌí¼Ó  
×éIDÓëÎÄ  
¼þµÄ×éID½øÐбȽϡ£ª¥  
Ìí¼Ó×éIDÊÇPOSIXª±1µÄ¿ÉÑ¡ÌØÐÔ¡£³£ÊýNGROUPS ¼£Ã£Ä££ª³£²¡½MAX(ͼ2ª±7)¹æ¶¨ÁË  
Ìí¼Ó×éID  
µÄÊýÁ¿£¬Æä³£ÓÃÖµÊÇ16¡£Èç¹û²»Ö§³ÖÌí¼Ó×éID£¬Ôò´Ë³£ÊýֵΪO¡£ª¥  
SVR4ºÍ4ª±3+BSD¶¼Ö§³ÖÌí¼Ó×éID¡£ª¥  
FIPS 151-1ÒªÇóÖ§³ÖÌí¼Ó×éID£¬²¢ÒªÇóNGROUP ¼£Ã£Ä££ª³£²¡½MAXÖÁÉÙÊÇ8¡£ª¥  
ʹÓÃÌí¼Ó×éIDµÄÓŵãÊÇÎÒÃDz»±ØÔÙÏÔʽµØ¾­³£¸ü¸Ä×é¡£Ò»¸öÓû§³£³£»á²Î¼Ó¶à¸öÏî  
Ä¿×飬Òò  
´ËÒ²¾ÍҪͬʱÊôÓÚ¶à¸ö×é¡£ª¥  
ΪÁË´æÈ¡ºÍÉèÖÃÌí¼Ó×éIDÌṩÁËÏÂÁÐÈý¸öº¯Êý£ºª¥  
POSIXª±1ֻ˵Ã÷ÁËgetgroups¡£ÒòΪsetgroupsºÍinitgroupsÊÇÌØÈ¨²Ù×÷£¬ËùÒÔPos  
ixª±1ûÓР 
˵Ã÷ËüÃÇ¡£µ«ÊÇ£¬SVR4ºÍ4ª±3+BSDÖ§³ÖËùÓÐÕâÈý¸öº¯Êý¡£ª¥  
getgroups½«½ø³ÌËùÊôÓû§µÄ¸÷Ìí¼Ó×éIDÌîдµ½Êý×ébgrouplistÖУ¬ÌîдÈë¸ÃÊý×é  
µÄÌí¼Ó×éI  
DÊý×î¶àΪgidsetsize¸ö¡£Êµ¼ÊÌîдµ½Êý×éÖеÄÌí¼Ó×éIDÊýÓɺ¯Êý·µ»Ø¡£Èç¹ûϵͳ  
³£ÊýNGROU  
P ¼£Ã£Ä££ª³£²¡½MAXΪ0£¬Ôò·µ»Ø0£¬Õâ²¢²»±íʾ³ö´í¡£ª¥  
#include <sys/typesª±h>ª¥  
#include <unistdª±h>ª¥  
int getgroups(int ª«gidsetsizeª«,gid ¼£Ã£Ä££ª³£²¡½t ª«grouplistª«£Û£Ý)£»  
ª¥  
Returns:number of supplementary group IDs if OK,-1 on errorª¥  
int setgroups(intª« ngroups,ª«const gid ¼£Ã£Ä££ª³£²¡½t ª«grouplistª«£Û£Ý  
£©£»ª¥  
int initgroups(const char *ª«username,ª«gid ¼£Ã£Ä££ª³£²¡½tª« basegid);ª«  
ª¥  
Á½¸öº¯Êý·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪ-1ª¥  
Both return:0 if OK,-1 on errorª¥  
×÷ΪһÖÖÌØÊâÇé¿ö£¬ÈçÈôgiclsetsizeΪ0£¬Ôòº¯ÊýÖ»·µ»ØÌí¼Ó×éIDÊý£¬¶ø¶ÔÊý×ég  
rouplist  
Ôò²»×÷Ð޸ġ£(Õâʹµ÷ÓÃÕß¿ÉÒÔÈ·¶¨grouplistÊý×éµÄ³¤¶È£¬ÒÔ±ã½øÐзÖÅä¡£)ª¥  
setgroups¿ÉÓɳ¬¼¶Óû§µ÷ÓÃÒÔ±ãΪµ÷Óýø³ÌÉèÖÃÌí¼Ó×éID±í¡£grouplist£¬ÊÇ×éI  
DÊý×飬¶ø  
ngroups˵Ã÷ÁËÊý×éÖеÄÔªËØÊý¡£ª¥  
ͨ³££¬Ö»ÓÐinitgroupsº¯Êýµ÷ÓÃsetgroups,initgroups¶ÁÕû¸ö×éÎļþ(Óú¯Êýgetg  
rent,setg  
rentºÍendgrent)£¬È»ºó¶ÔusernameÈ·¶¨Æä×éµÄ³ÉÔ±¹ØÏµ¡£È»ºó£¬Ëüµ÷ÓÃsetgroup  
s,ÒÔ±ãΪ  
¸ÃÓû§³õʼ»¯Ìí¼Ó×éID±í¡£ÒòΪinitgroupsµ÷ÓÃsetgroups,ËùÒÔÖ»Óг¬¼¶Óû§²ÅÄÜ  
µ÷ÓÃinit  
groups¡£³ýÁËÔÚ×éÎļþÖÐÕÒµ½usernameÊdzÉÔ±µÄ×飬initgroupsÒ²ÔÚÌí¼Ó×éID±íÖР 
°üÀ¨ÁËba  
segid¡£basegidÊÇusernameÔÚ¿ÚÁî×ÖÎļþÖеÄ×éID¡£ª¥  
initgroupsÖ»ÓÐÉÙÊý¼¸¸ö³ÌÐòµ÷Óã¬ÀýÈçlogin(1)³ÌÐòÔÚÓû§µÇ¼ʱµ÷Óøú¯Êý¡£  
ª¥  
6ª±6¡þÆäËüÊý¾ÝÎļþª¥  
ÖÁ´ËÎÒÃÇÌÖÂÛÁËÁ½¸öϵͳÊý¾ÝÎļþ-¿ÚÁî×ÖÎļþºÍ×éÎļþ¡£ÔÚÈÕ³£ÊÂÎñ²Ù×÷ÖУ¬Un  
ixϵͳ»¹  
ʹÓúܶàÆäËüÎļþ¡£ÀýÈ磬BSDÍøÂçÈí¼þÓÐÒ»¸ö¼Ç¼¸÷ÍøÂç·þÎñÆ÷ËùÌṩµÄ·þÎñµÄ  
Êý¾ÝÎļþ(  
/etc/services)£¬ÓÐÒ»¸ö¼Ç¼ЭÒéÐÅÏ¢ÊÇÊý¾ÝÎļþ(/etc/protocols)£¬»¹ÓÐÒ»¸öÔò  
ÊǼÇÂ¼Íø  
ÂçÐÅÏ¢µÄÊý¾ÝÎļþ(/etc/networks)¡£ÐÒÔ˵ÄÊÇ£¬¶ÔÓÚÕâЩÊý¾ÝÎļþµÄ½çÃæ¶¼ÓëÉÏ  
Êö¶Ô¿ÚÁî  
×ÖÎļþºÍ×éÎļþµÄÏàËÆ¡£ª¥  
Ò»°ãÔ­ÀíÊÇ£¬Ã¿¸öÊý¾ÝÎļþÖÁÉÙÓÐÈý¸öº¯Êý£ºª¥  
1ª± getº¯Êý£»¶ÁÏÂÒ»¸ö¼Ç¼£¬Èç¹ûÐèÒª»¹´ò¿ª¸ÃÎļþ¡£´ËÖÖº¯Êýͨ³£·µ»ØÖ¸ÏòÒ»  
¸ö½á¹¹µÄ  
Ö¸Õë¡£µ±ÒÑ´ïµ½Îļþβ¶Ëʱ·µ»Ø¿ÕÖ¸Õë¡£´ó¶àÊýgetº¯Êý·µ»ØÖ¸ÏòÒ»¸ö¾²Ì¬´æ´¢Àà  
½á¹¹µÄÖ¸  
Õ룬Èç¹ûÒª±£´æÆäÄÚÈÝ£¬ÔòÐè¸´ÖÆËü¡£ª¥  
2ª± setº¯Êý£º´ò¿ªÏàÓ¦Êý¾ÝÎļþ(Èç¹ûÉÐÄ©´ò¿ª)£¬È»ºó·´ÈƸÃÎļþ¡£Èç¹ûÏ£ÍûÔÚ  
ÏàÓ¦Îļþ  
Æðʼ´¦¿ªÊ¼´¦Àí£¬Ôòµ÷Óô˺¯Êý¡£ª¥  
3ª± endº¯Êý£º¹Ø±ÕÏàÓ¦Êý¾ÝÎļþ¡£ÕýÈçǰÊö£¬ÔÚ½áÊøÁ˶ÔÏàÓ¦Êý¾ÝÎļþµÄ¶Á¡¢Ð´  
²Ù×÷ºó£¬  
×ÜÓ¦µ÷Óô˺¯ÊýÒԹرÕËùÓÐÏà¹ØÎļþ¡£ª¥  
ÁíÍ⣬Èç¹ûÊý¾ÝÎļþÖ§³ÖijÖÖÐÎʽµÄ¹Ø¼ü×ÖËÑѰ£¬ÔòÒ²ÌṩËÑѰ¾ßÓÐÖ¸¶¨¹Ø¼ü×ֵĠ 
¼Ç¼µÄÀý  
³Ì¡£ÀýÈ磬¶ÔÓÚ¿ÚÁî×ÖÎļþÌṩÁËÁ½¸ö°´¹Ø¼ü×Ö½øÐÐËÑѰµÄ³ÌÐò£ºgetpwnamѰÕҾߠ 
ÓÐÖ¸¶¨Óà 
»§ÃûµÄ¼Ç¼£»getpwuidѰÕÒ¾ßÓÐÖ¸¶¨Óû§IDµÄ¼Ç¼¡£ª¥  
ͼ6ª±3ÖÐÁгöÁËһЩÕâÑùµÄÀý³Ì£¬ÕâЩ¶¼ÊÇSVR4ºÍ4ª±3+BSDÖ§³ÖµÄ¡£ÔÚͼÖÐÁгöÁË  
Õë¶Ô¿ÚÁî  
×ÖÎļþºÍ×éÎļþµÄº¯Êý£¬ÕâЩÒÑÔÚÉÏÃæËµÃ÷¹ý¡£Í¼ÖÐÒ²ÁгöÁËһЩÓëÍøÂçÓйصĺ¯  
Êý¡£¶Ôͼ  
ÖÐÁгöµÄËùÓÐÊý¾ÝÎļþ¶¼ÓÐget¡¢setºÍendº¯Êý¡£ª¥  
ÔÚSVR4ÖУ¬Í¼6ª±3ÖÐ×îºóËĸöÊý¾ÝÎļþ¶¼ÊÇ·ûºÅÁ¬½Ó£¬Á¬½Óµ½Ä¿Â¼/e6tc/inetϵĠ 
ͬÃûÎļþ  
ÉÏ¡£ª¥  
SVR4ºÍ4ª±3+BSD¶¼ÓÐÀàËÆÓÚͼÖÐËùÁеĸ½¼Óº¯Êý£¬µ«ÊÇÕâЩ¸½¼Óº¯Êý¶¼´¦Àíϵͳ¹Ü  
ÀíÎļþ£¬  
רÓÃÓÚ¸÷¸öʵÏÖ¡£ª¥  
P153ª¥ª¥ª¥  
ͼ6ª±3¡þ´æÈ¡ÏµÍ³Êý¾ÝÎļþµÄһЩÀý³Ìª¥  
   
6ª±7¡þµÇ¼»á¼Æª¥  
´ó¶àÊýUnixϵͳ¶¼ÌṩÏÂÁÐÁ½¸öÊý¾ÝÎļþ£ºutmpÎļþ£¬Ëü¼Ç¼µ±Ç°µÇ¼½øÏµÍ³µÄ¸÷  
¸öÓû§£»  
wtmpÎļþ£¬Ëü¸ú×Ù¸÷¸öµÇ¼ºÍ×¢Ïúʼþ¡£ª¥  
ÔÚVersion7ÖУ¬Ò»¸ö°üº¬ÏÂÁнṹµÄ¶þ½øÖƼǼдÈëÕâÁ½¸öÎļþÖУºª¥  
struct utmp {ª¥  
char ut ¼£Ã£Ä££ª³£²¡½line£Û8£Ý; /* tty ÐУº"ttyh0","ttyd0","ttyp0",¡­ *  
/ª¥  
char ut ¼£Ã£Ä££ª³£²¡½name£Û8£Ý; /*µÇ¼Ãû */ª¥  
long ut ¼£Ã£Ä££ª³£²¡½time;  /*¹«ÔªÃëÊý */ª¥  
};ª¥  
ÔڵǼʱ£¬login³ÌÐòÌîдÕâÑùµÄÒ»¸ö½á¹¹£¬È»ºó½«ÆäдÈëµ½utmpÎļþÖУ¬Í¬Ê±Ò²  
½«ÆäÌíд  
µ½wtmpÎļþÖС£ÔÚ×¢Ïúʱ£¬init½ø³ÌÔÚutmpÎļþÖеÄÏàÓ¦¼Ç¼²Á³ý(ÿ¸ö×Ö½Ú¶¼Ìî  
ÒÔ0)£¬²¢  
½«Ò»¸öмǼÌíдµ½wtmpÎļþÖС£¶ÁwtmpÎļþÖеĸÃ×¢Ïú¼Ç¼£¬Æäut ¼£Ã£Ä££ª³£²  
¡½name×Ö  
¶ÎÇå³ýΪ0¡£ÔÚ  
ϵͳÔÙÆô¶¯Ê±£¬ÒÔ¼°¸ü¸Äϵͳʱ¼äºÍÈÕÆÚµÄǰºó£¬¶¼ÔÚwtmpÎļþÖÐÌíÐ´ÌØÊâµÄ¼Ç¼  
Ïî¡£who(  
1)³ÌÐò¶ÁutmpÎļþ£¬²¢ÒԿɶÁ¸ñʽ´òÓ¡ÆäÄÚÈÝ¡£ºóÀ´µÄUnix°æ±¾Ìṩlast(1)ÃüÁî  
£¬Ëü¶Áwtm  
pÎļþ²¢´òÓ¡ËùÑ¡ÔñµÄ¼Ç¼¡£ª¥  
´ó¶àÊýUnix°æ±¾ÈÔÌṩutmpºÍwtmpÎļþ£¬µ«ÔÚÕâЩÎļþÖеÄÐÅÏ¢Á¿È´Ôö¼ÓÁË¡£ver  
sion 7ÖÐ2  
0×ֽڵĽṹÔÚSVR2ÖÐÒÑÀ©³äΪ36×Ö½Ú£¬¶øÔÚSVR4ÖУ¬utmp½á¹¹ÒÑÀ©³äΪ350×Ö½Ú¡£  
ª¥  
SVR4ÖУ¬ÕâЩ¼Ç¼µÄÏêϸ¸ñʽÇë²Î¼ûÊÖ²áÒ³utmp(4)ºÍutmpx(4)¡£ÔÚSVR4ÖУ¬ÕâÁ½  
¸öÎļþ¶¼  
ÔÚĿ¼/var/admÖС£SVR4ÌṩÁ˺ܶຯÊý(¼ûgetut(3)ºÍgetutx(3))¶Á¡¢Ð´ÕâÁ½¸ö  
Îļþ¡£ª¥  
4ª±3+BSDÖУ¬µÇ¼¼Ç¼µÄ¸ñʽÇë²Î¼ûÊÖ²áÒ³utmp(5)¡£ÕâÁ½¸öÎļþµÄ·¾¶ÃûÊÇ/var  
/run/utmp  
ºÍ/var/log/wtmp¡£ª¥  
6ª±8¡þϵͳ±êʶª¥  
POSIXª±1¶¨ÒåÁËunameº¯Êý£¬Ëü·µ»ØÓëËÞÖ÷»úºÍ²Ù×÷ϵͳÓйصÄÐÅÏ¢¡£ª¥  
#include <sys/utsnameª±h>ª¥  
int uname(struct utsname *ª«nameª«;ª¥  
Returns:nonnegative value if OK,-1 on error ·µ»Ø£ºÈô³É¹¦Îª·Ç¸ºÖµ£¬³ö´íΪ  
-1ª¥  
ͨ¹ý¸Ãº¯ÊýµÄ²ÎÊýÏòÆä´«µÝÒ»¸öutsname½á¹¹µÄµØÖ·£¬È»ºó¸Ãº¯ÊýÌîд´Ë½á¹¹¡£PO  
SIXª±1Ö»  
¶¨ÒåÁ˸ýṹÖÐ×îÉÙÐèÒªµÄ×Ö¶Î(ËüÃǶ¼ÊÇ×Ö·ûÊý×é)£¬¶øÃ¿¸öÊý×éµÄ³¤¶ÈÔòÓÉʵÏÖ  
È·¶¨¡£Ä³  
ЩʵÏÖÔڸýṹÖÐÌṩÁËÁíÍâһЩ×ֶΡ£ÔÚÀúÊ·ÉÏ£¬ÏµÍ³VΪÿ¸öÊý×é·ÖÅä9¸ö×Ö½Ú  
£¬ÆäÖÐÓР 
1¸ö×Ö½ÚÓÃÓÚ×Ö·û´®½áÊø·û(null×Ö·û)¡£ª¥  
struct utsname {ª¥  
char sysname£Û9£Ý;  /*name of the operating system */²Ù×÷ϵͳÃûª¥  
char nodename£Û9£Ý;  /* name of this node */ ´Ë½ÚµãÃûª¥  
char release£Û9£Ý;  /*current release of operating system */²Ù×÷ϵͳµ±Ç°  
·¢Ðа檥  
char version£Û9£Ý;  /*current version of this release */´Ë·¢ÐаæµÄµ±Ç°°æ  
ª¥  
char machine£Û9£Ý;  /*name of hardware type */Ó²¼þÀàÐÍÃûª¥  
};ª¥  
ÔÚutsname½á¹¹ÖеÄÐÅϢͨ³£¿ÉÓÃuname(1)ÃüÁî´òÓ¡¡£ª¥  
POSIXª±1¾¯¸æ£ºnodenameÔªËØ¿ÉÄܲ¢²»ÊÊÓÃÓÚÔÚһͨÐÅÍøÂçÉÏÒýÓÃËÞÖ÷»ú¡£´Ëº¯Êý  
À´×ÔÓÚϵ  
ͳV£¬ÔÚ½ÏÔçʱÆÚ£¬nodenameÔªËØÊÊÓÃÓÚÔÚUUCPÍøÂçÉÏÒýÓÃÖ÷»ú¡£ª¥  
Ò²Ó¦Àí½âÔڴ˽ṹÖв¢Ã»Óиø³öÓйØPOSIXª±1°æ±¾µÄÐÅÏ¢¡£ÕâÓ¦µ±Ê¹ÓÃ2ª±5ª±2½Ú  
ÖÐËù˵Ã÷  
µÄ ¼£Ã£Ä££ª³£²¡½POSIX ¼£Ã£Ä££ª³£²¡½VERSIONÒÔ»ñµÃ¸ÃÐÅÏ¢¡£×îºó£¬´Ëº¯Êý¸ø³ö  
ÁËÒ»ÖÖ´æ  
È¡¸Ã½á¹¹ÖÐÐÅÏ¢µÄ·½·¨£¬ÖÁÓÚ  
ÈçºÎ³õʼ»¯ÕâЩÐÅÏ¢£¬POSIXª±1ûÓÐ×÷ÈκÎ˵Ã÷¡£´ó¶àÊýϵͳV°æ±¾ÔÚ¹¹ÔìϵͳºË  
ʱͨ¹ý±à  
Ò뽫ÕâЩÐÅÏ¢´æ·ÅÔÚϵͳºËÖС£ª¥  
±´¿ËÀ³ÀàµÄ°æ±¾Ìṩgethostnameº¯Êý£¬ËüÖ»·µ»ØËÞÖ÷»úÃû¡£Õâͨ³£¾ÍÊÇÔÚTCP/IP  
ÍøÉϸÃËÞ  
Ö÷»úµÄÃû×Ö¡£ª¤ª¥  
#include <unistdª±h>ª¥  
int gethostname(char *ª«name,ª«int ª«namelen);ª«ª¥  
Returns:0 if OK,-1 on error·µ»Ø£ºÈô³É¹¦Îª0£¬³ö´íΪ-1ª¥  
ͨ¹ýname·µ»ØµÄ×Ö·û´®ÒÔnull·û½áβ(³ý·ÇûÓÐÌṩ×ã¹»µÄ¿Õ¼ä)¡£<sys/paramª±h  
£¾Öеij£Êý  
MAXHOSTNAMELEN¹æ¶¨ÁË´ËÃû×ÖµÄ×î´ó³¤¶È(ͨ³£ÊÇ64×Ö½Ú)¡£Èç¹û¸ÃËÞÖ÷»úÁªµ½TCP  
/IPÍø£¬Ôò  
´ËËÞÖ÷»úÃûͨ³£ÊǸÃËÞÖ÷»úµÄÍêÕûµÄÓòÃû¡£ª¥  
hostname(1)ÃüÁî¿ÉÓÃÀ´´æÈ¡ºÍÉèÖÃËÞÖ÷»úÃû¡£(³¬¼¶Óû§ÓÃÒ»¸öÀàËÆµÄº¯Êýsetho  
stnameÀ´  
ÉèÖÃËÞÖ÷»úÃû¡£)ËÞÖ÷»úÃûͨ³£ÔÚϵͳ×Ô¾ÙʱÉèÖã¬ËüÓÉ/etc/rcÈ¡×ÔÒ»¸öÆô¶¯Îļþ  
¡£ª¥  
ËäÈ»´Ëº¯ÊýÊDZ´¿ËÀ³ËùÌØÓе쬵«ÊÇ£¬SVR4×÷ΪBSD¼æÈÝÐÔÈí¼þ°üµÄÒ»²¿·ÖÌṩge  
tbostname  
ºÍsetbostnameº¯Êý£¬ÒÔ¼°hostnameÃüÁî¡£SVR4Ò²½«MAXHOSTNAMELENÀ©³äΪ256×Ö½Ú  
¡£ª¥  
6ª±9¡þʱ¼äºÍÈÕÆÚÀý³Ìª¥  
ÓÉUnixϵͳºËÌṩµÄ»ù±¾Ê±¼ä·þÎñÊǹú¼Ê±ê׼ʱ¹«Ôª1970ª±1ª±1 00£º00£º00ÒÔÀ´  
¾­¹ýµÄÃë  
Êý¡£ÔÚ1ª±10½ÚÖÐÔøÌá¼°ÕâÖÖÃëÊýÊÇÒÔÊý¾ÝÀàÐÍtime-t±íʾµÄ¡£ÎÒÃdzÆËüÃÇΪÈÕÀú  
ʱ¼ä¡£ÈÕ  
Àúʱ¼ä°üÀ¨Ê±¼äºÍÈÕÆÚ¡£UnixÔÚÕâ·½ÃæÓëÆäËü²Ù×÷ϵͳµÄÇø±ðÊÇ(a)ÒÔ¹ú¼Ê±ê׼ʱ  
¶ø·Ç±¾µØ  
ʱ¼ä¼ÆÊ±£¬(b)¿É×Ô¶¯½øÐÐת»»£¬ÀýÈç±ä»»µ½ÏÄÈÕÖÆ£¬(c)½«Ê±¼äºÍÈÕÆÚ×÷Ϊһ¸öÁ¿  
Öµ±£´æ¡£  
timeº¯Êý·µ»Øµ±Ç°Ê±¼äºÍÈÕÆÚ¡£ª¥  
#include <timeª±h>ª¥  
time ¼£Ã£Ä££ª³£²¡½t time(time ¼£Ã£Ä££ª³£²¡½t *ª«calptr);ª«ª¥  
Returns:value of time if OK,-1 on error ·µ»Ø£ºÈô³É¹¦ÎªÊ±¼äÖµ£¬³ö´íΪ-1ª¥  
   
ʱ¼äÖµ×÷Ϊº¯ÊýÖµ·µ»Ø¡£Èç¹û²ÎÊýÊÇ·Çnull£¬Ôòʱ¼äÖµÒ²´æ·ÅÔÚÓÉcalptrÖ¸ÏòµÄµ¥  
ÔªÄÚ¡£ª¥  
Ôںܶ౴¿ËÀ³ÀàµÄϵͳÖУ¬time(3)Ö»ÊÇÒ»¸öº¯Êý£¬Ëüµ÷ÓÃgettime of day(2)ϵͳ  
µ÷Óᣪ¥  
ÔÚSVR4Öе÷ÓÃstime(2)º¯Êý£¬ÔÚ±´¿ËÀ³ÀàµÄϵͳÖе÷ÓÃsettime of day(2)¶Ôϵͳ  
ºËÖеĵ±  
ǰʱ¼äÉèÖóõʼֵ¡£ª¥  
ÓëtimeºÍstimeº¯ÊýÏà±È£¬BSDµÄgettime of dayºÍsettime of dayÌṩÁ˸ü¸ßµÄ·Ö  
±æÂÊ(΢  
Ãë¼¶)¡£Õâ¶ÔijЩӦÓÃÊǺÜÖØÒªµÄ¡£ª¥  
Ò»µ©È¡µÃÕâÖÖÒÔÃë¼ÆµÄºÜ´óµÄʱ¼äÖµºó£¬Í¨³£Òªµ÷ÓÃÁíÒ»¸öʱ¼äº¯Êý½«Æä±ä»»ÎªÈË  
ÃǿɶÁµÄ  
ʱ¼äºÍÈÕÆÚ¡£Í¼6ª±4˵Ã÷Á˸÷ÖÖʱ¼äº¯ÊýÖ®¼äµÄ¹ØÏµ¡£(ͼÖÐÒÔÐéÏß±íʾµÄËĸöº¯  
Êýlocalti  
me¡¢mktime¡¢ctimeºÍstrftime¶¼Êܵ½»·¾³±äÁ¿TZµÄÓ°Ïì¡£ÎÒÃǽ«ÔÚ±¾½ÚµÄ×îºó²¿  
·Ö¶ÔÆä½ø  
ÐÐ˵Ã÷¡£)ª¥  
P156ª¥ª¥ª¥  
ͼ6ª±4¡þ¸÷¸öʱ¼äº¯ÊýÖ®¼äµÄ¹ØÏµª¥  
Á½¸öº¯ÊýlocaltimeºÍgmtime½«ÈÕÀúʱ¼ä±ä»»³ÉÒÔÄê¡¢Ô¡¢ÈÕ¡¢Ê±¡¢·Ö¡¢Ãë¡¢ÖÜÈÕ  
±íʾµÄʱ  
¼ä£¬½«ÕâЩ´æ·ÅÔÚÒ»¸ötm½á¹¹ÖС£ª¥  
struct tm {  /* a broken-down time */ ÒÔÄê¡¢Ô¡¢ÈÕ¡¢Ê±¡¢·Ö¡¢Ãë±íʾµÄʱ¼ä  
ª¥  
int tm ¼£Ã£Ä££ª³£²¡½sec;  /* seconds after the minute:£Û0,61£Ý */Ãë£Û£°  
£¬£¶£±£Ý  
ª¥int tm ¼£Ã£Ä££ª³£²¡½min;  /* minutes after the hour:£Û0,59£Ý */·Ö£Û£°  
£¬£µ£¹£Ý  
ª¥int tm ¼£Ã£Ä££ª³£²¡½hour; /* hours after midnight:£Û0,23£Ý */ʱ£Û£°£¬  
£²£³£Ýª¥  
int tm ¼£Ã£Ä££ª³£²¡½mday; /* day of the month:£Û1,31£Ý */ÈÕ£Û£±£¬£³£±£Ý  
ª¥  
int tm ¼£Ã£Ä££ª³£²¡½mon; /* month of the year:£Û0,11£Ý */Ô£ۣ°£¬£±£±£Ý  
ª¥  
int tm ¼£Ã£Ä££ª³£²¡½year; /* years since 1900 */ 1900ºóµÄÄꪥ  
int tm ¼£Ã£Ä££ª³£²¡½wday; /* days since Sunday:£Û0,6£Ý */¢ÙÐÇÆÚ¼¸£Û£°£¬  
£¶£Ýª¥  
int tm ¼£Ã£Ä££ª³£²¡½yday; /* days since January 1:£Û0,365£Ý */¢Ú×Ô1ÔÂ1ÈÕ  
¾­¹ýµÄÌì  
Êý£Û£°£¬£³£¶£µ£Ýª¥  
int tm ¼£Ã£Ä££ª³£²¡½isdst; /* daylight saving time flag:<0,0,>0 */¢ÛÏÄÈÕ  
ÖÆÊ±¼ä±ê  
Ö¾£º<0,0,>0ª¥  
};ª¥  
Ãë¿ÉÒÔ³¬¹ý59µÄÀíÓÉÊÇ¿ÉÒÔ±íʾÈóÃë¡£×¢Ò⣬³ýÁËÔÂÈÕ×ֶΣ¬ÆäËü×ֶεÄÖµ¶¼ÒÔ0  
¿ªÊ¼¡£Èç  
¹ûÏÄÈÕÖÆÉúЧ£¬ÔòÏÄÈÕÖÆ±ê־ֵΪÕý£¬Èç¹ûÒÑ·ÇÏÄÈÕÖÆÊ±¼äÔòΪÁ㣬Èç¹û´ËÐÅÏ¢²»  
¿ÉÓã¬Ôò  
Ϊ¸º¡£ª¥  
#include <timeª±h>ª¥  
struct tm *gmtime(const time ¼£Ã£Ä££ª³£²¡½¡t¡ª«*calptr);ª«ª¥  
struct tm *localtime(const time ¼£Ã£Ä££ª³£²¡½t ª«*calptr);ª«ª¥  
Both return:pointer to broken-down timeª¥  
Á½¸öº¯Êý·µ»Ø£ºÖ¸Ïòtm½á¹¹µÄÖ¸Õ몥  
localtimeºÍgmtimeÖ®¼äµÄÇø±ðÊÇ:localtime½«ÈÕÀúʱ¼ä±ä»»³É±¾µØÊ±¼ä(¿¼Âǵ½±¾  
µØÊ±ÇøºÍ  
ÏÄÈÕÖÆ±êÖ¾)£¬¶øgmtimeÔò½«ÈÕÀúʱ¼ä±ä»»³É¹ú¼Ê±ê׼ʱµÄÄê¡¢Ô¡¢ÈÕ¡¢Ê±¡¢·Ö¡¢  
Ãë¡¢ÖÜÈÕ  
¡£ª¥  
º¯ÊýmktimeÒÔ±¾µØÊ±¼äµÄÄê¡¢Ô¡¢ÈÕµÈ×÷Ϊ²ÎÊý£¬½«Æä±ä»»³Étime-tÖµ¡£ª¥  
#include <timeª±h>ª¥  
time ¼£Ã£Ä££ª³£²¡½t mktime(struct tm *ª«tmptr);ª« ·µ»Ø£ºÈô³É¹¦ÎªÈÕÀúʱ¼ä  
£¬³ö´íΪ  
-1ª¥  
asctimeºÍctimeº¯Êý²úÉúÏÂÁÐÐÎʽµÄ26×Ö½Ú×Ö·û´®£¬ÕâÓëdate(1)ÃüÁîµÄϵͳĬÈÏ  
Êä³öÐÎʽ  
ÀàËÆ£ºª¤ª¥  
Tue Jan 14 17:49:03 1992£Ün£Ü0ª¥  
#include <timeª±h>ª¥  
char *asctime(const struct tm¡¡*ª«tmptr);ª«ª¥  
char *ctime(const time ¼£Ã£Ä££ª³£²¡½t *ª«calptr);ª«ª¥  
Á½¸öº¯Êý·µ»Ø£ºÖ¸Ïònull½áβµÄ×Ö·û´®ª¥  
asctimeµÄ²ÎÊýÊÇÖ¸ÏòÄê¡¢Ô¡¢ÈÕµÈ×Ö·û´®µÄÖ¸Õ룬¶øctimeµÄ²ÎÊýÔòÊÇÖ¸ÏòÈÕÀúʱ  
¼äµÄÖ¸Õë  
¡£ª¥  
×îºóÒ»¸öʱ¼äº¯ÊýÊÇstrftime£¬ËüÊǷdz£¸´ÔÓµÄprintfÀàµÄʱ¼äÖµº¯Êý¡£ª¥  
#include <timeª±h>ª¥  
size ¼£Ã£Ä££ª³£²¡½t strftime(char *ª«buf,ª«size ¼£Ã£Ä££ª³£²¡½t maxsize,  
const cha  
r *ª«format,ª«ª¥  
const struct tm *ª«tmptr);ª« ·µ»Ø£ºÈôÓпռäΪ´æÈëÊý×éµÄ×Ö·ûÊý£¬·ñÔòΪ0ª¥  
   
×îºóÒ»¸ö²ÎÊýÊÇÒª¸ñʽ»¯µÄʱ¼äÖµ£¬ËµÃ÷ΪָÏòÒ»¸öÄê¡¢Ô¡¢ÈÕ¡¢Ê±¡¢·Ö¡¢Ãë¡¢ÖÜ  
ÈÕʱ¼äÖµ  
µÄÖ¸Õë¡£¸ñʽ»¯½á¹û´æ·ÅÔÚÒ»¸ö³¤¶ÈΪmaxsize¸ö×Ö·ûµÄbufÊý×éÖУ¬Èç¹ûbuf³¤¶È  
ÊÇÒÔ´æ·Å  
¸ñʽ»¯½á¹û¼°Ò»¸önullÂçÖ¹·û£¬Ôò¸Ãº¯Êý·µ»ØÔÚbufÖдæ·ÅµÄ×Ö·ûÊý(²»°üÀ¨nullÖÕ  
Ö¹·û)¡£  
·ñÔò¸Ãº¯Êý·µ»Ø0¡£ª¥  
format²ÎÊý¿ØÖÆÊ±¼äÖµµÄ¸ñʽ¡£Èçͬprintfº¯ÊýÒ»Ñù£¬±ä»»ËµÃ÷µÄÐÎʽÊǰٷֺÅÖ®  
ºó¸úÒ»¸ö  
ÌØ¶¨×Ö·û¡£ÔÚformatÖÐµÄÆäËü×Ö·ûÔò°´Ô­ÔñÊä³ö¡£Á½¸öÁ¬ÐøµÄ°Ù·ÖºÅÔÚÊä³öÖвúÉú  
Ò»¸ö°Ù·Ö  
ºÅ¡£Óëprintfº¯ÊýµÄ²»Í¬Ö®´¦ÊÇ£¬Ã¿¸ö±ä»»ËµÃ÷²úÉúÒ»¸ö¶¨³¤Êä³ö×Ö·û´®£¬ÔÚfor  
mat×Ö·û´®  
ÖÐûÓÐ×ֶοí¶ÈÐÞÊηû¡£Í¼6ª±5ÖÐÁгöÁË21ÖÖANSIC¹æ¶¨µÄ±ä»»ËµÃ÷¡£ª¥  
P158ª¥ª¥ª¥  
ͼ6ª±5¡þstrftimeª¥  
ͼÖеÚÈýÁеÄÊý¾ÝÀ´×ÔÓÚÔÚSVR4ÉÏ£¬¶ÔÓ¦ÓÚÏÂÁÐʱ¼äºÍÈÕÆÚ£¬Ö´ÐÐstrftimeº¯ÊýËù  
µÃµÄ½á¹û  
¡£ª¥  
Tue¡þJan¡þ14¡þ19£º40¡þMST¡þ1992ª¥  
ͼ6ª±5ÖеĴó¶àÊý¸ñʽ˵Ã÷µÄÒâÒåÊǺÜÃ÷ÏԵġ£ÐèÒªÂÔ×÷½âÊ͵ÄÊÇ%UºÍ%W¡£%UÊÇÏà  
Ó¦ÈÕÆÚÔÚ  
¸ÃÄêÖÐËùÊôÒòÊý£¬°üº¬¸ÃÄêÖеÚÒ»¸öÐÇÆÚÈÕµÄÖÜÊǵÚÒ»ÖÜ¡£%WÒ²ÊÇÏàÓ¦ÈÕÆÚÔÚ¸ÃÄê  
ÖÐËùÊôµÄ  
ÖÜÊý£¬²»Í¬µÄÊǰüº¬µÚÒ»¸öÐÇÆÚÒ»µÄÖÜΪµÚÒ»ÖÜ¡£ª¥  
SVR4ºÍ4ª±3+BSD¶¼¶ÔstrftimeµÄ¸ñʽ×Ö·û´®ÌṩÁíһЩÀ©³äÖ§³Ö¡£ª¥  
ÎÒÃÇÔøÔÚÇ°ÃæÌá¼°£¬Í¼6ª±4ÖÐÒÔÐéÏß±íʾµÄËĸöº¯ÊýÊܵ½»·¾³±äÁ¿TZµÄÓ°Ïì¡£ÕâËÄ  
¸öº¯ÊýÊÇ  
£ºlocaltime,mktime,ctimeºÍstrftime¡£Èç¹û¶¨ÒåÁËTZ£¬ÔòÕâЩº¯Êý½«Ê¹ÓÃÆäÖµÒÔ  
´úÌæÏµÍ³  
ĬÈÏÊ±Çø¡£Èç¹ûTZ¶¨ÒåΪ¿Õ´®(Ò༴TZ=)£¬ÔòʹÓùú¼Ê±ê׼ʱ¡£TZµÄÖµ³£³£ÀàËÆÓÚ  
TZ=EST5ED  
T£¬µ«ÊÇPOSIXª±1ÔÊÐí¸üÏêϸµÄ˵Ã÷¡£ÓйØTZµÄÏêϸÇé¿öÇë²ÎÔÄPOSIXª±1±ê×¼£ÛIE  
EE 1990£Ý  
µÄ8ª±1ª±1½Ú£¬SVR4 environ(5)ÊÖ²áÒ³£ÛA T&T 1990e£Ý£¬»ò4ª±3+BSD ctime(3)ÊÖ  
²áÒ³¡£ª¥  
±¾½ÚËùÊöµÄËùÓÐʱ¼äºÍÈÕÆÚº¯Êý¶¼ÊÇÓÉANSIC±ê×¼¶¨ÒåµÄ¡£ÔÚ´Ë»ù´¡ÉÏ£¬POSIXª±1  
Ö»Ôö¼ÓÁË  
»·¾³±äÁ¿TZ¡£ª¥  
ͼ6ª±4ÖÐÆß¸öº¯ÊýÖеÄÎå¸ö¿ÉÒÔ»ØËݵ½Version7(»ò¸üÔç)£¬ËüÃÇÊÇ£ºtime¡¢local  
time¡¢gmt  
ime¡¢asctimeºÍctime¡£ÔÚUnixʱ¼ä¹¦ÄÜ·½Ãæ½üÆÚËù×÷µÄÔö¼Ó´ó¶àÊÇ´¦Àí·ÇUSÊ±Çø  
ÒÔ¼°ÏÄÈÕ  
ÖÆµÄ¸ü¸Ä¹æÔò¡£ª¥  
6ª±10¡þÕªÒªª¥  
ÔÚËùÓÐUnixϵͳÉ϶¼Ê¹ÓÿÚÁî×ÖÎļþºÍ×éÎļþ¡£ÎÒÃÇ˵Ã÷Á˸÷ÖÖ¶ÁÕâЩÎļþµÄº¯Êý  
¡£ÎÒÃÇÒ²  
½éÉÜÁËÒõÓ°¿ÚÁî×Ö£¬Ëü¿ÉÒÔÔö¼ÓϵͳµÄ°²È«ÐÔ¡£Ìí¼Ó×éIDÕýÔڵõ½¸ü¶àÓ¦Óã¬ËüÌá  
¹©ÁËÒ»¸ö  
Óû§Í¬Ê±¿ÉÒԲΰì¶à¸ö×éµÄ·½·¨¡£ÎÒÃÇÒ²½éÉÜÁË´ó¶àÊýϵͳËùÌṩµÄ´æÈ¡ÆäËüÓëϵ  
ͳÓйصĠ 
Êý¾ÝÎļþµÄÀàËÆµÄº¯Êý¡£×îºó£¬ÎÒÃÇ˵Ã÷ÁËANSICºÍPOSIXª±1ÌṩµÄÓëʱ¼äºÍÈÕÆÚ  
ÓйصÄһЩº¯Êý¡£¡¼£Ì£Í¡½  
   
   
 
--  
 
 
-- 
¡ù À´Ô´:¡¤BBS Ë®Ä¾Ç廪վ smth.org¡¤[FROM: 202.38.248.38] 

BBSˮľÇ廪վ¡Ã¾«»ªÇø