【发布时间】:2019-04-28 16:56:08
【问题描述】:
我有一些代码使用 fork、execlp 和 wait 来创建两个进程。目标是能够重复打印提示并让用户输入带有最多 4 个参数/选项的命令。
int main()
{
string command, argument;
istringstream iss(argument);
do
{
//prompt user for command to run
cout << "Enter command: ";
cin >> command >> argument;
int pid, rs, status;
//fork will make 2 processes
pid = fork();
if(pid == -1) { perror("fork"); exit(EXIT_FAILURE); }
if(pid == 0) {
//Child process: exec to command with argument
//C_str to get the character string of a string
rs = execlp(command.c_str(), command.c_str(), argument.c_str(), (char*) NULL);
.
if (rs == -1) { perror("execlp"); exit(EXIT_FAILURE); }
} else {
//Parent process: wait for child to end
wait(&status);
}
} while(command != "exit");
return 0;
}
我知道我目前的代码只能支持命令的一个参数,但我不确定要使用什么来指定 1 到 4 个参数。就在那时我的朋友提到了std::istringstream,但是在研究它时,我不明白如何将它用于程序的其余部分的输入。有没有办法设置它,或者有什么不同的方法可以用来满足要求?
【问题讨论】:
-
如果您不确定如何使用
istringstream,为什么不删除所有多线程内容并编辑您的问题以包含minimal reproducible example? -
也许它不适用。应该如何使用这 1 到 4 个用户参数?
-
它使用第一个参数读取命令,然后使用相同的命令但下一个参数重复该过程,依此类推。因此,如果我有一个输入,例如“touch dr/one dr/more dr/file”,它应该在 dr 目录下创建一个名为“one”的新文件,然后是另一个名为“more”的文件,以及另一个名为“文件”,都在同一个目录下。这将是一个具有多个参数的示例。
标签: c++ fork exec wait istringstream