编写另一个C 程序,使用系统调用fork()以创建一个子进程,并使用这个子进程调用exec 函数族以执行系统命令ls。 答案:
时间: 2024-09-24 18:18:40 浏览: 133
在C语言中,你可以通过以下步骤编写一个程序,它首先使用`fork()`函数创建一个子进程,然后在子进程中调用`exec()`函数家族来执行系统命令`ls`:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
#define CMD "ls" // 将要执行的系统命令
int main(int argc, char *argv[]) {
pid_t child_pid; // 子进程PID
int status;
// 创建子进程
if ((child_pid = fork()) == 0) { // 如果子进程(进程ID为0)
// 执行exec系列函数替换当前进程
execvp(CMD, argv); // 使用argv数组传递命令行参数给execvp
perror("Failed to execute command"); // 如果失败,打印错误信息
exit(1); // 子进程终止并返回非零状态
} else if (child_pid > 0) { // 父进程
printf("Parent process waiting for child...\n");
// 等待子进程结束
wait(&status);
printf("Child process finished with status %d\n", WEXITSTATUS(status));
} else { // fork()返回值小于0的情况(异常)
perror("Fork failed");
return -1;
}
return 0;
}
```
在这个程序中,`fork()`用于创建子进程,`execvp()`负责执行指定的系统命令`ls`。如果`execvp()`成功,原父进程会被替换为`ls`命令;如果失败,则会在子进程中打印错误并退出。父进程会等待子进程完成并通过`wait()`获取子进程的状态。
阅读全文