Смысл этого кода в том, чтобы имитировать оболочку:
1) Запрашивать команду из стандартного ввода, пока не будет нажата комбинация клавиш CTRL + D или не введен «выход» в качестве ввода.
2) Разветвите процесс.
3) Родитель ожидает выполнения дочерней команды.
4) Дочерний выполняет команду.
5) Перейдите к 1
Execvpe работает (так как p указывает на PATH), но execve просто вызывает perror (), если я не наберу / bin /% command%.Что я делаю неправильно?Спасибо за помощь!
Вывод / bin / env внутри моей нанооболочки: PATH = / bin
8 #define SIZE 50
9 #define input fgets(buffer, SIZE, stdin)
10 #define exitcheck strcmp(strtok(buffer, "\n"), "exit")
11
12 int main(int argc, char *argv) {
13 char buffer[SIZE] = "echo";
14 char* const command[] = {buffer, NULL};
15 char* const envp[] = {"PATH=/bin", NULL};
16
17 do {
18 printf("nano-shell $ ");
19 pid_t pid = fork();
20 // Parent
21 if (pid > 0) {
22 int status;
23 waitpid(pid, &status, 0);
24 }
25 // Child
26 else if (pid == 0) {
27 execve(command[0], command, envp);
28 perror("Error: ");
29 _exit(1);
30 }
31 } while(input != NULL && exitcheck != 0 );
32
33 exit(EXIT_SUCCESS);
34 }