linux上使用c语言完成父进程从终端读取要执行的命令,并交给子进程执行。父进程等待子进程结束,并打印子进程的返回值
时间: 2023-06-16 18:04:19 浏览: 112
以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#define MAX_COMMAND_LENGTH 1024
int main() {
char command[MAX_COMMAND_LENGTH];
int status;
while (1) {
printf("Enter command to execute: ");
fgets(command, MAX_COMMAND_LENGTH, stdin);
// remove newline character from command
int i;
for (i = 0; command[i] != '\0'; i++) {
if (command[i] == '\n') {
command[i] = '\0';
break;
}
}
pid_t pid = fork();
if (pid < 0) {
fprintf(stderr, "Fork failed\n");
exit(EXIT_FAILURE);
} else if (pid == 0) {
// child process
execlp(command, command, NULL);
fprintf(stderr, "Failed to execute command\n");
exit(EXIT_FAILURE);
} else {
// parent process
waitpid(pid, &status, 0);
printf("Child process exited with status %d\n", WEXITSTATUS(status));
}
}
return 0;
}
```
该程序使用 `fgets` 函数从终端读取要执行的命令,并使用 `fork` 函数创建一个子进程来执行该命令。父进程通过调用 `waitpid` 函数等待子进程结束,并打印子进程的返回值。子进程通过调用 `execlp` 函数来执行命令。如果 `execlp` 函数调用失败,则子进程会打印错误消息并退出。
阅读全文