面试题答案
一键面试- 返回值含义:
- 返回值0:通常表示进程成功完成任务并正常退出。例如,一个简单的文件读取程序,成功读取并处理完文件后,使用
exit(0)
退出,表明整个操作顺利。 - 返回值1:一般用于表示进程遇到了一般性错误而退出。比如,程序在打开文件时,若文件不存在,可使用
exit(1)
退出,指示文件操作相关错误。 - 返回值 - 1:在标准C语言中,
exit
函数本身并不会使用-1作为返回值,不过在一些自定义场景下,-1可以表示严重错误或异常情况,例如内存分配失败等严重问题导致程序无法继续运行。
- 返回值0:通常表示进程成功完成任务并正常退出。例如,一个简单的文件读取程序,成功读取并处理完文件后,使用
- 父进程根据返回值做相应处理示例:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
if (pid == -1) {
perror("fork");
return 1;
} else if (pid == 0) {
// 子进程
// 这里模拟不同的返回值情况
// 例如模拟成功退出
// exit(0);
// 模拟一般性错误退出
// exit(1);
// 模拟自定义严重错误退出
exit(-1);
} else {
// 父进程
int status;
waitpid(pid, &status, 0);
if (WIFEXITED(status)) {
int exit_status = WEXITSTATUS(status);
if (exit_status == 0) {
printf("子进程成功完成任务并退出\n");
} else if (exit_status == 1) {
printf("子进程遇到一般性错误退出\n");
} else if (exit_status == -1) {
printf("子进程遇到严重错误退出\n");
}
}
}
return 0;
}
在上述代码中,父进程通过waitpid
等待子进程结束,并通过WIFEXITED
和WEXITSTATUS
宏获取子进程的退出状态,然后根据不同的返回值进行相应的处理。