我目前正致力于创建一个简单的Linux shell。我有一个Shell类,带有一个我将其视为一种队列的向量。用户可以输入类似
的内容$ ls -l /
并且程序会通过私有方法将其放入我的向量中,使用" ls"处于第0位," /"在第二位,你明白了。然后我进入我的解释"阶段:
这就是我绊倒的地方。如果队列中倒数第二个字符串是">"我们知道最后一个字符串将是我们需要创建和/或打开(和/或截断?)的文件,并将用户给出的命令结果写入所述文件。
我需要使用bash命令打开并使用标志来执行此操作,我不能使用像ofstream这样的c ++开启器。然后我需要使用bash命令exec执行输入。
以下是我的代码在提交此帖子时的编写方式。
if (commandQueue.size() >= 3 && commandQueue.at(commandQueue.size() - 2) == ">") {
//commandQueue.at(commandQueue.size() - 1) is fileName open
//commandQueue.at(0) is name of program to run exec
//remaining substrings are args
}; //commandQueue.at(0) is name of program to run exec
// remaining substrings are args
我应该如何格式化这些命令? fork很简单,只是
pid_t pid = fork();
并检查。但我不确定我应该如何使用标志打开文件,或者如何格式化exec命令。我感谢您的任何帮助,谢谢。
编辑:我应该把我在else语句中提供的if语句的第二部分,或者从if语句返回。
编辑2:我应该提一下我对bash命令的新手,我之前使用过其中的一些,但这是我在内部使用它们编写的第一个程序。 / p>
编辑3(回复加利克):
就像,如果你使用execve,你会有像
这样的东西 const char *path = "/bin/ls";
char *const argv[] = { "/bin/ls", "/", NULL };
execve(path, argv, environ);
(这是c代码,而不是c ++)你看到" execve(path,argv,environ)"?这就是我很好奇的事情。
open的手册页
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
但是因为我没有使用c,并且我将用户的输入存储为字符串,所以我不确定如何处理const char *,或者标志或模式。