Я хочу написать программу, которая действует как оболочка Linux. Я начал писать небольшую программу для выполнения команды «ls». Я не могу понять, как я должен действовать, чтобы моя программа отвечала на любую команду, как это делает оболочка. (например, cat, cd, dir).Выполнение команд оболочки с помощью execvp()
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#define MAX 32
using namespace std;
int main() {
pid_t c;
char s[MAX];
int fd[2];
int n;
pipe(fd);
c = fork();
if(c == 0) {
close(fd[0]);
dup2(fd[1], 1);
execlp("ls", "ls", "-l", NULL);
return 0;
} else {
close(fd[1]);
while((n = read(fd[0], s, MAX-1)) > 0) {
s[n] = '\0';
cout<<s;
}
close(fd[0]);
return 0;
}
return 0;
}
Как я могу сделать свою программу чтения, какие типы пользователей в и передает его execlp
(или нечто подобное, что делает то же самое)?
_ "... чтобы сделать мою программу реагировать на любую команду ..." _ В родительском процессе у Вас есть 'Fd [1]' дескриптор файла, этот вы можете использовать, чтобы написать что-то на установленном 'pipe()'. Обратите внимание, что команды, которые вы указали, не требуют никакого взаимодействия со входа. –