2009年3月8日 星期日

多線程程式設計 - exec()

fork()有提到有兩個使用fork()的方式
1. 複製自己這一個程序,另外去執行
2. 複製自己這一個程序,透過exec()這一個函式去執行另外的程序並且取代自己的程序,只有process id延續下來

有一個例子看了會比較好理解
main.c

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

char command[256];

int main()
{
int rtn; // 子程序的返回數值
while(1) {
// 由終端機讀取要執行的命令
printf(">");
fgets(command,256,stdin);
command[strlen(command)-1]=0;
if (fork()==0) {
execlp(command,NULL);
// 如果exec函數返回,表明沒有正常執行命令,列印錯誤訊息
perror(command);
exit(errno);
}
else
{
// 父程序,等待子程序結序,並列印子程序的返回值
wait(&rtn);
printf("child process return %d\n",rtn);
}
}
return 0;
}


參考資料:
wait(2) - Linux man page
Linux下的多進程編程(轉) - fork(),exec()等函數的使用

沒有留言: