linux ÐÂÔöϵͳµ÷ÓÃ
´ËÎÄÓÚ2010-02-26±»ÍƼöµ½CSDNÊ×Ò³
ÈçºÎ±»ÍƼö£¿
×î½üÔÚÑо¿ Linux
Äں˵Äʱ¼ä×Óϵͳ£¬ÎªÏÂһƪ³¤ÎÄ¡¶·þÎñÆ÷³ÌÐòÖеÄÈÕÆÚÓëʱ¼ä¡·×ö×¼±¸£¬ÎÞÒâÖÐ×¢Òâµ½ÁË Linux
ÐÂÔöµÄ¼¸¸öϵͳµ÷ÓõĶԱàд·þÎñÆ÷´úÂëµÄÓ°Ï죬ÏÈ´óּǼÔÚÕâÀï¡£ÕâÆª²©¿ÍÒ²¿ÉËã×÷ǰһƪ¡¶¶àÏß
³Ì·þÎñÆ÷µÄ³£Óñà³ÌÄ£ÐÍ¡·
µÄÒ»¸ö×¢½Å¡£
< type="text/javascript">
1. ·þÎñÆ÷³ÌÐòµÄ·ç¸ñ¿ÉÄÜÔÚ±ä
еĴ´½¨ÎļþÃèÊö·ûµÄ
syscall Ò»°ã¶¼Ö§³Ö¶îÍâµÄ flags ²ÎÊý£¬¿ÉÒÔÖ±½ÓÖ¸¶¨ O_NONBLOCK ºÍ FD_CLOEXEC£¬ÀýÈ磺
accept4 – 2.6.28
eventfd2 – 2.6.27
inotify_init1
– 2.6.27
pipe2 – 2.6.27
signalfd4 – 2.6.27
timerfd_create 2.6.25
ÒÔÉÏ 6 ¸ö
syscalls£¬³ýÁË×îºóÒ»¸öÊÇй¦ÄÜ£¬ÆäÓàµÄ¶¼ÊÇÔöÇ¿ÔÓеĵ÷Ó㬰ÑÊý×ÖβºÅÈ¥µô¾ÍÊÇÔÀ´µÄ syscall¡£
O_NONBLOCK
µÄ¹¦ÄÜÊÇ¿ªÆô“·Ç×èÈûIO”£¬¶øÎļþÃèÊö·ûĬÈÏÊÇ×èÈûµÄ¡£
ÕâЩ´´½¨ÎļþÃèÊö·ûµÄϵͳµ÷ÓÃÄÜÖ±½ÓÉ趨 O_NONBLOCK
Ñ¡Ï»òÐíÄÜ·´Ó³µ±Ç° Linux £¨·þÎñ¶Ë£©¿ª·¢µÄ·çÏò£¬ÄǾÍÊÇÎÒÔÚǰһƪ²©¿Í¡¶¶àÏß
³Ì·þÎñÆ÷µÄ³£Óñà³ÌÄ£ÐÍ¡·
ÀïÍÆ¼öµÄ one loop per thread + (non-blocking IO with IO
multiplexing)¡£´ÓÕâЩÄں˸͝À´¿´£¬non-blocking IO ÒѾÖ÷Á÷µ½ÈÃÄÚºËÔö¼Ó syscall ÒÔ½Úʡһ´Î
fcntl(2) µ÷Óõij̶ÈÁË¡£
ÁíÍ⣬ÒÔÏÂÐÂϵͳµ÷ÓÿÉÒÔÔÚ´´½¨ÎļþÃèÊö·ûʱ¿ªÆô FD_CLOEXEC Ñ¡Ï
dup3 – 2.6.27
epoll_create1 – 2.6.27
FD_CLOEXEC
µÄ¹¦ÄÜÊÇÈóÌÐò fork() ʱ£¬×Ó½ø³Ì»á×Ô¶¯¹Ø±ÕÕâ¸öÎļþÃèÊö·û
£¨¼ûÏÂÃæµÄ¸üÕý
£©¡£
¶øÎļþÃèÊöĬÈÏÊDZ»×Ó½ø³Ì¼Ì³ÐµÄ£¨ÕâÊÇ´«Í³ Unix µÄÒ»ÖÖµäÐÍ IPC£¬±ÈÈçÓà pipe(2) ÔÚ¸¸×Ó½ø³Ì¼äµ¥ÏòͨÐÅ£©¡£
ÒÔÉÏ 8
¸öРsyscalls ¶¼ÔÊÐíÖ±½ÓÖ¸¶¨ FD_CLOEXEC£¬»òÐí˵Ã÷ fork() µÄÖ÷ҪĿµÄÒѾ²»ÔÙÊÇ´´½¨ worker process
²¢Í¨¹ý¹²ÏíµÄÎļþÃèÊö·ûºÍ¸¸½ø³Ì±£³ÖͨÐÅ£¬¶øÊÇÏñ Windows µÄ CreateProcess ÄÇÑù´´½¨“¸É¾»”µÄ½ø³Ì£¬ÆäÓ븸½ø³ÌûÓжàÉٹϸð¡£
ÒÔÉÏÁ½¸ö flags ÔÚÎÒ¿´À´£¬ËµÃ÷ Linux ·þÎñÆ÷¿ª·¢µÄÖ÷Á÷Ä£ÐÍÕýÔÚÓÉ fork() + worker processes
Ä£ÐÍת±äΪÎÒǰÎÄÍÆ¼öµÄ¶àÏß³ÌÄ£ÐÍ¡£fork() µÄʹÓÃÆµ¶È»á´ó´ó½µµÍ£¬½«À´»òÐíÖ»ÓÐרߺÔðÆô¶¯±ðµÄ½ø³ÌµÄ“¿´ÃŹ·³ÌÐò”²Å»áµ÷ÓÃ
fork()£¬¶øÒ»°ãµÄ·þÎñÆ÷³ÌÐò£¨´Ë´¦“·þÎñÆ÷³ÌÐò”µÄ¶¨Òå¼ûÎÒǰһƪÎÄÕ£©²»»áÔÙ fork() ³ö×Ó½
Ïà¹ØÎĵµ£º
ʹÓÃ80x86´¦ÀíÆ÷½øÐÐÑ°Ö·Ê±Ç£Éæµ½ÈýÖÖ²»Í¬µÄµØÖ·£¬Æä¹ØÏµÈçÏÂËùʾ
Âß¼µØÖ·------------------->ÏßÐÔµØÖ·-------------------------->ÎïÀíµØÖ·
£¨·Ö¶Î£©   ......
ls -l|grep ^d ----Áгöµ±Ç°Ä¿Â¼ÏµÄÎļþ¼Ð
ls -l|grep ^d|grep "tmp" ----Áгöµ±Ç°Ä¿Â¼ÏÂÃ÷×Óº¬ÓÐ"tmp"µÄÎļþ¼Ð
for dir in `ls -l ~/dxy/|grep ^d | awk '{print $9}'` ---- awk '{print $9}' ,Ö»print Îļþ¼ÐµÄÃû×Ö
do
echo "==== $dir"
cd ~/dxy;cd $dir/
t=`ls -l|grep ^d|grep " ......
˵Ã÷£º±¾ÎÄÒÔÖ÷ÒªÎª×ªÔØÄÚÈÝ£¬Í¬Ê±¼ÓÈëÁËÎÒÔÚʹÓùý³ÌÖÐÓöµ½ÎÊÌâ¶ÔÆäµÄÐÞÕý£¡£¡£¡£¡£¡£¡£¡£¡£¡
ÏÈ˵statfs½á¹¹£º
#include <sys/vfs.h> /* »òÕß <sys/statfs.h> */
int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);
²ÎÊý£º ......
×÷ÕߣºÒ×ËÉ»ª,»ªÇåÔ¶¼ûǶÈëʽѧԺ½²Ê¦¡£
ÔÚ»ªÇåÔ¶¼ûÉϿιý³ÌÖУ¬·¢ÏÖ¾²Ì¬Ó³Éä·½Ãæ³õѧÕ߱ȽÏÄÑÓÚÕÆÎÕºÍÀí½â£¬ÏÂÃæ·ÖÎöһϾ²Ì¬Ó³Éä»úÖÆµÄÔÀí²¢Í¨¹ýGPIOºÍUSB¡¢LCDµÈµÄ¾²Ì¬Ó³Éä×÷ΪÀý×ÓÀ´ËµÃ÷ÈçºÎͨ¹ýÕâÖÖ¾²Ì¬Ó³ÉäµÄ·½Ê½·ÃÎÊÍâÉè×ÊÔ´¡£
ÄÚºËÌṩÁËÒ»¸öÖØÒªµÄ½á¹¹Ìåstruct machine_desc ,Õâ¸ö½á¹¹ÌåÔÚÄÚºËÒÆÖ²ÖÐÆðµ½Ï൱ ......
Ôø×ö¹ýsignalÏà¹ØµÄÒ»µã¶ù¿ª·¢£¬Ì¸Ì¸ÎÒµÄһЩÀí½â¡£
Ê×ÏÈ£¬ÐèÒªÀí½â¼¸¸ösignalÏà¹ØµÄº¯Êý¡£
sigaddset(sigset_t* sigSet, int sigNum ) : ½«ÐźÅsigNum Ìí¼Óµ½Ðźż¯ sigSet ÖУ»
sigdelset(sigset_t* sigSet, int sigNum) : ½«ÐźŠsigNum ´ÓÐźż¯ sigSet ÖÐɾ³ý£»
......