我想编写一个类似Linux shell的程序。我开始编写一个小程序来执行“ls”命令。我无法弄清楚的是我应该如何进行以使我的程序响应像shell这样的任何命令。 (例如cat,cd,dir)。
#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
(或类似的东西)?
答案 0 :(得分:3)
shell基本上执行以下操作:
首先构造一个非常简单的shell。
答案 1 :(得分:1)
如果我正确理解了问题,您可以:
scanf()
execvp()
的命令运行(它与execlp()
的作用相同,但您可以将所有参数作为数组传递。)类似的东西:
char args[100][50];
int nargs = 0;
while( scanf( " %s ", args[nargs] ) )
nargs++;
args[nargs] = NULL;
/* fork here *
...
/* child process */
execvp( args[0], args );