?? linux 常用c函數(shù)(中文版)-進程操作.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0051)http://net.pku.edu.cn/~yhf/linux_c/function/11.html -->
<HTML><HEAD><TITLE>Untitled Document</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2462.0" name=GENERATOR></HEAD>
<BODY>
<TABLE width="100%">
<TBODY>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc176></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>atexit(設置程序正常結束前調(diào)用的函數(shù)) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>_exit,exit,on_exit<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#include<stdlib.h><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>int atexit (void
(*function)(void));<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>atexit()用來設置一個程序正常結束前調(diào)用的函數(shù)。當程序通過調(diào)用exit()或從main中返回時,參數(shù)function所指定的函數(shù)會先被調(diào)用,然后才真正由exit()結束程序。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>如果執(zhí)行成功則返回0,否則返回-1,失敗原因存于errno中。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#include<stdlib.h><BR>void
my_exit(void)<BR>{<BR>printf(“before exit ()
!\n”);<BR>}<BR>main()<BR>{<BR>atexit
(my_exit);<BR>exit(0);<BR>}<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>執(zhí)行 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>before exit()!<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc177></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>execl(執(zhí)行文件) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>fork,execle,execlp,execv,execve,execvp<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#include<unistd.h><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>int execl(const char * path,const char *
arg,....);<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>execl()用來執(zhí)行參數(shù)path字符串所代表的文件路徑,接下來的參數(shù)代表執(zhí)行該文件時傳遞過去的argv(0)、argv[1]……,最后一個參數(shù)必須用空指針(NULL)作結束。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>如果執(zhí)行成功則函數(shù)不會返回,執(zhí)行失敗則直接返回-1,失敗原因存于errno中。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>#include<unistd.h><BR>main()<BR>{<BR>execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,(char
* )0);<BR>}<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>執(zhí)行 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>/*執(zhí)行/bin/ls -al /etc/passwd */<BR>-rw-r--r-- 1
root root 705 Sep 3 13 :52 /etc/passwd<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc178></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>execlp(從PATH 環(huán)境變量中查找文件并執(zhí)行) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>fork,execl,execle,execv,execve,execvp<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#include<unistd.h><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>int execlp(const char * file,const char *
arg,……);<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>execlp()會從PATH
環(huán)境變量所指的目錄中查找符合參數(shù)file的文件名,找到后便執(zhí)行該文件,然后將第二個以后的參數(shù)當做該文件的argv[0]、argv[1]……,最后一個參數(shù)必須用空指針(NULL)作結束。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>如果執(zhí)行成功則函數(shù)不會返回,執(zhí)行失敗則直接返回-1,失敗原因存于errno
中。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>錯誤代碼 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>參考execve()。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>/* 執(zhí)行l(wèi)s -al /etc/passwd execlp()會依PATH
變量中的/bin找到/bin/ls
*/<BR>#include<unistd.h><BR>main()<BR>{<BR>execlp(“l(fā)s”,”ls”,”-al”,”/etc/passwd”,(char
*)0);<BR>}<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>執(zhí)行 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>-rw-r--r-- 1 root root 705 Sep 3 13 :52
/etc/passwd<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc179></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>execv(執(zhí)行文件) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>fork,execl,execle,execlp,execve,execvp<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#include<unistd.h><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>int execv (const char * path, char * const argv[
]);<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>execv()用來執(zhí)行參數(shù)path字符串所代表的文件路徑,與execl()不同的地方在于execve()只需兩個參數(shù),第二個參數(shù)利用數(shù)組指針來傳遞給執(zhí)行文件。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>如果執(zhí)行成功則函數(shù)不會返回,執(zhí)行失敗則直接返回-1,失敗原因存于errno
中。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>錯誤代碼 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>請參考execve()。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>范例 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>/* 執(zhí)行/bin/ls -al /etc/passwd
*/<BR>#include<unistd.h><BR>main()<BR>{<BR>char * argv[
]={“l(fā)s”,”-al”,”/etc/passwd”,(char*)
}};<BR>execv(“/bin/ls”,argv);<BR>}<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>執(zhí)行 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>-rw-r--r-- 1 root root 705 Sep 3 13 :52
/etc/passwd<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><BR><FONT face=宋體 size=2><A
name=linuxc180></A></FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2><BR></FONT></DIV></TD>
<TD><FONT face=宋體 size=2><BR>execve(執(zhí)行文件) </FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>相關函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>fork,execl,execle,execlp,execv,execvp<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>表頭文件 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>#include<unistd.h><BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>定義函數(shù) </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>int execve(const char * filename,char * const
argv[ ],char * const envp[ ]);<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>函數(shù)說明 </FONT></DIV></TD>
<TD><FONT face=宋體
size=2>execve()用來執(zhí)行參數(shù)filename字符串所代表的文件路徑,第二個參數(shù)系利用數(shù)組指針來傳遞給執(zhí)行文件,最后一個參數(shù)則為傳遞給執(zhí)行文件的新環(huán)境變量數(shù)組。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>返回值 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>如果執(zhí)行成功則函數(shù)不會返回,執(zhí)行失敗則直接返回-1,失敗原因存于errno
中。<BR></FONT></TD></TR>
<TR>
<TD vAlign=top width=80>
<DIV align=right><FONT face=宋體 size=2>錯誤代碼 </FONT></DIV></TD>
<TD><FONT face=宋體 size=2>EACCES<BR>1. 欲執(zhí)行的文件不具有用戶可執(zhí)行的權限。<BR>2.
欲執(zhí)行的文件所屬的文件系統(tǒng)是以noexec
方式掛上。<BR>3.欲執(zhí)行的文件或script翻譯器非一般文件。<BR>EPERM<BR>1.進程處于被追蹤模式,執(zhí)行者并不具有root權限,欲執(zhí)行的文件具有SUID
或SGID 位。<BR>2.欲執(zhí)行的文件所屬的文件系統(tǒng)是以nosuid方式掛上,欲執(zhí)行的文件具有SUID 或SGID
位元,但執(zhí)行者并不具有root權限。<BR>E2BIG 參數(shù)數(shù)組過大<BR>ENOEXEC
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -