©®linuxÉçÇø©® °®ÐÄÔ®Öú ©® LinuxÈÏÖ¤©®ÏµÁÐ½Ì³Ì ©® Òµ½ç¶¯Ì¬©® Õ¾ÎñÐÂÎÅ ©® ¹«Ë¾ÕÐÆ¸©® ½¨ÒéÁôÑÔ ©® ÍøÖ·´óÈ« ©®LPIרÌâ©® CISCOרÌâ
ÉèΪÊ×Ò³
¼ÓÈëÊÕ²Ø
¹ÜÀíÍŶÓ
JSP  
JAVA  
PERL  
 ÄúµÄλÖãºÊ×Ò³ > article > Linux¿ª·¢Çø > Èí¼þ¿ª·¢ >
À¸Ä¿µ¼À¸
×ÊÁÏËÑË÷
ÈÈÃÅÎÄÕÂ
¡¤Linux Ï C ÓïÑÔ±à³Ì
¡¤LinuxϵÄͨÓÃÏ̳߳ش´½¨
¡¤C++×Ö·û´®×ª»»Æª
¡¤linux C ½ø³Ì²Ù×÷ƪ
¡¤linuxÉϵÄC/C++±àÒëÆ÷gcc/egcs
¡¤linux C ÎļþȨÏÞ¿ØÖÆÆª
¡¤GCCʹÓÃÊÖ²á
¡¤linux C ½Ó¿Ú´¦ÀíÆª
¡¤ÔÚRedhat LinuxÉϰ²×° GCC ±àÒë
¡¤GCCʹÓÃÖ¸ÄÏ
¡¤CÓïÑÔÔËËã·û
¡¤LinuxÏÂC¿ª·¢»·¾³µÄ¹¹³ÉºÍ°²×°
¡¤fopen()º¯ÊýµÄ²ÎÊý˵Ã÷
¡¤GCCʹÓÃÊÖ²áÓë³£ÓÃÃüÁî
¡¤Scheme ÓïÑÔ½éÉÜ
×îÐÂÎÄÕÂ
¡¤ÔÚUbuntu Linux 8.04ÉϹ¹½¨GCC
¡¤Linux²Ù×÷ϵͳÏÂSocket±à³ÌµØÖ·
¡¤½«VC³ÌÐòÒÆÖ²µ½LinuxϵͳµÄ¼¸µã
¡¤LinuxÏÂmalloc/freeÓënew/dele
¡¤LinuxÏÂÓÃGTKºÍsocketʵÏÖ¼òµ¥
¡¤Linux²Ù×÷ϵͳÏÂÈÃTomcatÆô¶¯ÔÚ
¡¤Linux²Ù×÷ϵͳÖÐÈçºÎ±àÒëC³ÌÐò
¡¤¼¸ÖÖ³£±»ÈËÃǺöÂÔµÄLinuxϵͳÏÂ
¡¤Eclipse±à³Ì¹¤¾ß ÔÚUbuntuϵÄ
¡¤Linux²Ù×÷ϵͳϵÄÍøÂçµØÖ·×ª»»
¡¤ÀÏÊÖ¾­Ñé̸£ºLinuxÇý¶¯³ÌÐò¿ª·¢
¡¤Linux²Ù×÷ϵͳ¶àÏß³Ìͬ²½Mutex
¡¤Linux²Ù×÷ϵͳÏÂC³ÌÐòÓïÑÔ¼òÒ×
¡¤Linuxϵͳƽ̨ϹØÓÚGCC±àÒë¼°
¡¤½â¾öLinuxϵͳϹܵÀ±»½ÓÊÜ·½¹Ø
Google
 
linux C ½ø³Ì²Ù×÷ƪ
[ ×÷Õß:LinuxÁªÃËÊÕ¼¯  ¼ÓÈëʱ¼ä:2006-06-24 13:59:11  À´×Ô:LinuxÁªÃËÊÕ¼¯ ]
6L5LinuxÁªÃË
atexit£¨ÉèÖóÌÐòÕý³£½áÊøÇ°µ÷Óõĺ¯Êý£©
Ïà¹Øº¯Êý
_exit,exit,on_exit6L5LinuxÁªÃË
±íÍ·Îļþ
#include<stdlib.h>6L5LinuxÁªÃË
¶¨Ò庯Êý
int atexit (void (*function)(void));6L5LinuxÁªÃË
º¯Êý˵Ã÷
atexit()ÓÃÀ´ÉèÖÃÒ»¸ö³ÌÐòÕý³£½áÊøÇ°µ÷Óõĺ¯Êý¡£µ±³ÌÐòͨ¹ýµ÷ÓÃexit()»ò´ÓmainÖзµ»ØÊ±£¬²ÎÊýfunctionËùÖ¸¶¨µÄº¯Êý»áÏȱ»µ÷Óã¬È»ºó²ÅÕæÕýÓÉexit()½áÊø³ÌÐò¡£6L5LinuxÁªÃË
·µ»ØÖµ
Èç¹ûÖ´Ðгɹ¦Ôò·µ»Ø0£¬·ñÔò·µ»Ø-1£¬Ê§°ÜÔ­Òò´æÓÚerrnoÖС£6L5LinuxÁªÃË
·¶Àý
#include<stdlib.h>6L5LinuxÁªÃË
void my_exit(void)6L5LinuxÁªÃË
{6L5LinuxÁªÃË
printf(¡°before exit () !n¡±);6L5LinuxÁªÃË
}6L5LinuxÁªÃË
main()6L5LinuxÁªÃË
{6L5LinuxÁªÃË
atexit (my_exit);6L5LinuxÁªÃË
exit(0);6L5LinuxÁªÃË
}6L5LinuxÁªÃË
Ö´ÐÐ
before exit()!6L5LinuxÁªÃË
¡¡
6L5LinuxÁªÃË
6L5LinuxÁªÃË
6L5LinuxÁªÃË
execl£¨Ö´ÐÐÎļþ£©
Ïà¹Øº¯Êý
fork£¬execle£¬execlp£¬execv£¬execve£¬execvp6L5LinuxÁªÃË
±íÍ·Îļþ
#include<unistd.h>6L5LinuxÁªÃË
¶¨Ò庯Êý
int execl(const char * path,const char * arg,....);6L5LinuxÁªÃË
º¯Êý˵Ã÷
execl()ÓÃÀ´Ö´ÐвÎÊýpath×Ö·û´®Ëù´ú±íµÄÎļþ·¾¶£¬½ÓÏÂÀ´µÄ²ÎÊý´ú±íÖ´ÐиÃÎļþʱ´«µÝ¹ýÈ¥µÄargv(0)¡¢argv[1]¡­¡­£¬×îºóÒ»¸ö²ÎÊý±ØÐëÓÿÕÖ¸Õë(NULL)×÷½áÊø¡£6L5LinuxÁªÃË
·µ»ØÖµ
Èç¹ûÖ´Ðгɹ¦Ôòº¯Êý²»»á·µ»Ø£¬Ö´ÐÐʧ°ÜÔòÖ±½Ó·µ»Ø-1£¬Ê§°ÜÔ­Òò´æÓÚerrnoÖС£6L5LinuxÁªÃË
·¶Àý
#include<unistd.h>6L5LinuxÁªÃË
main()6L5LinuxÁªÃË
{6L5LinuxÁªÃË
execl(¡°/bin/ls¡±,¡±ls¡±,¡±-al¡±,¡±/etc/passwd¡±,(char * )0);6L5LinuxÁªÃË
}6L5LinuxÁªÃË
Ö´ÐÐ
/*Ö´ÐÐ/bin/ls -al /etc/passwd */6L5LinuxÁªÃË
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd6L5LinuxÁªÃË
¡¡
6L5LinuxÁªÃË
6L5LinuxÁªÃË
6L5LinuxÁªÃË
execlp£¨´ÓPATH »·¾³±äÁ¿ÖвéÕÒÎļþ²¢Ö´ÐУ©
Ïà¹Øº¯Êý
fork£¬execl£¬execle£¬execv£¬execve£¬execvp6L5LinuxÁªÃË
±íÍ·Îļþ
#include<unistd.h>6L5LinuxÁªÃË
¶¨Ò庯Êý
int execlp(const char * file,const char * arg,¡­¡­)£»6L5LinuxÁªÃË
º¯Êý˵Ã÷
execlp()»á´ÓPATH »·¾³±äÁ¿ËùÖ¸µÄĿ¼ÖвéÕÒ·ûºÏ²ÎÊýfileµÄÎļþÃû£¬ÕÒµ½ºó±ãÖ´ÐиÃÎļþ£¬È»ºó½«µÚ¶þ¸öÒÔºóµÄ²ÎÊýµ±×ö¸ÃÎļþµÄargv[0]¡¢argv[1]¡­¡­£¬×îºóÒ»¸ö²ÎÊý±ØÐëÓÿÕÖ¸Õë(NULL)×÷½áÊø¡£6L5LinuxÁªÃË
·µ»ØÖµ
Èç¹ûÖ´Ðгɹ¦Ôòº¯Êý²»»á·µ»Ø£¬Ö´ÐÐʧ°ÜÔòÖ±½Ó·µ»Ø-1£¬Ê§°ÜÔ­Òò´æÓÚerrno ÖС£6L5LinuxÁªÃË
´íÎó´úÂë
²Î¿¼execve()¡£6L5LinuxÁªÃË
·¶Àý
/* Ö´ÐÐls -al /etc/passwd execlp()»áÒÀPATH ±äÁ¿ÖеÄ/binÕÒµ½/bin/ls */6L5LinuxÁªÃË
#include<unistd.h>6L5LinuxÁªÃË
main()6L5LinuxÁªÃË
{6L5LinuxÁªÃË
execlp(¡°ls¡±,¡±ls¡±,¡±-al¡±,¡±/etc/passwd¡±,(char *)0);6L5LinuxÁªÃË
}6L5LinuxÁªÃË
Ö´ÐÐ
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd6L5LinuxÁªÃË
¡¡
6L5LinuxÁªÃË
6L5LinuxÁªÃË
6L5LinuxÁªÃË
execv£¨Ö´ÐÐÎļþ£©
Ïà¹Øº¯Êý
fork£¬execl£¬execle£¬execlp£¬execve£¬execvp6L5LinuxÁªÃË
±íÍ·Îļþ
#include<unistd.h>6L5LinuxÁªÃË
¶¨Ò庯Êý
int execv (const char * path, char * const argv[ ]);6L5LinuxÁªÃË
º¯Êý˵Ã÷
execv()ÓÃÀ´Ö´ÐвÎÊýpath×Ö·û´®Ëù´ú±íµÄÎļþ·¾¶£¬Óëexecl()²»Í¬µÄµØ·½ÔÚÓÚexecve()Ö»ÐèÁ½¸ö²ÎÊý£¬µÚ¶þ¸ö²ÎÊýÀûÓÃÊý×éÖ¸ÕëÀ´´«µÝ¸øÖ´ÐÐÎļþ¡£6L5LinuxÁªÃË
·µ»ØÖµ
Èç¹ûÖ´Ðгɹ¦Ôòº¯Êý²»»á·µ»Ø£¬Ö´ÐÐʧ°ÜÔòÖ±½Ó·µ»Ø-1£¬Ê§°ÜÔ­Òò´æÓÚerrno ÖС£6L5LinuxÁªÃË
´íÎó´úÂë
Çë²Î¿¼execve£¨£©¡£6L5LinuxÁªÃË
·¶Àý
/* Ö´ÐÐ/bin/ls -al /etc/passwd */6L5LinuxÁªÃË
#include<unistd.h>6L5LinuxÁªÃË
main()6L5LinuxÁªÃË
{6L5LinuxÁªÃË
char * argv[ ]={¡°ls¡±,¡±-al¡±,¡±/etc/passwd¡±,(char*) }};6L5LinuxÁªÃË
execv(¡°/bin/ls¡±,argv);6L5LinuxÁªÃË
}6L5LinuxÁªÃË
Ö´ÐÐ
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd6L5LinuxÁªÃË
¡¡
6L5LinuxÁªÃË
6L5LinuxÁªÃË
6L5LinuxÁªÃË
execve£¨Ö´ÐÐÎļþ£©
Ïà¹Øº¯Êý
fork£¬execl£¬execle£¬execlp£¬execv£¬execvp6L5LinuxÁªÃË
±íÍ·Îļþ
#include<unistd.h>6L5LinuxÁªÃË
¶¨Ò庯Êý
int execve(const char * filename,char * const argv[ ],char * const envp[ ]);6L5LinuxÁªÃË
º¯Êý˵Ã÷
execve()ÓÃÀ´Ö´ÐвÎÊýfilename×Ö·û´®Ëù´ú±íµÄÎļþ·¾¶£¬µÚ¶þ¸ö²ÎÊýϵÀûÓÃÊý×éÖ¸ÕëÀ´´«µÝ¸øÖ´ÐÐÎļþ£¬×îºóÒ»¸ö²ÎÊýÔòΪ´«µÝ¸øÖ´ÐÐÎļþµÄл·¾³±äÁ¿Êý×é¡£6L5LinuxÁªÃË
·µ»ØÖµ
Èç¹ûÖ´Ðгɹ¦Ôòº¯Êý²»»á·µ»Ø£¬Ö´ÐÐʧ°ÜÔòÖ±½Ó·µ»Ø-1£¬Ê§°ÜÔ­Òò´æÓÚerrno ÖС£6L5LinuxÁªÃË
´íÎó´úÂë
EACCES6L5LinuxÁªÃË
1. ÓûÖ´ÐеÄÎļþ²»¾ßÓÐÓû§¿ÉÖ´ÐеÄȨÏÞ¡£6L5LinuxÁªÃË
2. ÓûÖ´ÐеÄÎļþËùÊôµÄÎļþϵͳÊÇÒÔnoexec ·½Ê½¹ÒÉÏ¡£6L5LinuxÁªÃË
3.ÓûÖ´ÐеÄÎļþ»òscript·­ÒëÆ÷·ÇÒ»°ãÎļþ¡£6L5LinuxÁªÃË
EPERM6L5LinuxÁªÃË
1.½ø³Ì´¦ÓÚ±»×·×Ùģʽ£¬Ö´ÐÐÕß²¢²»¾ßÓÐrootȨÏÞ£¬ÓûÖ´ÐеÄÎļþ¾ßÓÐSUID »òSGID λ¡£6L5LinuxÁªÃË
2.ÓûÖ´ÐеÄÎļþËùÊôµÄÎļþϵͳÊÇÒÔnosuid·½Ê½¹ÒÉÏ£¬ÓûÖ´ÐеÄÎļþ¾ßÓÐSUID »òSGID λԪ£¬µ«Ö´ÐÐÕß²¢²»¾ßÓÐrootȨÏÞ¡ LinuxÁªÃËÊÕ¼¯ÕûÀí ,תÌùÇë±êÃ÷ԭʼÁ´½Ó,ÈçÓÐÈκÎÒÉÎÊ»¶Ó­À´±¾Õ¾LinuxÂÛ̳ÌÖÂÛ
·ÖÒ³£º[1] 2 3 4 5 6 7 8
¡¾ÆÀÂÛ¡¿¡¾¼ÓÈëÊղؼС¿¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿¡¾¹Ø±Õ¡¿
¡ù Ïà¹ØÁ´½Ó
 ¡¤linux c ÖÕ¶Ë¿ØÖÆÆª  (2006-06-24 14:21:40)
 ¡¤linux c »·¾³¿ØÖÆÆª  (2006-06-24 14:18:30)
 ¡¤linux C ½Ó¿Ú´¦ÀíÆª  (2006-06-24 14:13:30)
 ¡¤linux C ÐźŴ¦ÀíÆª  (2006-06-24 14:07:54)
 ¡¤linux C ÎļþȨÏÞ¿ØÖÆÆª  (2006-06-24 14:02:38)
 ¡¤linux CÊý¾Ý½á¹¹¼°Ë㷨ƪ  (2006-06-24 13:56:40)
 ¡¤linux CÓû§×éÆª  (2006-06-24 13:47:55)
 ¡¤linux C ³£ÓÃÊýѧº¯Êýƪ  (2006-06-24 13:45:38)
 ¡¤linux C ÈÕÆÚʱ¼äƪ  (2006-06-24 13:44:15)
 ¡¤linux C ÄÚ´æ¿ØÖÆÆª  (2006-06-24 13:42:19)