| ÂÛ̳ע²á| ¼ÓÈëÊÕ²Ø | ÉèΪÊ×Ò³| RSS
Google
Äúµ±Ç°µÄλÖãºÊ×Ò³ > LinuxƵµÀ > Linux¿ª·¢Çø > Èí¼þ¿ª·¢

linux C ½ø³Ì²Ù×÷ƪ

ʱ¼ä£º2006-06-24 13:59:11  À´Ô´£ºLinuxÁªÃËÊÕ¼¯  ×÷ÕߣºLinuxÁªÃËÊÕ¼¯
£VcgLinuxÁªÃË
E2BIG ²ÎÊýÊý×é¹ý´óVcgLinuxÁªÃË
ENOEXEC ÎÞ·¨ÅжÏÓûÖ´ÐÐÎļþµÄÖ´ÐÐÎļþ¸ñʽ£¬ÓпÉÄÜÊǸñʽ´íÎó»òÎÞ·¨ÔÚ´ËÆ½Ì¨Ö´ÐС£VcgLinuxÁªÃË
EFAULT ²ÎÊýfilenameËùÖ¸µÄ×Ö·û´®µØÖ·³¬³ö¿É´æÈ¡¿Õ¼ä·¶Î§¡£VcgLinuxÁªÃË
ENAMETOOLONG ²ÎÊýfilenameËùÖ¸µÄ×Ö·û´®Ì«³¤¡£VcgLinuxÁªÃË
ENOENT ²ÎÊýfilename×Ö·û´®ËùÖ¸¶¨µÄÎļþ²»´æÔÚ¡£VcgLinuxÁªÃË
ENOMEM ºËÐÄÄÚ´æ²»×ãVcgLinuxÁªÃË
ENOTDIR ²ÎÊýfilename×Ö·û´®Ëù°üº¬µÄĿ¼·¾¶²¢·ÇÓÐЧĿ¼VcgLinuxÁªÃË
EACCES ²ÎÊýfilename×Ö·û´®Ëù°üº¬µÄĿ¼·¾¶ÎÞ·¨´æÈ¡£¬È¨ÏÞ²»×ãVcgLinuxÁªÃË
ELOOP ¹ý¶àµÄ·ûºÅÁ¬½ÓVcgLinuxÁªÃË
ETXTBUSY ÓûÖ´ÐеÄÎļþÒѱ»ÆäËû½ø³Ì´ò¿ª¶øÇÒÕý°ÑÊý¾ÝдÈë¸ÃÎļþÖÐVcgLinuxÁªÃË
EIO I/O ´æÈ¡´íÎóVcgLinuxÁªÃË
ENFILE ÒѴﵽϵͳËùÔÊÐíµÄ´ò¿ªÎļþ×ÜÊý¡£VcgLinuxÁªÃË
EMFILE ÒѴﵽϵͳËùÔÊÐíµ¥Ò»½ø³ÌËùÄÜ´ò¿ªµÄÎļþ×ÜÊý¡£VcgLinuxÁªÃË
EINVAL ÓûÖ´ÐÐÎļþµÄELFÖ´Ðиñʽ²»Ö»Ò»¸öPT_INTERP½ÚÇøVcgLinuxÁªÃË
EISDIR ELF·­ÒëÆ÷ΪһĿ¼VcgLinuxÁªÃË
ELIBBAD ELF·­ÒëÆ÷ÓÐÎÊÌâ¡£VcgLinuxÁªÃË
·¶Àý
#include<unistd.h>VcgLinuxÁªÃË
main()VcgLinuxÁªÃË
{VcgLinuxÁªÃË
char * argv[ ]={¡°ls¡±,¡±-al¡±,¡±/etc/passwd¡±,(char *)0};VcgLinuxÁªÃË
char * envp[ ]={¡°PATH=/bin¡±,0}VcgLinuxÁªÃË
execve(¡°/bin/ls¡±,argv,envp);VcgLinuxÁªÃË
}VcgLinuxÁªÃË
Ö´ÐÐ
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwdVcgLinuxÁªÃË
¡¡
VcgLinuxÁªÃË
VcgLinuxÁªÃË
VcgLinuxÁªÃË
execvp£¨Ö´ÐÐÎļþ£©
Ïà¹Øº¯Êý
fork£¬execl£¬execle£¬execlp£¬execv£¬execveVcgLinuxÁªÃË
±íÍ·Îļþ
#include<unistd.h>VcgLinuxÁªÃË
¶¨Ò庯Êý
int execvp(const char *file ,char * const argv []);VcgLinuxÁªÃË
º¯Êý˵Ã÷
execvp()»á´ÓPATH »·¾³±äÁ¿ËùÖ¸µÄĿ¼ÖвéÕÒ·ûºÏ²ÎÊýfile µÄÎļþÃû£¬ÕÒµ½ºó±ãÖ´ÐиÃÎļþ£¬È»ºó½«µÚ¶þ¸ö²ÎÊýargv´«¸ø¸ÃÓûÖ´ÐеÄÎļþ¡£VcgLinuxÁªÃË
·µ»ØÖµ
Èç¹ûÖ´Ðгɹ¦Ôòº¯Êý²»»á·µ»Ø£¬Ö´ÐÐʧ°ÜÔòÖ±½Ó·µ»Ø-1£¬Ê§°ÜÔ­Òò´æÓÚerrnoÖС£VcgLinuxÁªÃË
´íÎó´úÂë
Çë²Î¿¼execve£¨£©¡£VcgLinuxÁªÃË
·¶Àý
/*ÇëÓëexeclp£¨£©·¶Àý¶ÔÕÕ*/VcgLinuxÁªÃË
#include<unistd.h>VcgLinuxÁªÃË
main()VcgLinuxÁªÃË
{VcgLinuxÁªÃË
char * argv[ ] ={ ¡°ls¡±,¡±-al¡±,¡±/etc/passwd¡±,0};VcgLinuxÁªÃË
execvp(¡°ls¡±,argv);VcgLinuxÁªÃË
}VcgLinuxÁªÃË
Ö´ÐÐ
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwdVcgLinuxÁªÃË
¡¡
VcgLinuxÁªÃË
VcgLinuxÁªÃË
VcgLinuxÁªÃË
exit£¨Õý³£½áÊø½ø³Ì£©
Ïà¹Øº¯Êý
_exit£¬atexit£¬on_exitVcgLinuxÁªÃË
±íÍ·Îļþ
#include<stdlib.h>VcgLinuxÁªÃË
¶¨Ò庯Êý
void exit(int status);VcgLinuxÁªÃË
º¯Êý˵Ã÷
exit()ÓÃÀ´Õý³£ÖÕ½áĿǰ½ø³ÌµÄÖ´ÐУ¬²¢°Ñ²ÎÊýstatus·µ»Ø¸ø¸¸½ø³Ì£¬¶ø½ø³ÌËùÓеĻº³åÇøÊý¾Ý»á×Ô¶¯Ð´»Ø²¢¹Ø±Õδ¹Ø±ÕµÄÎļþ¡£VcgLinuxÁªÃË
·µ»ØÖµ
VcgLinuxÁªÃË
·¶Àý
²Î¿¼wait£¨£©VcgLinuxÁªÃË
¡¡
VcgLinuxÁªÃË
VcgLinuxÁªÃË
_
VcgLinuxÁªÃË
exit£¨½áÊø½ø³ÌÖ´ÐУ©
Ïà¹Øº¯Êý
exit£¬wait£¬abortVcgLinuxÁªÃË
±íÍ·Îļþ
#include<unistd.h>VcgLinuxÁªÃË
¶¨Ò庯Êý
void _exit(int status);VcgLinuxÁªÃË
º¯Êý˵Ã÷
_exit()ÓÃÀ´Á¢¿Ì½áÊøÄ¿Ç°½ø³ÌµÄÖ´ÐУ¬²¢°Ñ²ÎÊýstatus·µ»Ø¸ø¸¸½ø³Ì£¬²¢¹Ø±Õδ¹Ø±ÕµÄÎļþ¡£´Ëº¯Êýµ÷Óú󲻻᷵»Ø£¬²¢ÇһᴫµÝSIGCHLDÐźŸø¸¸½ø³Ì£¬¸¸½ø³Ì¿ÉÒÔÓÉwaitº¯ÊýÈ¡µÃ×Ó½ø³Ì½áÊø×´Ì¬¡£VcgLinuxÁªÃË
·µ»ØÖµ
VcgLinuxÁªÃË
¸½¼Ó˵Ã÷
_exit£¨£©²»»á´¦Àí±ê×¼I/O »º³åÇø£¬ÈçÒª¸üлº³åÇøÇëʹÓÃexit£¨£©¡£VcgLinuxÁªÃË
¡¡
VcgLinuxÁªÃË
VcgLinuxÁªÃË
VcgLinuxÁªÃË
vfork£¨½¨Á¢Ò»¸öеĽø³Ì£©
Ïà¹Øº¯Êý
wait£¬execveVcgLinuxÁªÃË
±íÍ·Îļþ
#include<unistd.h>VcgLinuxÁªÃË
¶¨Ò庯Êý
pid_t vfork(void);VcgLinuxÁªÃË
º¯Êý˵Ã÷
vfork()»á²úÉúÒ»¸öеÄ×Ó½ø³Ì£¬Æä×Ó½ø³Ì»á¸´ÖƸ¸½ø³ÌµÄÊý¾ÝÓë¶ÑÕ»¿Õ¼ä£¬²¢¼Ì³Ð¸¸½ø³ÌµÄÓû§´úÂ룬×é´úÂ룬»·¾³±äÁ¿¡¢ÒÑ´ò¿ªµÄÎļþ´úÂë¡¢¹¤×÷Ŀ¼ºÍ×ÊÔ´ÏÞÖÆµÈ¡£Linux ʹÓÃcopy-on-write(COW)¼¼Êõ£¬Ö»Óе±ÆäÖÐÒ»½ø³ÌÊÔͼÐÞ¸ÄÓû¸´ÖƵĿռäʱ²Å»á×öÕæÕýµÄ¸´Öƶ¯×÷£¬ÓÉÓÚÕâЩ¼Ì³ÐµÄÐÅÏ¢ÊǸ´ÖƶøÀ´£¬²¢·ÇÖ¸ÏàͬµÄÄÚ´æ¿Õ¼ä£¬Òò´Ë×Ó½ø³Ì¶ÔÕâЩ±äÁ¿µÄÐ޸ĺ͸¸½ø³Ì²¢²»»áͬ²½¡£´ËÍ⣬×Ó½ø³Ì²»»á¼Ì³Ð¸¸½ø³ÌµÄÎļþËø¶¨ºÍδ´¦ÀíµÄÐźš£×¢Ò⣬Linux²»±£Ö¤×Ó½ø³Ì»á±È¸¸½ø³ÌÏÈÖ´ÐлòÍíÖ´ÐУ¬Òò´Ë±àд³ÌÐòʱҪÁôÒâVcgLinuxÁªÃË
ËÀËø»ò¾ºÕùÌõ¼þµÄ·¢Éú¡£
VcgLinuxÁªÃË
·µ»ØÖµ
Èç¹ûvfork()³É¹¦ÔòÔÚ¸¸½ø³Ì»á·µ»ØÐ½¨Á¢µÄ×Ó½ø³Ì´úÂë(PID)£¬¶øÔÚн¨Á¢µÄ×Ó½ø³ÌÖÐÔò·µ»Ø0¡£Èç¹ûvfork ʧ°ÜÔòÖ±½Ó·µ»Ø-1£¬Ê§°ÜÔ­Òò´æÓÚerrnoÖС£VcgLinuxÁªÃË
´íÎó´úÂë
EAGAIN ÄÚ´æ²»×ã¡£ENOMEM ÄÚ´æ²»×㣬ÎÞ·¨ÅäÖúËÐÄËùÐèµÄÊý¾Ý½á¹¹¿Õ¼ä¡£VcgLinuxÁªÃË
·¶Àý
#include<unistd.h>VcgLinuxÁªÃË
main()VcgLinuxÁªÃË
{VcgLinuxÁªÃË
if(vfork() = =0)VcgLinuxÁªÃË
{VcgLinuxÁªÃË
printf(¡°This is the child processn¡±);VcgLinuxÁªÃË
}else{VcgLinuxÁªÃË
printf(¡°This is the parent processn¡±);VcgLinuxÁªÃË
}VcgLinuxÁªÃË
}VcgLinuxÁªÃË
Ö´ÐÐ
this is the parent processVcgLinuxÁªÃË
this is the child processVcgLinuxÁªÃË
¡¡
VcgLinuxÁªÃË
VcgLinuxÁªÃË
VcgLinuxÁªÃË
getpgid£¨È¡µÃ½ø³Ì×éʶ±ðÂ룩
Ïà¹Øº¯Êý
setpgid£¬setpgrp£
 2/8   |‹ ‹‹ 1 2 3 4 5 6 ›› ›|

À´¶¥Ò»ÏÂ
½ü»ØÊ×Ò³
·µ»ØÊ×Ò³
·¢±íÆÀÂÛ ¹²ÓÐÌõÆÀÂÛ
Óû§Ãû: ÃÜÂë:
ÑéÖ¤Âë: ÄäÃû·¢±í
Ïà¹ØÎÄÕÂ
À¸Ä¿¸üÐÂ
À¸Ä¿ÈÈÃÅ