Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ (C+;+;,Unix)在同一父进程中使用两个execlp_C++_Unix_Exec_Fork - Fatal编程技术网

C++ (C+;+;,Unix)在同一父进程中使用两个execlp

C++ (C+;+;,Unix)在同一父进程中使用两个execlp,c++,unix,exec,fork,C++,Unix,Exec,Fork,在我的程序中,我有一个fork(),它从父进程创建子进程。孩子首先运行并创建一个文本文件“text.txt”。它存储各种内容,然后父函数必须使用exec()命令打印出目录,然后显示文件的内容 到目前为止,我在这一点上有两条线: execlp("/bin/pwd", "pwd", NULL); execlp("/bin/cat", "cat", "text.txt", NULL); 当程序运行时,如果只有一个程序,那么这两个程序都可以完美地工作。但是,当我同时拥有这两个选项时,只有第一个选项会在

在我的程序中,我有一个
fork()
,它从父进程创建子进程。孩子首先运行并创建一个文本文件“text.txt”。它存储各种内容,然后父函数必须使用
exec()
命令打印出目录,然后显示文件的内容

到目前为止,我在这一点上有两条线:

execlp("/bin/pwd", "pwd", NULL);
execlp("/bin/cat", "cat", "text.txt", NULL);
当程序运行时,如果只有一个程序,那么这两个程序都可以完美地工作。但是,当我同时拥有这两个选项时,只有第一个选项会在程序结束前运行。我如何让他们一个接一个地跑

为清楚起见,讲师要求两个exec()都在同一个子进程中。

execlp()将替换您的进程,并且仅在失败时才会返回。解决此问题的正常方法是使用fork()

execlp()将替换您的进程,并且只有当它失败时才会返回。解决此问题的正常方法是使用fork()


嗯,是的。第一个会跑,永远不会回来
execlp
仅在失败时返回。最有可能的情况是,此练习的目的是分叉一个执行
pwd
的子进程,然后分叉另一个分叉
cat
的子进程。您应该向讲师澄清,单个进程不可能多次成功调用
execlp
exec
函数系列的全部要点是,它们用不同的指令集完全取代了正在运行的进程。谢谢威廉,我将看看他对此的回应!嗯,是的。第一个会跑,永远不会回来
execlp
仅在失败时返回。最有可能的情况是,此练习的目的是分叉一个执行
pwd
的子进程,然后分叉另一个分叉
cat
的子进程。您应该向讲师澄清,单个进程不可能多次成功调用
execlp
exec
函数系列的全部要点是,它们用不同的指令集完全取代了正在运行的进程。谢谢威廉,我将看看他对此的回应!
if (fork() == 0)
{
  execlp("/bin/pwd", "pwd", NULL);
  perror ("execlp(bin/pwd)");
  exit(1);
}
wait(&status); /* wait for child to finish */
if (fork() == 0)
{
  execlp("/bin/cat", "cat", "text.txt", NULL);
  perror ("execlp(bin/pwd)");
  exit(1);
}
wait(&status); /* wait for child to finish */