【发布时间】:2026-02-15 06:20:03
【问题描述】:
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
void main(){
char *cmd;
pid_t pid;
while (1) {
printf("$ ");
fgets(cmd,1000,stdin);
if (pid = fork() == -1) {
exit(1);
}
else if (pid == 0){
execvp(cmd,&cmd);
}
else{
int status;
wait(&status);
}
}
}
我正在制作一个执行命令的简单外壳,但是当我在提示符下输入命令时,我不断收到分段错误。这是最简单的版本,仅适用于像“ls”这样的单参数命令
【问题讨论】:
-
欢迎来到 Stack Overflow!听起来您可能需要学习如何使用调试器来逐步执行代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programs.
-
是什么让你决定阅读最多
1000chars? -
这个
pid = fork() == -1并没有像你想象的那样做(详情请看这里:en.cppreference.com/w/c/language/operator_precedence)。 -
那么 1000 的最大值部分是实验性的。当程序正常运行时,我会以更通用的方式工作