#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»Ошибка сегментации с использованием execvp в c shell
Добро пожаловать в переполнение стека! Похоже, вам, возможно, потребуется научиться использовать отладчик для выполнения вашего кода. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-prgrams/). –
Что заставило вас принять решение читать максимум в 1000 '' char's? – alk
Этот 'pid = fork() == -1' не делает то, что вы его предполагаете (подробности см. Здесь: http://en.cppreference.com/w/c/language/operator_precedence). – alk