(4)父进程从终端读取要执行的命令,并交给子进程执行。父进程等待子进程结束,并打印子进程的返回值。 提示:从终端读取要执行的命令可用fgets()实现。
时间: 2024-05-03 20:22:11 浏览: 23
下面是一个示例代码,实现了从终端读取命令并交给子进程执行,并打印子进程的返回值:
```
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#define MAX_COMMAND_LENGTH 100
int main() {
char command[MAX_COMMAND_LENGTH];
pid_t pid;
int status;
while (1) {
// 从终端读取命令
printf("Please enter the command to execute: ");
fgets(command, MAX_COMMAND_LENGTH, stdin);
// 去除命令末尾的换行符
int len = strlen(command);
if (len > 0 && command[len-1] == '\n') {
command[len-1] = '\0';
}
// 创建子进程执行命令
pid = fork();
if (pid == -1) {
perror("fork");
exit(1);
} else if (pid == 0) { // 子进程
execlp(command, command, NULL);
perror("exec");
exit(1);
} else { // 父进程
// 等待子进程结束
waitpid(pid, &status, 0);
if (WIFEXITED(status)) {
// 子进程正常结束,打印返回值
printf("Child process exited with status %d\n", WEXITSTATUS(status));
} else {
// 子进程异常结束
printf("Child process terminated abnormally\n");
}
}
}
return 0;
}
```
在上面的代码中,使用了fgets()函数从终端读取命令,并使用execlp()函数在子进程中执行命令。在父进程中,使用waitpid()函数等待子进程结束,并使用WIFEXITED()和WEXITSTATUS()函数获取子进程的返回值。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)