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

有人告诉我用 C 语言制作一个用户界面文本显示菜单,这是以前在 Shell 脚本的帮助下制作的。我已经浏览了 ncurses 库,但如果有人可以指导我使用以前使用 ncurses 实现的代码,用于 Linux 的 C 中的菜单,我将不胜感激。

4

3 回答 3

1

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

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

于 2012-11-02T09:56:04.740 回答
0

关于代码:

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

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

随着execlp()您的变化过程(指示可执行文件和参数)。您应该咨询相应的man pages

于 2012-11-02T10:01:08.053 回答
0

那么,秘密就在叉子上。

成功时,子进程的PID返回给父进程,0返回给子进程。失败时,-1 被返回给父进程并且不创建子进程,并且 errno 被适当地设置。

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

您的代码基本上是在说:

如果我是家长,请稍等。

如果我是孩子,做工作 - 在你的情况下,获取目录列表。

目录列表完成后,我假设孩子死了,父母重新开始生活。

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

退房man fork...叉子

于 2012-11-02T10:00:44.723 回答