C的新手,需要帮助理解下面的功能

时间:2012-11-02 09:49:35

标签: c linux

case 1:
    if (fork())
        wait(0);
    else
        execlp("ls", "ls", (char *)NULL);
    break;

我被告知要在C语言中创建一个用户界面文本显示菜单,该菜单以前是在Shell脚本的帮助下完成的。我已经浏览了ncurses库,但是如果有人能指导我以前使用ncurses为C for Linux中的菜单实现的代码,我将不胜感激。

3 个答案:

答案 0 :(得分:1)

您展示的代码只是一个片段,它不是“功能”。它看起来是从switch语句的中间复制出来的。

如果要切换的表达式的值为1,它将fork()一个新进程。然后,子进程将execlp()并运行ls程序。父母将等待孩子完成。

答案 1 :(得分:0)

然后秘密就在岔路口。

  

成功时,子进程的PID返回给父进程,0返回给子进程。失败时,-1返回到父级,并且没有创建子进程,并且正确设置了errno。

当您分叉时,您将获得另一个进程,与第一个进程完全相同。唯一的区别是在子进程fork中返回了不同的值。

您的代码基本上是这样说:

如果我是父母,请等待。

如果我是孩子,请继续工作 - 在您的情况下获取目录列表。

一旦目录列表完成,我假设孩子已经死了,父母会继续生活。

这是做你正在做的事情的相当典型的代码。你有一个主要的应用程序是“菜单”,你正在生成临时副本,只需执行菜单所需的shell命令,然后恢复正常生活。

结帐man fork ... fork

答案 2 :(得分:0)

关于代码:

case 1:
    if (fork())
        wait(0);
    else
        execlp("ls", "ls", (char *)NULL);
    break;

fork()创建一个新进程,一个精确的副本。 Fork将子进程的PID返回给父进程(因此它将执行wait(0))和0到子进程(因此它将执行execlp())。

使用execlp()您正在改变进程(指示可执行文件和参数)。您应该查阅相应的man pages