- 問題原因:switch中case裡面的區域性變數出錯
- 解決方法:將case裡面定義的區域性變數在switch外面定義。
//報錯情況
switch (fork()) {
case -1:
error(1, errno, "fork");
case 0:
// 子程序執行命令
if (execvp(args[0], args) == -1) {
error(1, errno, "execvp");
}
default:
// 父程序等待子程序結束
int wstatus;
pid_t pid = wait(&wstatus);
printf("\n%d terminated. ", pid);
print_wstatus(wstatus);
}
//解決方案
int wstatus;
pid_t pid;
switch(fork()){
case -1:
error(1,errno,"fork");
case 0:
if(execvp(args[0],args) == -1){
error(1,errno,"execvp");
}
// exit(1);
default:
pid = wait(&wstatus);
if(pid > 0){
printf("\nchildpid:%d ",pid);
print_wstatus(wstatus);
}
}