ΪÁË·½±ã²é¿´LinuxϵͳϵĴíÎóÂëÒÔ¼°ËüµÄº¬Ò壬дÁËÒ»¸ö³ÌÐòÀ´´òÓ¡ÕâЩÐÅÏ¢¡£
listerrno.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#define MAX_ERRNO 256
int main(int argc, char* argv[])
{
int n = 0;
printf("----------------------- Errno --------------------\n");
for(n=0; n < MAX_ERRNO; n++)
{
printf("#%d, %s\n", n, strerror(n));
}
printf("--------------------------------------------------\n");
return 0;
}
Makefile£º
E_TARGET = listerrno
all: $(E_TARGET)
listerrno:
gcc -o $@ listerrno.c
clean:
rm -rf $(E_TARGET) *.o
ÔÚRedhat Enterprise Linux 5 ÉϵĴòÓ¡½á¹û£º
----------------------- Errno --------------------
#0, Success
#1, Operation not permitted
#2, No such file or directory
#3, No such process
#4, Interrupted system call
#5, Input/output error
#6, No such device or address
#7, Argument list too long
#8, Exec format error
#9, Bad file descriptor
#10, No child processes
#11 ......
Ò»¡¢LINUXµÄ½ø³Ì״̬ ½©ËÀ̬£ºµ±¸¸½ø³Ì»¹Ã»ÓнáÊøÇ°£¬×Ó½ø³Ì¾ÍÒѾÏȽáÊøÁË£¬Õâʱ×Ó½ø³ÌµÄ×ÊԴûÓÐÈËÀ´»ØÊÕ¡£Í¨³£¸¸½ø³ÌÐèÒªÓÃwaitÀ´µÈ´ý×Ó½ø³ÌµÄ½áÊø¡£
½ø³ÌµÄģʽ£ºÓû§Ä£Ê½(Ö´ÐÐÓû§³ÌÐò)£¬ÄÚºËģʽ(Ö´ÐвÙ×÷ϵͳ´úÂë)
½ø³ÌµÄÀàÐÍ£ºÏµÍ³½ø³Ì£¬Óû§½ø³Ì ¶þ¡¢½ø³Ì¹ÜÀí ¢Ùforkº¯Êý
¹¦ÄÜ£º´´½¨Ò»¸öȫеĽø³Ì¡£
Í·Îļþ£º
#include
#include
º¯ÊýÔÐÍ£ºpid_t wait (int * status);
˵Ã÷£ºÕâ¸öϵͳµ÷ÓöԵ±Ç°½ø³Ì½øÐи´ÖÆ£¬ÔÚ½ø³Ì±íÀï´´½¨³öÒ»¸öÏîÄ¿£¬Ð½ø³ÌÓëÔ½ø³Ì¼¸ºõÒ»Ñù£¬Ö´ÐеÄÊÇÏàͬµÄ´úÂ룬ֻÊÇнø³ÌÓÐ×Ô¼ºµÄÊý¾Ý¿Õ¼ä¡¢»·¾³ºÍÎļþÃèÊö·û¡£
·µ»ØÖµ£º¸¸½ø³Ìµ÷Ó÷µ»ØÐÂ×Ó½ø³ÌID£¬Ð½ø³Ì¼ÌÐøÖ´ÐУ»ÔÚ×Ó½ø³Ì·µ»Ø0¡£
¾ÙÀý£º
pid_t new_pid;
new_pid = fork();
switch(new_pid)
{
case -1:break;
case 0:break
default:break;
} ¢Úwaitº¯Êý
º¯Êý´¦ÀíµÄ»ù±¾¹ý³Ì£º
—Èç¹û¸¸½ø³ÌûÓÐ×Ó½ø³Ì£¬Ôò³ö´í·µ»Ø¡£
—Èç¹û·¢ÏÖÓÐÒ»¸öÖÕÖ¹µÄ×Ó½ø³Ì£¬ÔòÈ¡³ö×Ó½ø³ÌµÄ½ø³ÌºÅ£¬°Ñ×Ó½ø³ÌµÄCPUʹÓÃʱ¼äµÈ¼Óµ½ ......
¢Ùmallocº¯Êý
ÔÐÍ£ºextern void *malloc(unsigned int num_bytes);
Í·Îļþ£º#include <alloc.h>
¹¦ÄÜ£º·ÖÅ䳤¶ÈΪnum_bytes×Ö½ÚµÄÄÚ´æ¿é¡£
˵Ã÷£ºÈç¹û·ÖÅä³É¹¦Ôò·µ»ØÖ¸Ïò±»·ÖÅäÄÚ´æµÄÖ¸Õ룬·ñÔò·µ»Ø¿ÕÖ¸ÕëNULL¡£µ±ÄÚ´æ²»ÔÙʹÓÃʱ£¬Ó¦Ê¹ÓÃfree()º¯Êý½«ÄÚ´æ¿éÊÍ·Å¡£
¾ÙÀý£º
#include <syslib.h>
#include <alloc.h>
main()
{
char *p;
clrscr(); // clear screen
p=(char *)malloc(100);
if(p)
printf("Memory Allocated at: %x",p);
else
printf("Not Enough Memory!\n");
free(p);
return 0;
} ¢Ú callocº¯Êý
ÔÐÍ£ºextern void *calloc(int num_elems, int elem_size);
Í·Îļþ£º#include <alloc.h>
¹¦ÄÜ£ºÎª¾ßÓÐnum_elems¸ö³¤¶ÈΪelem_sizeÔªËØµÄÊý×é ......
Linux ¾ÍÊÇͨ³£Ëù˵µÄµ¥Äںˣ¨monolithic kernel£©£¬¼´²Ù×÷ϵͳµÄ´ó²¿·Ö¹¦Äܶ¼±»³ÆÎªÄںˣ¬²¢ÔÚÌØÈ¨Ä£Ê½ÏÂÔËÐС£ËüÓë΢ÐÍÄÚºË ²»Í¬£¬ºóÕßÖ»°Ñ»ù±¾µÄ¹¦ÄÜ£¨½ø³Ì¼äͨÐÅ [IPC]¡¢µ÷¶È¡¢»ù±¾µÄÊäÈë/Êä³ö [I/O] ºÍÄÚ´æ¹ÜÀí£©µ±×÷ÄÚºËÔËÐУ¬¶ø°ÑÆäËû¹¦ÄÜ£¨Çý¶¯³ÌÐò¡¢ÍøÂç¶ÑÕ»ºÍÎļþϵͳ£©ÅųýÔÚÌØÈ¨¿Õ¼äÖ®Íâ¡£Òò´Ë£¬Äú¿ÉÄÜÈÏΪ Linux ÊÇÒ»¸öÍêÈ«¾²Ì¬µÄÄںˣ¬µ«ÊÂʵǡǡÏà·´¡£Í¨¹ý Linux ÄÚºËÄ£¿é£¨LKM£©¿ÉÒÔÔÚÔËÐÐʱ¶¯Ì¬µØ¸ü¸Ä Linux¡£
¿É¶¯Ì¬¸ü¸Ä ÊÇÖ¸¿ÉÒÔ½«ÐµĹ¦ÄܼÓÔØµ½Äںˡ¢´ÓÄÚºËÈ¥³ýij¸ö¹¦ÄÜ£¬ÉõÖÁÌí¼ÓʹÓÃÆäËû LKM µÄРLKM¡£LKM µÄÓŵãÊÇ¿ÉÒÔ×îС»¯Äں˵ÄÄÚ´æÕ¼Óã¬Ö»¼ÓÔØÐèÒªµÄÔªËØ£¨ÕâÊÇǶÈëʽϵͳµÄÖØÒªÌØÐÔ£©¡£
Linux ²»ÊÇ¿ÉÒÔ½øÐж¯Ì¬¸ü¸ÄµÄΩһ£¨Ò²²»ÊǵÚÒ»¸ö£©µ¥Äںˡ£Berkeley Software Distribution£¨BSD£©µÄ±äÌå¡¢Sun Solaris¡¢¸üÀϵÄÄںˣ¨±ÈÈç OpenVMS£©£¬ÒÔ¼°ÆäËûÁ÷ÐеIJÙ×÷ϵͳ£¨±ÈÈç Microsoft® Windows® ºÍ Apple Mac OS X£©¶¼Ö§³Ö¿É¼ÓÔØÄ£¿é¡£
LKM£¬ËüÊÇÒÔÒ»¸öʲôÑùµÄ¶«Î÷ÄØ£¿ÎÒÃÇÖªµÀ£¬Ëû±àÒëÖ®ºó»áÊÇÒ»¸ökoºó׺ÃûµÄ¶«Î÷£¬µ«ÊÇÀïÃæÊÇÒ»¸öʲôÑùµÄ¡£ÎÒÃÇ¿´£¬Ò»°ãµÄÄ£¿éµÄÄ£°å¡£
/*
* hello.c Hello, World! As a K ......
ACE¿âÖÐרÃŶÔÏß³Ìͬ²½ÌṩÁËÁ½¸öÀ࣬һ¸öÊÇACE_Thread_MutexÁíÒ»¸öÊÇACE_REcursive_Thread_Mutex¡£ ÔÚÎÒ¿´ À´£¬ÔÚlinuxϽøÐÐÏß³Ìͬ²½£¬²»ÒªÊ¹ÓÃACE_Thread_Mutex£¬ÓÃACE_REcursive_Thread_Mutex¾Í¿ÉÒÔÁË¡£ÔÒòºÜ ¼òµ¥£¬ÒòΪACE_Thread_Mutex²»Ö§³ÖÏß³ÌÖØÈë¡£Ò»µ©ÖØÈë(ͬһ¸öÏ̵߳÷ÓÃÁ½´ÎACE_Thread_Mutex::acquire£©Õâ¸öÏß ³Ì¾ÍËÀËøÁË¡£
Òª¸ãÇå³þÕâ¸öÎÊÌ⣬ÎÒÃÇÐèÒª¸ãÇå³þ²Ù×÷ϵͳÊÇÈçºÎʵÏÖÏß³ÌËøµÄ¡£WindowsϺܼòµ¥£¬ÓÃCRITICAL_SECTIONʵÏÖ¡£ CRITICAL_SECTIONÖ§³ÖÖØÈ룬ËùÒÔWindowsϵÄÏß³Ìͬ²½ÓÃACE_Thread_Mutex»òÕß ACE_REcursive_Thread_Mutex¶¼ÊÇÒ»ÑùµÄ¡£¶ølinuxϲ»Í¬£¬ÊÇÓÃposix thread ¿âʵÏֵġ£pthread µÄmutex·ÖΪÈýÖÖÀàÐÍ£¬fast,recursive,error checking,µ±Ï̵߳÷ÓÃpthread_mutex_lockʱ£¬Èç¹ûÊÇÏß³ÌÖØÈëÕâ°ÑËø£¬Ôò£º
“fast”Ëø ¹ÒÆðµ±Ç°Ïß³Ì.
“resursive”Ëø ³É¹¦²¢Á¢¿Ì·µ»Øµ±Ç°±»Ëø¶¨µÄ´ÎÊý
“error checking” ËøÁ¢¿Ì·µ»ØEDEADLK
ÏÔÈ»ACE_Thread_MutexÊÇÓÃfast·½Ê½ÊµÏֵġ£
ÎÒÓжà¸öƽ̨ (Window,AIX £¬Solaris,hp-ux,Linux) ......
1¡¢½«Îļþcheckoutµ½±¾µØÄ¿Â¼
svn checkout path£¨pathÊÇ·þÎñÆ÷ÉϵÄĿ¼£©
ÀýÈ磺svn checkout svn://192.168.1.1/pro/domain
¼òд£ºsvn co
2¡¢Íù°æ±¾¿âÖÐÌí¼ÓеÄÎļþ
svn add file
ÀýÈ磺svn add test.php(Ìí¼Ótest.php)
svn add *.php(Ìí¼Óµ±Ç°Ä¿Â¼ÏÂËùÓеÄphpÎļþ)
3¡¢½«¸Ä¶¯µÄÎļþÌá½»µ½°æ±¾¿â
svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(Èç¹ûÑ¡ÔñÁ˱£³ÖËø£¬¾ÍʹÓÖno-unlock¿ª¹Ø)
ÀýÈ磺svn commit -m “add test file for my test“ test.php
¼òд£ºsvn ci
4¡¢¼ÓËø/½âËø
svn lock -m “LockMessage“ [--force] PATH
ÀýÈ磺svn lock -m “lock test file“ test.php
svn unlock PATH
5¡¢¸üе½Ä³¸ö°æ±¾
svn update -r m path
ÀýÈ磺
svn updateÈç¹ûºóÃæÃ»ÓÐĿ¼£¬Ä¬ÈϽ«µ±Ç°Ä¿Â¼ÒÔ¼°×ÓĿ¼ÏµÄËùÓÐÎļþ¶¼¸üе½×îа汾¡£
svn update -r 200 test.php(½«°æ±¾¿âÖеÄÎļþtest.php»¹Ôµ½°æ±¾200)
svn update test.php(¸üУ¬ÓÚ°æ±¾¿âÍ ......