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

我被告知要创建一个用户界面文本显示菜单C以前是借助Shell脚本创建的。我已经通过了ncurses库,但如果有人能够指示我以前使用ncurses在C for Linux中实现的代码,我将不胜感激。C新手,需要帮助理解下面的功能

+4

这是一个两个问题。第一个是关于fork如何工作,第二个关于ncurses,你应该把它们分开。 – Joe

回答

1

你显示的代码只是一个片段,它不是一个“功能”。它看起来被复制出switch声明的中间。

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

0

那么秘密就在分叉。

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

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

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

如果我是父母,请等待。

如果我是孩子,就工作 - 在你的情况下得到一个目录列表。

一旦目录列表完成,我假设孩子死亡,父母的生活就会重新开始。

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

退房man fork ... fork

0

关于代码:

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

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

With execlp()您正在改变进程(指示可执行文件和参数)。您应该咨询相应的man pages