【问题标题】:Trying to simulate a linux shell.Problems with simulating mkdir [closed]试图模拟一个linux shell。模拟mkdir的问题[关闭]
【发布时间】:2018-02-05 01:26:30
【问题描述】:

我正在尝试制作一个 C++ 程序来模拟 Linux shell。没什么好想的,只是几个命令。

我正在尝试这样做:

我创建了一个类,试图用节点和子节点来模拟文件系统。 每个节点可以有 n 个子节点,每个子节点都有一个指向其父节点的指针。

Node 类如下所示:

class Node
{
public:
    Node();
    Node(bool isFile);
    Node(string name);
    friend class Tree;
    bool isFile;
    vector<Node*> childs;
    string name;
    string text;
    Node *parrent;
    string names = "-";

protected:

private:



};

我创建了一个 addNode 方法,我想用它来将节点添加到我的“树”中。我试图做的是这样:

void Tree::addNode(string name,bool isFile,string pwd)
{
size_t pos=0;
string delimiter = "\\";
string token;
Node *inserter = new Node();
Node *aux;
inserter->name=name;
inserter->isFile=isFile;
aux=&this->root;
pos = pwd.find(delimiter);
token = pwd.substr(0,pos);
pwd.erase(0,pos + delimiter.length());
if((pos = pwd.find(delimiter)) == string::npos)
{
    inserter->parrent=aux;
    if(aux->names.find(name) == string::npos)
    {
        aux->childs.push_back(inserter);
        aux->names.append(name);
        aux->names.append(" ");
    }
    else
    {

        cout << "The directory already exists" << endl;
    }
}
else
{
    while((pos = pwd.find(delimiter)) != string::npos)
    {
        token = pwd.substr(0,pos);
        pwd.erase(0,pos + delimiter.length());
        for(int i = 0; i<aux->childs.size(); i++)
        {
            if(aux->childs[i]->name.compare(token))
            {
                aux=aux->childs[i];
                cout << token << endl;
            }
        }

    }
    inserter->parrent=aux;
    if(aux->names.find(name) == string::npos)
    {
        aux->childs.push_back(inserter);
        aux->names.append(name);
        aux->names.append(" ");
    }
    else
    {

        cout << "The directory already exists" << endl;
    }
}

 }

所以,基本上,每次我调用这个方法时,我都想确保每个目录都存在,并且我将指针 aux 更改为指向子地址,等等。

第一个 if 是用于在根目录中创建目录,以及其他每个目录的时间。

但是,由于我对指针的理解不好,我看不出哪里出错了。 当我在“根”节点中添加节点时,一切正常,但是当我在任何子节点中添加节点时,事情就变糟了,我无法完全理解它。

我也实现了 ls 和 cd ls 工作正常,但 cd 不行。我在检查目录是否存在时尝试做同样的事情,但有时,即使目录不存在,如果您键入 cd "您所在的目录名称in" 它只是添加到 pdw,即使该目录不存在。

这里是cd方法

bool Tree::exitsChild(string name,string pwd)
{
size_t pos=0;
string delimiter = "\\";
string token;
Node *aux;
aux=&root;
pos = pwd.find(delimiter);
token = pwd.substr(0,pos);
pwd.erase(0,pos + delimiter.length());
if((pos = pwd.find(delimiter)) == string::npos)
{
    if(aux->names.find(name)!= string::npos)
    {
        return true;
    }
    else
        return false;
}
else
{
    while((pos = pwd.find(delimiter)) != string::npos)
    {
        token = pwd.substr(0,pos);
        pwd.erase(0,pos + delimiter.length());
        for(int i = 0; i<aux->childs.size(); i++)
        {
            if(aux->childs[i]->name.compare(token))
            {
                aux=aux->childs[i];
            }
        }
    }
    if(aux->names.find(name) != string::npos)
        {
            return true;
        }
        else
        {
            return false;
        }
}

}

【问题讨论】:

  • 如果i 保持不变,aux=aux-&gt;childs[i]; 之后会发生什么?
  • 什么意思?没看懂问题,i要么是0,要么是从0到向量的大小。

标签: c++ linux shell pointers


【解决方案1】:

我有点笨,我想通了,在 if 和比较中没有 ==0,抱歉打扰

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 2018-10-15
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多