¹ØÓÚlinuxµÄ¶Áд²Ù×÷
½¨Á¢ÁËÁ¬½Ó,¾Í¿ÉÒÔ½øÐÐͨѶÁË,ÍùÎļþÃèÊö·ûÀï¶Áд,ºÍ¶ÁдÎļþÊÇÒ»ÑùµÄ.
дº¯Êý:
ssize_t write(int fd,(void *)buf,size_t nbytes)
½«bufÖеÄnbytesдÈëµ½fdÖÐ,³É¹¦Ê±·µ»ØËùдµÄ×Ö½ÚÊý,ʧ°Üʱ·µ»Ø-1,²¢Ð´Èëerrno±äÁ¿.
µ±ÎÒÃÇÏóÌ×½Ó×ÖдÊý¾Ýʱ,¿ÉÄÜ»áÓÐÁ½ÖÖÇé¿ö:
a.writeµÄ·µ»ØÖµ´óÓÚ0,±íʾдÁ˲¿·Ö»òÕßÊÇÈ«²¿µÄÊý¾Ý
b.·µ»ØµÄֵСÓÚ0,´Ëʱ³öÏÖÁË´íÎó.ÎÒÃÇÒª¸ù¾Ý´íÎóÀàÐÍÀ´´¦Àí
Èç¹û´íÎóΪEINTR±íʾÔÚдµÄʱºò³öÏÖÁËÖжϴíÎó.
Èç¹ûΪEPIPE±íÊ¾ÍøÂçÁ¬½Ó³öÏÖÁËÎÊÌâ(¶Ô·½ÒѾ¹Ø±ÕÁËÁ¬½Ó).
¶Áº¯Êý:
ssize_t read(int fd,(void *)buf,size_t nbytes)
´ÓfdÖжÁÄÚÈÝ,µ±¶Á³É¹¦Ê±,·µ»Ø¶ÁÈëµÄ×Ö½ÚÊý,·µ»ØÊÇ0,Ôð±íʾÒѾ¶ÁÈëµ½Îļþ½áÊøÁË,СÓÚ0±íʾ³öÏÖÁË´íÎó.
Êý¾Ý±¨µÄ·¢ËÍ:
int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr *from,int *fromlen);
int sendto(int sockfd,const void *msg,int len,unsigned int flags,struct sockaddr *to,int tolen);
sockfd,buf,lenµÄÒâÒåºÍread,writeÒ»Ñù,·Ö±ð±íʾÌ×½Ó×ÖÃèÊö·û,·¢ËÍ»ò½ÓÊյĻº³åÇø¼°´óС.recvfrom¸ºÔð´Ósockfd½ÓÊÕÊý¾Ý,Èç¹ûfrom²»NULL,ÄÇôÔÚfromÀïÃæ´æ´¢ÁËÐ ......
KS2009: How Google uses Linux
By Jonathan Corbet
October 21, 2009
LWN's 2009 Kernel Summit coverage
There may be no single organization which runs more Linux systems than Google. But the kernel development community knows little about how Google uses Linux and what sort of problems are encountered there. Google's Mike Waychison traveled to Tokyo to help shed some light on this situation; the result was an interesting view on what it takes to run Linux in this extremely demanding setting.
Mike started the talk by giving the developers a good laugh: it seems that Google manages its kernel code with Perforce. He apologized for that. There is a single tree that all developers commit to. About every 17 months, Google rebases its work to a current mainline release; what follows is a long struggle to make everything work again. Once that's done, internal "feature" releases happen about every six months.
This way of doing things is far from ideal; it means that Google lags far ......
LinuxÉ豸Îļþ¼ò½é
LinuxÉ豸Îļþ¼ò½é
¸ÅÊö
É豸¹ÜÀíÊÇlinuxÖбȽϻù´¡µÄ¶«Î÷£¬µ«ÊÇÓÉÓÚLinuxÖÇÄ̶ܳȵÄÔ½À´Ô½¸ß£¬UdevµÄʹÓÃÔ½À´Ô½¹ã·º£¬Ê¹µÃÔ½À´Ô½¶àµÄLinuxÐÂÓû§¶Ô /dev Ŀ¼ÏµĶ«Î÷±äµÃ²»ÔÙÊìϤ¡£ÓÐʱºòÓö¼ûÎÊÌâ¾Í»á±äµÃ×¥¿ñ¡£
Linux ÖеÄÉ豸ÓÐ2ÖÖÀàÐÍ£º×Ö·ûÉ豸(ÎÞ»º³åÇÒÖ»ÄÜ˳Ðò´æÈ¡)¡¢¿éÉ豸(Óлº³åÇÒ¿ÉÒÔËæ»ú´æÈ¡)¡£Ã¿¸ö×Ö·ûÉ豸ºÍ¿éÉ豸¶¼±ØÐëÓÐÖ÷¡¢´ÎÉ豸ºÅ£¬Ö÷É豸ºÅÏàͬµÄÉ豸ÊÇͬÀàÉ豸(ʹÓÃͬһ¸öÇý¶¯³ÌÐò)¡£ÕâЩÉ豸ÖУ¬ÓÐЩÉ豸ÊǶÔʵ¼Ê´æÔÚµÄÎïÀíÓ²¼þµÄ³éÏ󣬶øÓÐЩÉ豸ÔòÊÇÄÚºË×ÔÉíÌṩµÄ¹¦ÄÜ(²»ÒÀÀµÓÚÌØ¶¨µÄÎïÀíÓ²¼þ£¬ÓÖ³ÆÎª"ÐéÄâÉ豸")¡£Ã¿¸öÉ豸ÔÚ /dev Ŀ¼Ï¶¼ÓÐÒ»¸ö¶ÔÓ¦µÄÎļþ(½Úµã)¡£¿ÉÒÔͨ¹ý cat /proc/devices ÃüÁî²é¿´µ±Ç°ÒѾ¼ÓÔØµÄÉ豸Çý¶¯³ÌÐòµÄÖ÷É豸ºÅ¡£ÄÚºËÄܹ»Ê¶±ðµÄËùÓÐÉ豸¶¼¼Ç¼ÔÚÔÂëÊ÷Ï嵀 Documentation/devices.txt ÎļþÖС£ÔÚ /dev Ŀ¼Ï³ýÁË×Ö·ûÉ豸ºÍ¿éÉ豸½ÚµãÖ®Í⻹ͨ³£»¹»á´æÔÚ£ºFIFO¹ÜµÀ¡¢Socket¡¢Èí/Ó²Á¬½Ó¡¢Ä¿Â¼¡£ÕâЩ¶«Î÷ûÓÐÖ÷/´ÎÉ豸ºÅ¡£
É豸Îļþ
LinuxÄÚºËËùÄÜʶ±ðµÄËùÓÐÉ豸¶¼¼Ç¼ÔÚ
http://www.lanana.org/docs/device-list/
¶øÄÚºËÔÂëÊ÷ÖÐµÄ Documentation/devices.txt ¿ÉÄܲ»ÊÇ× ......
À¥É½ÐùÔ¯Linux¿ª·ÅʵÑéÊÒ
¼ò½é
Ϊ·½±ã¹ã´óLinuxÈí¼þ¿ª·¢Õߣ¬ÐùÔ¯¸ß¶ËITÅàѵÖÐÐÄÓÚ2009Äê10ÔÂÉèÁ¢ÁËLinux¿ª·ÅʵÑéÊÒ£¬ÐùÔ¯Linux¿ª·ÅʵÑéÊÒÌṩÁËÍêÕûµÄLinux Èí¼þ¿ª·¢»·¾³£¬°üÀ¨£ºC/C++£¨GCC¡¢GDB£©¡¢make¡¢Java¡¢Python¡¢Perl¡¢C++ Boost¡¢C++ ACE¡¢C++ OTL¡¢Oracle¡¢MySQL¡¢Tomcat...£¬ÄÒÀ¨ÁËÍøÂç¡¢¶àÏ̡߳¢Êý¾Ý¿âµÈ·þÎñÆ÷¶ËÈí¼þ¿ª·¢µÄ¸÷¸ö·½Ãæ¡£
Linux¿ª·ÅʵÑéÊÒµäÐÍÓÃ;
* ÊìϤLinux²Ù×÷ϵͳ£¬ÈçϵͳÃüÁî¡¢Shell±à³Ì¡¢viµÈ±à¼Æ÷£»
* C++ÓïÑÔµÄѧϰÓëÈí¼þ¿ª·¢£¬°üÀ¨»ùÓÚBoostºÍACEµÄÈí¼þ¿ª·¢£»
* C++Êý¾Ý¿â¿ª·¢£¬OTL£»
* JavaÓïÑÔµÄѧϰÓëÈí¼þ¿ª·¢£»
* JavaÊý¾Ý¿â¿ª·¢£¬jdbc£»
* Python¡¢PerlµÈ½Å±¾ÓïÑÔµÄѧϰÓëÈí¼þ¿ª·¢£»
* ¸ü¶àÄúÄÜ·¢¾òµ½µÄÓÃ;...
¿ª·¢»·¾³
* ²Ù×÷ϵͳ£ºRedhat Enterprise Linux 5.4£»
* C/C++£ºGCC¹¤¾ßÁ´£¨g++/gcc 4.4.0/4.1.2/3.4.0¡¢gdb 6.8£©¡¢GNU make 3.81¡¢GNU autotools 2.59µÈ£»
  ......
1)Í·Îļþ
windowsÏÂwinsock.h»òwinsock2.h
linuxÏÂnetinet/in.h£¨´ó²¿·Ö¶¼ÔÚÕâ¶ù£©£¬unistd.h£¨closeº¯ÊýÔÚÕâ¶ù£©£¬sys/socket.h£¨ÔÚin.hÀïÒѾ°üº¬ÁË£¬¿ÉÒÔÊ¡ÁË£©
2)³õʼ»¯
windowsÏÂÐèÒªÓÃWSAStartupÆô¶¯Ws2_32.lib£¬²¢ÇÒÒªÓÃ#pragma comment(lib,"Ws2_32")À´¸æÖª±àÒëÆ÷Á´½Ó¸Ãlib¡£
linuxϲ»ÐèÒª
3)¹Ø±Õsocket
windowsÏÂclosesocket(...)
linuxÏÂclose(...)
4)ÀàÐÍ
windowsÏÂSOCKET
linuxÏÂint£¨ÎÒϲ»¶ÓÃlong£¬ÕâÑù±£Ö¤ÊÇ4byte£¬ÒòΪ-1ÎÒ×Üϲ»¶Ð´³É0xFFFF£©
5)»ñÈ¡´íÎóÂë
windowsÏÂgetlasterror()/WSAGetLastError()
linuxÏ£¬Î´Äܳɹ¦Ö´ÐеÄsocket²Ù×÷»á·µ»Ø-1£»Èç¹û°üº¬ÁËerrno.h£¬¾Í»áÉèÖÃerrno±äÁ¿
6)ÉèÖ÷Ç×èÈû
windowsÏÂioctlsocket()
linuxÏÂfcntl()£¬ÐèҪͷÎļþfcntl.h
7)sendº¯Êý×îºóÒ»¸ö²ÎÊý
windowsÏÂÒ»°ãÉèÖÃΪ0
linuxÏÂ×îºÃÉèÖÃΪMSG_NOSIGNAL£¬Èç¹û²»ÉèÖã¬ÔÚ·¢Ëͳö´íºóÓпÉÄܻᵼÖ³ÌÐòÍ˳ö
8)ºÁÃ뼶ʱ¼ä»ñÈ¡
windowsÏÂGetTickCount()
linuxÏÂgettimeofday()
9)¶àÏß³Ì
windowsϰüº¬process.h£¬Ê¹ÓÃ_beginthreadºÍ_endthread
linuxϰüº¬pthread.h£¬Ê¹ÓÃpthread_createºÍpthread_exit
10)ÓÃIP¶¨ÒåÒ»¸öµØÖ·£¨sockaddr_inµÄ½á¹ ......
ÒýÓÃhttp://hi.baidu.com/tim_bi/blog/item/f1038ed6e3399d2707088bb3.html
2009-02-28 22:58
×î½ü½ÓµÄÏîÄ¿ÊÇÄ£Äâ¶à¸ö
socket
¿Í»§¶ËÓë·þÎñÆ÷½øÐÐͨÐÅ¡£ÓÉÓÚ
Linux
ϵͳµÄÏÞÖÆ£¬ÔÚ
linux/include/linux/posix_types.h
ÎļþÖÐÓÐÈçϵĺ궨Ò壺
#undef __FD_SETSIZE
#define __FD_SETSIZE
1024
Õâ¸öºêÊǶÔ×î´óÎļþÃèÊö·ûµÄ¶¨ÒåΪ
1024
¡£µ±ÐèÒª
1024
¸öÒÔÉϵÄ
fd
ʱ£¬ÀýÈç
select()
º¯Êý¾Í»áÕìÌý³ö´í¡£Òò´ËÐèÒª½«
1024
¸Ä³ÉÐèÒªµÄÊýÄ¿£¬µ«×î¶à²»Äܳ¬¹ý
65535
¡£µ«½ö½öÐÞ¸ÄÕâ¸öÊDz»¹»µÄ¡£
µÚ¶þ²½¾ÍÐèÒªÐÞ¸ÄÒ»¸ö½ø³Ì×î´ó´ò¿ªµÄÎļþÊý¡£Æä¾ßÌå²½ÖèÊÇ£º
1
¡¢
cd /usr/src/linux-2.4/include/linux
2
¡¢
vi limits.h
¡¡±à¼Îļþ£º
#define NR_OPEN 90240
ÔֵΪ
1024
#define OPEN_MAX 10240
ÔֵΪ
1024
3
¡¢
vi fs.h
#define INR_OPEN 10240
ÔֵΪ
1024
#define NR_FILE 65536
ÔֵΪ
8192
£¬Õâ¸öֵΪÄÚ´æ
64/1M
µÄ±ÈÂʼÆË㣬
1G
ÄÚ´æ¼ÆËãΪ
:64*1024
#define NR_RESERVED_FILES 128
ÔֵΪ
10.
4
¡¢
cd /usr/src/linux-2.4/include/net
5
¡¢
vi tcp.h
#define TCP_LHTABLE_SIZE 128
ÔֵΪ
32 ......