linux—selectÏê½â
selectϵͳµ÷ÓÃʱÓÃÀ´ÈÃÎÒÃǵijÌÐò¼àÊÓ¶à¸öÎļþ¾ä±úµÄ״̬±ä»¯µÄ¡£³ÌÐò»áÍ£ÔÚselectÕâÀïµÈ´ý£¬Ö±µ½±»¼àÊÓµÄÎļþ¾ä±úÓÐÒ»¸ö»ò¶à¸ö·¢ÉúÁË״̬¸Ä±ä¡£
¹ØÓÚÎļþ¾ä±ú£¬Æäʵ¾ÍÊÇÒ»¸öÕûÊý£¬Í¨¹ýsocketº¯ÊýµÄÉùÃ÷¾ÍÃ÷°×ÁË£º
int socket(int domain, int type, int protocol);
ÎÒÃÇ×îÊìϤµÄ¾ä±úÊÇ0¡¢1¡¢2Èý¸ö£¬0ÊDZê×¼ÊäÈ룬1ÊDZê×¼Êä³ö£¬2ÊDZê×¼´íÎóÊä³ö¡£0¡¢1¡¢2ÊÇÕûÊý±íʾµÄ£¬¶ÔÓ¦µÄFILE *½á¹¹µÄ±íʾ¾ÍÊÇstdin¡¢stdout¡¢stderr¡£
¼ÌÐøÉÏÃæµÄselect£¬¾ÍÊÇÓÃÀ´¼àÊÓij¸ö»òijЩ¾ä±úµÄ״̬±ä»¯µÄ¡£selectº¯ÊýÔÐÍÈçÏ£º
int select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
º¯ÊýµÄ×îºóÒ»¸ö²ÎÊýtimeoutÊÇÒ»¸ö³¬Ê±Ê±¼äÖµ¡£ÆäÀàÐÍÊÇstruct timeval *£¬¼´Ò»¸östruct timeval½á¹¹µÄ±äÁ¿µÄÖ¸Õ룬ËùÒÔÎÒÃÇÔÚ³ÌÐòÀïÒªÉùÃ÷Ò»¸östruct timeval tv;È»ºó°Ñ±äÁ¿tvµÄµØÖ·&tv´«µÝ¸øselectº¯Êý¡£struct timeval½á¹¹ÈçÏ£º
struct timeval
{
long tv_sec; //seconds
long tv_usec; //microseconds
}£»
µÚ2¡¢3¡¢4Èý¸ö²ÎÊýÊ ......
1¡£»ù´¡ÖªÊ¶
linuxÌṩ·þÎñÊÇÓÉÔËÐÐÔÚºǫ́µÄÊØ»¤³ÌÐò£¨daemon£©À´Ö´Ðеġ£
ÊØ»¤½ø³ÌµÄ¹¤×÷¾ÍÊÇ´ò¿ª1¸ö¶Ë¿Ú£¨port£©£¬µÈ´ý£¨listen£©½øÈëµÄÁ¬½Ó¡£
ÔÚC/SģʽÖУ¬Èç¹û¿Í»§ÌáÇëÁË1¸öÁ¬½Ó£¬ÊØ»¤½ø³Ì¾Í´´½¨£¨fork£©×Ó½ø³ÌÀ´ÏìÓ¦Õâ¸öÁ¬½Ó£¬¶ø¸¸½ø³Ì¼ÌÐø¼àÌýÆäËû·þÎñµÄÇëÇó¡£
µ«ÊÇ£¬¶ÔÓÚϵͳËùÌṩµÄÿ1¸ö·þÎñ£¬Èç¹û¶¼±ØÐëÔËÐÐ1¸ö¼àÌýij¸ö¶Ë¿ÚÁ¬½Ó·¢ÉúµÄÊØ»¤³ÌÐò£¬ÄÇôͨ³£Òâζ×Åϵͳ×ÊÔ´µÄÀË·Ñ¡£
Ϊ´Ë£¬ÒýÈë“À©Õ¹µÄÍøÂçÊØ»¤½ø³Ì·þÎñ³ÌÐò”xinetd£¨xinetd internet daemon£©¡£telnet·þÎñÒ²ÊÇÓÉxinetdÊØ»¤µÄ¡£
2¡£¼ì²âtelnet¡¢telnet-serverµÄrpm°üÊÇ·ñ°²×°
[root@localhost ~]# rpm -qa telnet
telnet-0.17-39.el5
//telnet*.rpmÊÇĬÈϰ²×°µÄ//
[root@localhost root]#rpm -qa telnet-server
¿Õ
//telnet*.rpmÊÇĬÈÏûÓа²×°µÄ//
3¡£°²×°telnet-server
[root@localhost ~]# rpm -qa telnet-server
[root@localhost ......
Ò»£®Ç°ÑÔ
¡¡¡¡LinuxÓµÓзḻ¸÷ÖÖÔ´´úÂë×ÊÔ´,µ«ÊǴ󲿷ִúÂëÔÚWindowsƽ̨Çé¿öÊÇÎÞ·¨Õý³£±àÒëµÄ¡£Windowsƽ̨¸ù±¾ÎÞ·¨Ö±½ÓÀûÓÃÕâЩԴ´úÂë×ÊÔ´¡£Èç¹ûÏëҪʹÓÃÍêÕûµÄ´úÂ룬¾ÍÒª×öÒÆÖ²¹¤×÷¡£ÒòΪC/C++ LibraryµÄ²»Í¬ºÍÆäËûµÄһЩÔÒò£¬ÒÆÖ²C/C++´úÂëÊÇÒ»ÏîÀ§ÄѵŤ×÷¡£±¾ÎĽ«ÒÔÒ»¸öʵ¼ÊµÄÀý×Ó£¨Tar£©À´ËµÃ÷ÈçºÎ°ÑLinux´úÂëÒÆÖ²µ½Windowsƽ̨ÉÏ¡£ÒÆÖ²¹ý³Ì½«¾¡Á¿ÉÙÐ޸ĴúÂë,ÒÔ±ã´úÂëµÄÔËÐÐÂß¼²»»á·¢ÉúÈκα䶯¡£±£Áô¾ø´ó²¿·ÖÈí¼þÖ÷Òª¹¦ÄÜ¡£
¡¡¡¡¶þ£®×¼±¸¹¤×÷
¡¡¡¡TarÊÇLinuxƽ̨ÏÂÃæÒ»¸ö´ò°ü¹¤¾ß¡£ÒÆÖ²ÕâÑùÒ»¸ö³ÌÐòµ½windowsƽ̨ÐèÒª×öÄÇЩ¹¤×÷ÄØ£¿
¡¡¡¡Ê×ÏÈÊÇһЩ׼±¸¹¤×÷£¬ÔÚWindowsƽ̨ÉÏÃæ°²×°ÉÏCygwinµÄ×îа汾£¬ÔÚCygwinÖа²×°ºÃGCCµÈ¿ª·¢¹¤¾ß¡£ ͬÑùÒ²ÐèÒªÒ»¸öWindows¿ª·¢»·¾³¡£¿ÉÒÔʹÓÃ×îа汾Visual Studio, Microsoft Visual Studio .NET 2003¡£´Ówww.gnu.orgÉÏÈ¡µÃTarµÄ×îÐÂÔ´´úÂ룬°æ±¾ÊÇ1.13¡£ÔÚCygwinÏÂÃæ½â¿ªtar-1.13.tar.gz.Ô´´úÂë°ü¡£×¢ÒâÇë²»ÒªÔÚWindowsÏÂÃæÊ¹ÓÃWINRAR»òÕßWINZIPÀ´½âѹËõ¡£ WINRARºÍWINZIPÔÚ½âѹËõijЩtar.gz°üµÄʱºò»áÓÐÎÊÌ⡣ʹµÃ½â°üÖ®ºóµÄĿ¼ºÍÎļþ³öÏÖÒì³£¡£Èç¹ûÊÇÔ´´úÂë°ü½«ÓпÉÄܲ»ÄÜÔÚCygwinÏÂÃæÕýÈ·±àÒë¡£½â¿ªÑ¹Ëõ°üÖ®ºó£¬½øÈë ......
Linux NetfilterʵÏÖ»úÖÆºÍÀ©Õ¹¼¼Êõ
¼¶±ð£º ³õ¼¶
ÑîɳÖÞ
(pubb@163.net
)¹ú·À¿Æ¼¼´óѧ¼ÆËã»úѧԺ
2003 Äê 3 ÔÂ 01 ÈÕ
http://www.ibm.com/developerworks/cn/linux/l-ntflt/
2.4.xµÄÄÚºËÏà¶ÔÓÚ2.2.xÔÚIPÐÒéÕ»²¿·ÖÓбȽϴóµÄ¸Ä¶¯£¬
Netfilter-iptables¸üÊÇÆäÒ»´óÌØÉ«£¬ÓÉÓÚËü¹¦ÄÜÇ¿´ó£¬²¢ÇÒÓëÄÚºËÍêÃÀ½áºÏ£¬Òò´ËѸËÙ³ÉΪLinuxƽ̨ϽøÐÐÍøÂçÓ¦ÓÃÀ©Õ¹µÄÖ÷ÒªÀûÆ÷£¬
ÕâЩÀ©Õ¹²»½ö°üÀ¨·À»ðǽµÄʵÏÖ--ÕâÖ»ÊÇNetfilter-iptablesµÄ»ù±¾¹¦ÄÜ--»¹°üÀ¨¸÷ÖÖ±¨ÎÄ´¦Àí¹¤×÷£¨È籨ÎļÓÃÜ¡¢±¨ÎÄ·ÖÀàͳ¼ÆµÈ£©£¬Éõ
ÖÁ»¹¿ÉÒÔ½èÖúNetfilter-iptables»úÖÆÀ´ÊµÏÖÐéÄâרÓÃÍø£¨VPN£©¡£±¾ÎĽ«ÖÂÁ¦ÓÚÉîÈëÆÊÎöNetfilter-iptablesµÄ×éÖ¯½á
¹¹£¬²¢Ïêϸ½éÉÜÈçºÎ¶ÔÆä½øÐÐÀ©Õ¹¡£NetfilterĿǰÒÑÔÚARP¡¢IPv4ºÍIPv6ÖÐʵÏÖ£¬¿¼Âǵ½IPv4ÊÇÄ¿Ç°ÍøÂçÓ¦ÓõÄÖ÷Á÷£¬±¾ÎĽö¾ÍIPv4
µÄNetfilterʵÏÖ½øÐзÖÎö¡£
ÒªÏëÀí½âNetfilterµÄ¹¤×÷ÔÀí£¬±ØÐë´Ó¶ÔLinux IP±¨ÎÄ´¦ÀíÁ÷³ÌµÄ·ÖÎö¿ªÊ¼£¬NetfilterÕýÊǽ«×Ô¼º½ôÃܵع¹½¨ÔÚÕâÒ»Á÷³ÌÖ®Öеġ£
1£® IP Packet Flowing
IP
ÐÒéÕ»ÊÇLinux²Ù×÷ϵͳµÄÖ÷Òª×é³É²¿·Ö£¬Ò²ÊÇLinuxµÄÌØÉ«Ö®Ò»£¬ËØÒÔ¸ßЧÎȶ¨Öø³Æ¡£NetfilterÓëIPÐÒéÕ»ÊÇÃÜÇнáºÏÔÚÒ»Æðµ ......
linux¿âÎļþ±àдÈëÃÅ
Ò»¡¢ÎªÊ²Ã´ÒªÊ¹ÓÿâÎļþ
ÎÒÃÇÔÚʵ¼Ê±à³Ì¹¤×÷Öп϶¨»áÓöµ½ÕâÖÖÇé¿ö£ºÓм¸¸öÏîÄ¿ÀïÓÐһЩº¯ÊýÄ£¿éµÄ¹¦ÄÜÏàͬ£¬
ʵÏÖ´úÂëÒ²Ïàͬ£¬Ò²ÊÇÎÒÃÇËù˵µÄÖØ¸´´úÂë¡£±ÈÈ磬ºÜ¶àÏîÄ¿Àï¶¼ÓÐÒ»¸öÓû§ÑéÖ¤µÄ¹¦ÄÜ¡£
´úÂë¶ÎÈçÏ£º
//UserLogin.hÎļþ£¬Ìṩº¯ÊýÉùÃ÷
int IsValidUser(char* username, int namelen);
//UserLogin.cÎļþ£¬ÊµÏÖ¶ÔÓû§ÐÅÏ¢µÄÑéÖ¤
int IsValidUser(char* username, int namelen)
{
int IsValid = 0;
/*ÏÂÃæÊǾßÌåµÄ´¦Àí´úÂ룬ÂÔÈ¥*/
return IsValid
}
Èç¹ûÿ¸öÏîÄ¿¶¼±£´æ×ÅÕâÁ½¸öUserLogin.hºÍUserLogin.cÎļþ£¬»áÓÐÒÔϼ¸¸ö±×¶Ë:
1¡¢Ã¿¸öÏîÄ¿Àï¶¼ÓÐÖØ¸´µÄÄ£¿é£¬Ôì³É´úÂëÖØ¸´¡£
2¡¢´úÂëµÄÖØÓÃÐÔ²»ºÃ£¬Ò»µ©IsValidUserµÄ´úÂë·¢ÉúÁ˱仯£¬ÎªÁ˱£³ÖÉè¼ÆµÄÒ»ÖÂÐÔ£¬ÎÒÃÇ»¹ÒªÊÖ¹¤ÐÞ¸ÄÆäËûÏîÄ¿ÀïµÄUserLogin.cÎļþ£¬¼È·ÑʱÓÖ·ÑÁ¦£¬»¹ÈÝÒ׳ö´í¡£
¿âÎļþ¾ÍÊǶԹ«¹²´úÂëµÄÒ»ÖÖ×éÖ¯ÐÎʽ¡£
& ......
Linux initial RAM disk (initrd) overview
Learn about its anatomy, creation, and use in the Linux boot process
M. Tim Jones
(mtj@mtjones.com
), Consultant Engineer, Emulex
M. Tim Jones is an embedded software architect and the author of GNU/Linux Application Programming
, AI Application Programming
, and BSD Sockets Programming from a Multilanguage Perspective
.
His engineering background ranges from the development of kernels for
geosynchronous spacecraft to embedded systems architecture and
networking protocols development. Tim is a Consultant Engineer for
Emulex Corp. in Longmont, Colorado.
Summary:
The Linux® initial RAM disk (initrd) is a temporary
root file system that is mounted during system boot to support the
two-state boot process. The initrd contains various executables and
drivers that permit the real root file system to be mounted, after
which the initrd RAM disk is unmounted and its memory freed. In many
embedded Linux systems, the initrd ......