所在函數(shù)庫(kù)為stdlib.h、process.h
創(chuàng)新互聯(lián)主營(yíng)西工網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶App定制開(kāi)發(fā),西工h5小程序設(shè)計(jì)搭建,西工網(wǎng)站營(yíng)銷(xiāo)推廣歡迎西工等地區(qū)企業(yè)咨詢(xún)
void abort() 此函數(shù)通過(guò)調(diào)用具有出口代碼3的_exit寫(xiě)一個(gè)終止信息于
stderr,并異常終止程序 無(wú)返回值
int exec…裝入和運(yùn)行其它程序
int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)
int execle( char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int execlp( char *pathname,char *arg0,char *arg1,…,NULL)
int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])
int execv( char *pathname,char *argv[])
int execve( char *pathname,char *argv[],char *envp[])
int execvp( char *pathname,char *argv[])
int execvpe(char *pathname,char *argv[],char *envp[])
exec函數(shù)族裝入并運(yùn)行程序pathname,并將參數(shù)
arg0(arg1,arg2,argv[],envp[])傳遞給子程序,出錯(cuò)返回-1
在exec函數(shù)族中,后綴l、v、p、e添加到exec后,
所指定的函數(shù)將具有某種操作能力
有后綴 p時(shí),函數(shù)可以利用DOS的PATH變量查找子程序文件
l時(shí),函數(shù)中被傳遞的參數(shù)個(gè)數(shù)固定
v時(shí),函數(shù)中被傳遞的參數(shù)個(gè)數(shù)不固定
e時(shí),函數(shù)傳遞指定參數(shù)envp,允許改變子進(jìn)程的環(huán)境,
無(wú)后綴e時(shí),子進(jìn)程使用當(dāng)前程序的環(huán)境
void _exit(int status)終止當(dāng)前程序,但不清理現(xiàn)場(chǎng)
void exit(int status) 終止當(dāng)前程序,關(guān)閉所有文件,寫(xiě)緩沖區(qū)的輸出(等待輸出),
并調(diào)用任何寄存器的出口函數(shù),無(wú)返回值
int spawn…運(yùn)行子程序
int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnv( int mode,char *pathname,char *argv[])
int spawnve( int mode,char *pathname,char *argv[],char *envp[])
int spawnvp( int mode,char *pathname,char *argv[])
int spawnvpe(int mode,char *pathname,char *argv[],char *envp[])
spawn函數(shù)族在mode模式下運(yùn)行子程序pathname,并將參數(shù)
arg0(arg1,arg2,argv[],envp[])傳遞給子程序.出錯(cuò)返回-1
mode為運(yùn)行模式
mode為 P_WAIT 表示在子程序運(yùn)行完后返回本程序
P_NOWAIT 表示在子程序運(yùn)行時(shí)同時(shí)運(yùn)行本程序(不可用)
P_OVERLAY表示在本程序退出后運(yùn)行子程序
在spawn函數(shù)族中,后綴l、v、p、e添加到spawn后,
所指定的函數(shù)將具有某種操作能力
有后綴 p時(shí), 函數(shù)利用DOS的PATH查找子程序文件
l時(shí), 函數(shù)傳遞的參數(shù)個(gè)數(shù)固定.
v時(shí), 函數(shù)傳遞的參數(shù)個(gè)數(shù)不固定.
e時(shí), 指定參數(shù)envp可以傳遞給子程序,允許改變子程序運(yùn)行環(huán)境.
當(dāng)無(wú)后綴e時(shí),子程序使用本程序的環(huán)境.
int system(char *command) 將MSDOS命令command傳遞給DOS執(zhí)行
轉(zhuǎn)換子程序,函數(shù)庫(kù)為math.h、stdlib.h、ctype.h、float.h
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *gcvt(double value,int ndigit,char *buf)
將數(shù)value轉(zhuǎn)換成字符串并存于buf中,并返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無(wú)符號(hào)整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *ltoa(long value,char *string,int radix)
將長(zhǎng)整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *itoa(int value,char *string,int radix)
將整數(shù)value轉(zhuǎn)換成字符串存入string,radix為轉(zhuǎn)換時(shí)所用基數(shù)
double atof(char *nptr) 將字符串nptr轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
int atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整型數(shù), 并返回這個(gè)數(shù),錯(cuò)誤返回0
long atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長(zhǎng)整型數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
double strtod(char *str,char **endptr)將字符串str轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),
long strtol(char *str,char **endptr,int base)將字符串str轉(zhuǎn)換成長(zhǎng)整型數(shù),
并返回這個(gè)數(shù),
int toascii(int c) 返回c相應(yīng)的ASCII
int tolower(int ch) 若ch是大寫(xiě)字母('A'-'Z')返回相應(yīng)的小寫(xiě)字母('a'-'z')
int _tolower(int ch) 返回ch相應(yīng)的小寫(xiě)字母('a'-'z')
int toupper(int ch) 若ch是小寫(xiě)字母('a'-'z')返回相應(yīng)的大寫(xiě)字母('A'-'Z')
int _toupper(int ch) 返回ch相應(yīng)的大寫(xiě)字母('A'-'Z')
fork()應(yīng)該是Linux操作系統(tǒng)的函數(shù)。
從#include sys/signal.h和fork()上判斷,這個(gè)程序應(yīng)該是Linux操作系統(tǒng)的應(yīng)用程序。
Windows上應(yīng)該用CreateProcess創(chuàng)建進(jìn)程
獲取進(jìn)程ID用
DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD lpdwProcessld)
hWnd:窗口句柄。
lpdwProcessld:接收進(jìn)程標(biāo)識(shí)的32位值的地址。如果這個(gè)參數(shù)不為NULL,GetWindwThreadProcessld將進(jìn)程標(biāo)識(shí)拷貝到這個(gè)32位值中,否則不拷貝。
返回值:返回值為創(chuàng)建窗口的線(xiàn)程標(biāo)識(shí)。
C語(yǔ)言可以通過(guò)宏,在你需要的位置宏展開(kāi)出一個(gè)新的函數(shù)。
例如:
#define XXX(funcname) \
int funcname (int arg1, int arg2) \
{ return arg1 + arg2; }
但這也是編譯期就決定好了的,也不能實(shí)現(xiàn)運(yùn)行期動(dòng)態(tài)創(chuàng)建。
/*請(qǐng)解釋一下*/
while(((child=wait(status))==-1)(errno==EINTR));
這種的目的是父親進(jìn)程等待子進(jìn)程結(jié)束,并回收子進(jìn)程的資源,將子進(jìn)程的退出狀態(tài)存儲(chǔ)在status中,同時(shí),返回該子進(jìn)程的pid。
如果wait函數(shù)返回-1表示wait函數(shù)被其它情況打斷返回,并沒(méi)有等待到子進(jìn)程結(jié)束,而同時(shí)判斷errno的值是不是EINTR(意思是讓你try again),那么,讓進(jìn)程繼續(xù)等待。因?yàn)檫@個(gè)錯(cuò)誤并不是真正wait錯(cuò)誤,而是被timeout時(shí)間等造成的,因此重新等待。而如果是其它情況,顯然是wait函數(shù)調(diào)用錯(cuò)誤,即下面的if(child==-1),需要打印錯(cuò)誤信息?!?/p>
//但你這句應(yīng)該寫(xiě)錯(cuò)了。應(yīng)該是邏輯與而不是位與操作。即
while(((child=wait(status))==-1)(errno==EINTR));
/*請(qǐng)解釋一下*/
if(child==-1)
你對(duì)信號(hào)處理部分還需要努力。
另外介紹一本書(shū)《Linux高級(jí)程序設(shè)計(jì) 第3版》 上面講得很清楚。
有問(wèn)題我們繼續(xù)交流,一起學(xué)習(xí)。
更多技術(shù)文章可以關(guān)注我的微博,名字:成都睿爾科技 。