Linux Ì×½Ó×Ö±à³ÌÖÐµÄ 5 ¸öÒþ»¼
Linux Ì×½Ó×Ö±à³ÌÖÐµÄ 5 ¸öÒþ»¼
ÔÚÒì¹¹»·¾³Öпª·¢¿É¿¿µÄÍøÂçÓ¦ÓóÌÐò
¼¶±ð£º Öм¶
M. Tim Jones
(mtj@mtjones.com
), ×ÊÉîÈí¼þ¹¤³Ìʦ, Emulex
2005 Äê 10 ÔÂ 08 ÈÕ
Socket API ÊÇÍøÂçÓ¦ÓóÌÐò¿ª·¢ÖÐʵ¼ÊÓ¦Óõıê×¼ API¡£¾¡¹Ü¸Ã API ¼òµ¥£¬µ«ÊÇ¿ª·¢ÐÂÊÖ¿ÉÄÜ»á¾ÀúһЩ³£¼ûµÄÎÊÌâ¡£±¾ÎÄʶ±ðһЩ×î³£¼ûµÄÒþ»¼²¢ÏòÄúÏÔʾÈçºÎ±ÜÃâËüÃÇ¡£
ÔÚ 4.2 BSD UNIX® ²Ù×÷ϵͳÖÐÊ×´ÎÒýÈ룬Sockets API ÏÖÔÚÊÇÈκβÙ×÷ϵͳµÄ±ê×¼ÌØÐÔ¡£ÊÂʵÉÏ£¬ºÜÄÑÕÒµ½Ò»ÖÖ²»Ö§³Ö Sockets API µÄÏÖ´úÓïÑÔ¡£¸Ã API Ï൱¼òµ¥£¬µ«ÐµĿª·¢ÈËÔ±ÈÔÈ»»áÓöµ½Ò»Ð©³£¼ûµÄÒþ»¼¡£
±¾ÎÄʶ±ðÄÇЩÒþ»¼²¢ÏòÄúÏÔʾÈçºÎ±Ü¿ªËüÃÇ¡£
Òþ»¼ 1£®ºöÂÔ·µ»Ø×´Ì¬
µÚÒ»¸öÒþ»¼ºÜÃ÷ÏÔ£¬µ«ËüÊÇ¿ª·¢ÐÂÊÖ×îÈÝÒ×·¸µÄÒ»¸ö´íÎó¡£Èç¹ûÄúºöÂÔº¯ÊýµÄ·µ»Ø×´Ì¬£¬µ±ËüÃÇʧ°Ü»ò²¿·Ö³É¹¦µÄʱºò£¬ÄúÒ²Ðí»áÃÔʧ¡£·´¹ýÀ´£¬Õâ¿ÉÄÜ´«²¥´íÎó£¬Ê¹¶¨Î»ÎÊÌâµÄÔ´Í·±äµÃÀ§ÄÑ¡£
²¶»ñ²¢¼ì²éÿһ¸ö·µ»Ø×´Ì¬£¬¶ø²»ÊǺöÂÔËüÃÇ¡£¿¼ÂÇÇåµ¥ 1 ÏÔʾµÄÀý×Ó£¬Ò»¸öÌ×½Ó×Ö send
º¯Êý¡£
Çåµ¥ 1. ºöÂÔ API º¯Êý·µ»Ø×´Ì¬
int status, sock, mode;
/* Create a new stream (TCP) socket */
sock = socket
( AF_INET, SOCK_STREAM, 0 );
...
status = send
( sock, buffer, buflen, MSG_DONTWAIT );
if (status == -1) {
/* send failed */
printf( "send failed: %s\n", strerror(errno) );
} else {
/* send succeeded -- or did it? */
}
Çåµ¥ 1 ̽¾¿Ò»¸öº¯ÊýƬ¶Ï£¬ËüÍê³ÉÌ×½Ó×Ö send
²Ù×÷£¨Í¨¹ýÌ×½Ó×Ö·¢ËÍÊý¾Ý£©¡£º¯ÊýµÄ´íÎó״̬±»²¶»ñ²¢²âÊÔ£¬µ«Õâ¸öÀý×ÓºöÂÔÁË send
ÔÚÎÞ×èÈûģʽ£¨ÓÉ MSG_DONTWAIT
±êÖ¾ÆôÓã©ÏµÄÒ»¸öÌØÐÔ¡£
send
API º¯ÊýÓÐÈýÀà¿ÉÄܵķµ»ØÖµ£º
Èç¹ûÊý¾Ý³É¹¦µØÅŵ½´«Êä¶ÓÁУ¬Ôò·µ»Ø 0¡£
Èç¹ûÅŶÓʧ°Ü£¬Ôò·µ»Ø -1£¨Í¨¹ýʹÓà errno
±äÁ¿¿ÉÒÔÁ˽âʧ°ÜµÄÔÒò£©¡£
Èç¹û²»ÊÇËùÓеÄ×Ö·û¶¼Äܹ»ÔÚº¯Êýµ÷ÓÃʱÅŶӣ¬Ôò×îÖյķµ»ØÖµÊÇ·¢Ë͵Ä×Ö·ûÊý¡£
ÓÉÓÚ send
µÄ MSG_DONTWAIT
±äÁ¿µÄÎÞ×èÈûÐÔÖÊ£¬º¯Êýµ÷ÓÃÔÚ·¢ËÍÍêËùÓеÄÊý¾Ý¡¢Ò»Ð©Êý¾Ý»òûÓз¢ËÍÈκÎÊý¾Ýºó·µ»Ø¡£ÔÚÕâÀïºöÂÔ·µ»Ø×´Ì¬½«µ¼Ö²»ÍêÈ«µÄ·¢ËͺÍËæºóµÄÊý¾Ý¶ªÊ§¡£
»ØÒ³Ê×
Òþ»¼ 2£®¶ÔµÈÌ×½Ó×Ö±Õ°ü
UNIX ÓÐȤµÄÒ»ÃæÊÇÄú¼¸ºõ¿ÉÒÔ°ÑÈκζ«Î÷¿´³ÉÊÇÒ»¸öÎļþ¡£Îļþ±¾Éí¡¢Ä¿Â¼¡¢¹ÜµÀ¡¢É豸ºÍÌ×½Ó×Ö¶¼±»µ±×÷Îļþ¡£ÕâÊÇÐÂÓ±µÄ³éÏó£¬Òâζ×ÅÒ»ÕûÌ×µÄ API ¿ÉÒÔÓÃÔڹ㷺µÄÉ豸ÀàÐÍÉÏ¡£
¿¼ÂÇ read
API º¯Êý£¬Ëü´ÓÎļþ¶
Ïà¹ØÎĵµ£º
ÔÎĵØÖ·£ºhttp://www.xxlinux.com/linux/article/development/embed/20080227/14047.html
LinuxºÍuClinux
LinuxÕýÖð½¥µØÓ¦ÓÃÓÚǶÈëʽÉ豸£¬uClinuxÕýÊÇÔÚÕâÖÖ·ÕΧϲúÉúµÄ¡£uClinux¾ÍÊÇMicro-Control-Linux£¬ËüÒ²ÊÇÒ»¸ö ......
LinuxϳÌÐòµÄProfile¹¤¾ß
ÎÒÃÇÔÚд³ÌÐò£¬ÌرðÊÇǶÈëʽ³ÌÐòµÄʱºò£¬Í¨³£ÐèÒª¶Ô³ÌÐòµÄÐÔÄܽøÐзÖÎö£¬ÒÔ±ã³ÌÐòÄܹ»¸ü¿ì¸üºÃµØÔËÐУ¬´ïµ½ÊµÊ±£¨real-time£©µÄÄ¿µÄ¡£Èç¹û³ÌÐòºÜ´ó£¬·ÖÎöÆðÀ´¾ÍºÜÀ§ÄÑ¡£Èç¹ûÓиö¹¤¾ßÄܹ»×Ô¶¯½øÐгÌÐòµÄÐÔÄÜ·ÖÎö£¬ÄǾÍ×îºÃÁË¡£ÕâÀï½éÉÜÒ»ÖÖLinuxϳÌÐòµÄProfiling¹¤¾ß----GNU profiler¡£
GNU gpr ......
debian lenny , my favorite
a. vim /etc/sysctl.conf:
modify net.ipv4.ip_forward = 1
b. flush route table:
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
c. open NAT services:
&nb ......
1. ²é¿´Äں˰汾ÃüÁ
1) [root@q1test01 ~]# cat /proc/version
Linux version 2.6.9-22.ELsmp (bhcompile@crowe.devel.redhat.com) (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) #1 SMP Mon Sep 19 18:00:54 EDT 2005
2) [root@q1test01 ~]# uname -a
Linux q1test01 2.6.9-22.ELsmp #1 SMP Mon Sep 19 18:00:54 ......
Ëùν½ø³Ì¾ÍÊdzÌÐòÖ´ÐÐʱµÄÒ»¸öʵÀý. ËüÊÇÏÖ´ú²Ù×÷ϵͳÖÐÒ»¸öºÜÖØÒªµÄ³éÏó,ÎÒÃÇ´Ó½ø³ÌµÄÉúÃüÖÜÆÚ:´´½¨,Ö´ÐÐ,ÏûÍöÀ´·ÖÎöÒ»ÏÂLinuxÉϵĽø³Ì¹ÜÀíʵÏÖ.
Ò»:ǰÑÔ
½ø³Ì¹ÜÀí½á¹¹;
ÔÚÄÚºËÖÐ,ÿһ¸ö½ø³Ì¶ÔÓ¦Ò»¸ötask.¾ÍÊÇÒÔǰËù½²µÄPCB.ËüµÄ½á¹¹ÈçÏÂ(include/linux/sched.h):
struct task_struct {
  ......