包括(linux)bash命令

时间:2016-02-09 01:28:44

标签: c++ linux bash shell

我目前正致力于创建一个简单的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 *,或者标志或模式。

0 个答案:

没有答案