×î½üÔÚ¿´Ò»¸ö¿ªÔ´µÄ´úÂ룬һ¶Î´úÂë¿´Á˺ܾö¼Ã»Óп´¶®£¬GoogleÁËһϣ¬¾¡È»ÊÇlinuxÖÐÁ´±íµÄ±éÀú¡£
±éÀúÁ´±í£º
±éÀúÁ´±ílist_for_eachÊÇÒ»¸öºê£¬Õ¹¿ªÁ˾ÍÊÇÒ»¸öforÑ»·
#define list_for_each(pos, head) \
for (pos = (head)->next; prefetch(pos->next), pos != (head); \
pos = pos->next)
ÆäÖÐprefech(pos->next)ÊÇ´¦ÀíÆ÷Ԥȡpos->next£¬Í¨¹ý´¦ÀíÆ÷µÄԤȡ¹¦ÄÜ£¬¶ÔforÑ»·½øÐÐÁËÓÅ»¯¡£
···ÃÎÊÊý¾Ý²Ù×÷£º
#define list_entry(ptr, type, member) \
container_of(ptr, type, member)
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) * __mptr = (ptr); \
......
×ܾõµÃÔÚITÐÐÒµÀï»ì£¬Ñ§±à³ÌÓïÑÔҪѧϰC²ÅÏñÑù£¬¿ª·¢ÒªÔÚLinuxϲÅÄÜ·¢»ÓºÃ£¬ºÇºÇ£¬Ëæ¿Ú˵µÄ£¬²»¹ý¸öÈËÈÏΪÏëÉîÈëµÄѧϰ¼ÆËã»ú֪ʶ£¬»¹ÊÇÓ¦¸ÃѧϰLinux²Ù×÷ϵͳ£¬ËùÒÔ´Ó½ñÌ쿪ʼÿÌì³é³öÒ»¸öСʱѧϰ£¬ÔÚ´Ë×öһЩѧϰ¼Ç¼£¬ÒÔ¹©ÒÔºó²éѯ×ܽᡣ
½ñÌìÊǰ²×°£¬ÊÇÔÚVMwareϰ²×°µÄRed hat 9,°²×°Ï൱˳³©£¬Ò»Â·nextÏÂÈ¥£¬¾ÍOKÁË£¬²»¹ýÏëÆðÔÚѧУʱ°²×°¹ý³Ì£¬Ï൱ÏëËÀ£¬ºÃ²»ÈÝÒ×°²×°³É¹¦ÁË£¬Êó±ê¾¹È»²»Äܶ¯£¬²îÁËÒ»Àº×ÓµÄ×ÊÁÏ£¬Ò²²»ÖªµÀ¸öËùÒÔÈ»£¬ºóÀ´ºúÂÒµÄÉèÖ㬾¹È»×Ô¼ººÃÁË£¬ÓôÃÆ£¬ÔÙºóÀ´µÄ°²×°ÔÙҲûÓгöÏÖ¹ý´ËÖÖÇé¾°£¬»òÐí¸Õ¿ªÊ¼¸øÎÒ¿ªÁ˸öÍæÐ¦……
Ïëµ½¿ìҪʹÓÃLinux£¬ºÜ¼¤¶¯…… ......
ºÜ¶àLINUX³õѧÕß·Ö²»Çå³þlinuxºÍXÖ®¼ä,XºÍXfree86Ö®¼ä,XºÍKDE,GNOMEµÈÖ®¼äÊÇʲô¹ØÏµ.³£³£»ìÏý¸ÅÄî,ÎÒÏëÒԱȽÏÒ×ÓÚÀí ½âµÄ·½Ê½ËµÃ÷Ò»ÏÂX,X11,XFREE,WM,KDE,GNOMEµÈÖ®¼äµÄ¹ØÏµ.ÓÉÓÚ±¾ÈËˮƽÓÐÏÞ¿ÉÄÜ´æÔÚ´íÎó,Çë¸ßÊÖÖ¸Õý.
Ò»,linux±¾ÉíûÓÐͼÐνçÃæ,linuxÏÖÔÚµÄͼÐνçÃæµÄʵÏÖÖ»ÊÇlinuxϵÄÓ¦ÓóÌÐòʵÏÖµÄ.
ͼ ÐνçÃæ²¢²»ÊÇlinuxµÄÒ»²¿·Ö,linuxÖ»ÊÇÒ»¸ö»ùÓÚÃüÁîÐеIJÙ×÷ϵͳ,linuxºÍXfreeµÄ¹ØÏµ¾ÍÏ൱ÓÚµ±ÄêµÄDOSºÍ WINDOWS3.0Ò»Ñù,windows3.0²»ÊǶÀÁ¢µÄ²Ù×÷ϵͳ,ËüÖ»ÊÇDOSµÄÀ©³ä,ÊÇDOSϵÄÓ¦ÓóÌÐò¼¶±ðµÄϵͳ,²»ÊǶÀÁ¢µÄ²Ù×÷ϵͳ,ͬÑù XFreeÖ»ÊÇlinuxϵÄÒ»¸öÓ¦ÓóÌÐò¶øÒÑ.²»ÊÇϵͳµÄÒ»²¿·Ö,µ«ÊÇXµÄ´æÔÚ¿ÉÒÔ·½±ãÓû§Ê¹ÓõçÄÔ.WINDOWS95¼°ÒÔºóµÄ°æ±¾¾Í²»Ò»ÑùÁË,ËûÃÇ µÄͼÐνçÃæÊDzÙ×÷ϵͳµÄÒ»²¿·Ö,ͼÐνçÃæÔÚϵͳÄÚºËÖоÍʵÏÖÁË,ûÓÐÁËͼÐνçÃæwindows¾Í²»³ÉΪwindowsÁË,µ«linuxÈ´²»Ò»Ñù,ûÓÐͼÐÎ ½çÃælinux»¹ÊÇlinux,ºÜ¶à×°linuxµÄWEB·þÎñÆ÷¾Í¸ù±¾²»×°X·þÎñÆ÷.ÕâÒ²WINDOWSºÍlinuxµÄÖØÒªÇø±ðÖ®Ò».
¶þ,XÊÇÐÒé,²»ÊǾßÌåµÄij¸öÈí¼þ:
X ÊÇÐÒé,¾ÍÏñHTTPÐÒé,IPÐÒéÒ»Ñù.Õâ¸ö¸ÅÄîºÜ¶à³õѧÕßÉõÖÁѧϰLINUXÓÐÒ»¶¨Ê±¼äµÄÈ˶¼»ìÏý,Ò»¸ö»ùÓÚXµÄÓ¦ÓóÌÐòÐèÒªÔËÐв¢ÏÔʾÄÚÈÝʱËû¾ÍÁª ½Ó ......
°ÑÔ´´úÂëÔËÐÐÒ»±é¾ÍÖªµÀÁË
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <pthread.h>
pthread_mutex_t* g_mutex;
//´´½¨¹²ÏíµÄmutex
void init_mutex(void)
{
int ret;
//g_mutexÒ»¶¨ÒªÊǽø³Ì¼ä¿ÉÒÔ¹²ÏíµÄ£¬·ñÔòÎÞ·¨´ïµ½½ø³Ì¼ä»¥³â
g_mutex=(pthread_mutex_t*)mmap(NULL, sizeof(pthread_mutex_t), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
if( MAP_FAILED==g_mutex )
{
perror("mmap");
exit(1);
}
//ÉèÖÃattrµÄÊôÐÔ
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
//Ò»¶¨ÒªÉèÖÃΪPTHREAD_PROCESS_SHARED
//¾ßÌå¿ÉÒԲο¼http://blog.chinaunix.net/u/22935/showart_340408.html
ret=pthread_mutexattr_setpshared(&attr,PTHREAD_PROCESS_SHARED);
if( ret!=0 )
{
perror("init_mutex pthread_mutexattr_setpshared");
exit(1);
}
pthread_mutex_init(g_mutex, &attr);
}
int main(int argc, char *argv[])
{
init_ ......
LinuxÖÕ¶Ë»·¾³Ï£¬ÀûÓÃÖÕ¶ËÃüÁîÐòÁпÉÒÔÉèÖÃ×ÖÌåµÄÑÕÉ«£¬Æä¸ñʽÈçÏ£º
<ESC>[<C1>;<C2>;<C3>m
ÆäÖÐ<ESC>µÄֵΪ\033£¬ÊäÈë·½·¨Îª£ºCtrl+V, Escape£»<C1>¡¢<C2>¡¢<C3>·Ö±ð´ú±íǰ¾°É«¡¢±³¾°É«ºÍÏÔʾЧ¹û£¬¾ßÌåµÄȡֵÈçÏ£º
No.
ǰ¾°É«
±³¾°É«
ÏÔʾЧ¹û
1
30
ºÚÉ«
40
ºÚÉ«
0
Çå³ý
2
31
ºìÉ«
41
ºìÉ«
1
¸ßÁÁ
3
32
ÂÌÉ«
42
ÂÌÉ«
4
Ï»®Ïß
4
33
»ÆÉ«
43
»ÆÉ«
5
ÉÁ˸
5
34
À¶É«
44
À¶É«
7
·´°×
6
35
×ϺìÉ«
45
×ϺìÉ«
8
²»¿É¼û
7
36
ÇàÀ¶É«
46
ÇàÀ¶É«
8
37
°×É«
47
°×É«
×¢Ò⣺
1¡¢´ËÃüÁîÐòÁÐÊǰë·â±ÕµÄ£¬¼´²»ÐèÒªÏñXMLÄÇÑùÓпªÊ¼/½áÊø±ê¼Ç£»
2¡¢<C1>¡¢<C2>¡¢<C3>µÄÏȺó˳ÐòÊÇ×ÔÓɵ쬲¢ÇÒÊÇ¿ÉÑ¡µÄ¡£ÀýÈ磺Èç¹û²»Ïë¸Ä±äµ±Ç°±³¾°É«£¬Ôò¿ÉÒÔºöÂÔ<C2>Ïî¡£
ת×Ô£ºhttp://hi.baidu.com/drmagic/blog/item/df24b0db00431a6 ......
LinuxÐźÅÁ¿ ¹²ÏíÄÚ´æºÍÏûÏ¢¶ÓÁÐ
1. ÐźÅÁ¿
ʹÓÃÐźÅÁ¿¿ÉÒÔʵÏÖ½ø³Ì¼äͬ²½¡£Ö÷Òªº¯Êý¶¨Ò壺
#include <sys/sem.h>
int semctl(int sem_id, int sem_num, int command, …);
int semget(key_t key, int num_sems, int sem_flags);
int semop(int sem_id, struct sembuf *sem_ops, size_t num_sem_ops);
semgetº¯Êý¸ù¾ÝÌṩµÄkeyÉú³ÉÐźÅÁ¿±êʶ·û£»
semctlº¯Êý³õʼ»¯»òÕßɾ³ýÐźÅÁ¿±êʶ·û£»
semopº¯Êý¸Ä±äÐźÅÁ¿´óС
2. ¹²ÏíÄÚ´æ
¹²ÏíÄÚ´æ»úÖÆÊ¹µÃÁ½¸ö²»Ïà¹Ø½ø³Ì¿ÉÒÔ¶ÁÈ¡ºÍÐÞ¸Äͬһ¶ÎÄÚ´æ´Ó¶øÊµÏÖÊý¾Ý¹²Ïí¡£Ö÷Òªº¯Êý¶¨Òå:
#include <sys/shm.h>
void *shmat(int shm_id, const void *shm_addr, int shmflg);
int shmctl(int shm_id, int cmd, struct shmid_ds *buf);
int shmdt(const void *shm_addr);
int shmget(key_t key, size_t size, int shmflag);
shmgetº¯Êý¸ù¾ÝkeyÉú³ÉÓÐЧµÄ¹²ÏíÄÚ´æ¶ÎÃû£¬¸ù¾Ý²ÎÊýsize²úÉú¹²ÏíµÄÄÚ´æÈÝÁ¿¡£
shmatº¯Êý½«´´½¨µÄ¹²ÏíÄÚ´æ¶ÎÁ¬½Óµ½Ò»¸ö½ø³ÌµÄÄÚ´æ¿Õ¼äÖУ¬ÕâÑù²Å¿ÉÒÔʹÓøöÎÄÚ´æ¡£
shmdtº¯Êý½«¹²ÏíÄÚ´æ´Óµ±Ç°ÄÚ´æÖзÖÀë¡£
shmctlº¯Êý¿ÉÒÔɾ³ý¹²ÏíÄÚ´æ¶Î¡£
3. ÏûÏ ......