在c中创建一个pwd类型的函数

时间:2013-01-27 17:00:40

标签: c linux

我正把头发拉出来。自从我完成任何c编程以来已经有大约1。5年的时间了。

我需要在c中创建一个函数来执行pwd函数在linux中的功能。我有一个表示文件夹的节点结构。每个人都有一个指向其父母的指针,所以它应该很容易,但我在这里死了。我以为我可以继续使用strcat将父节点的名称附加到路径名。但是,即使我能够使这个工作,我将留下一个反向的列表,我猜这很好。我至少可以解决这个问题。但是如果我在目录c中,其父级是b,其父级是父级是root,我应该能够使用pwd输出字符串“/ a / b / c”。我被卡住了。有任何想法吗?当我尝试使用strcat时,我会在ying yang上出现分段错误。

void pwd( ){  

    char *thePath;
    NODE *nodePtr;
    nodePtr = cwd;

    while( nodePtr != root ){

    }
    printf("%s\n", thePath);
    return;
}   

1 个答案:

答案 0 :(得分:1)

如果你想要的只是打印出路径,那么递归应该很容易。

void pwd_recurse (NODE *nodePtr)
{
    if (nodePtr == root)
    {
         return;
    }
    pwd_recurse(nodePtr->parent);
    printf("/%s",nodePtr->name);
}

void pwd()
{
    ///however you get the nodePtr;
    pwd_recurse(nodePtr);
    printf("\n");
}

这很好地回避了必须处理内存分配(虽然它确实意味着如果你有一个带循环的简并文件系统(在这里插入强制性的XKCD卡通),你将有一个stackoverflow,这可以说比无限循环好。)