试图编写一个处理内部和外部命令的shell。我可以一次获得内部命令和一个外部命令。使用execv和输入重定向的C++流水线命令
我的问题是如何获得这样的命令来运行:“ls -l命令| grep的LIB |厕所-l”
我用叉子(),并通过execv通过外部命令()在一个char * []中。
有关如何工作的任何想法?我假设使用pipe()或其他东西,但我不确定。
问题的第二部分:如何处理I/O重定向?任何人都可以指给我一个有用的地方吗?
编辑 到目前为止,@Alex W是我的英雄。然而,由于我是pipe()和dup2()命令的新手,我对每个调用和变量都有些犹豫。
下面的代码我有一个处理一个单一的外部命令(例如=“ls -l命令-A”):
pid_t pid;
pid = fork();
if (pid < 0)
{
cout << "Fork failed." << endl;
}
else if (pid == 0)
{
execvp(exec_args[0], exec_args); //exec_args is a char*[] where
_exit (EXIT_FAILURE); //exec_args[0] contains "/bin/ls"
} //[1]="ls" and [2]="-l" [3]="-a"
else
{
int status;
waitpid(pid, &status, 0);
}
break;
你建议的方式正是我如何做到的。 (顺便说一下,您可能会将您的问题标记为“posix”,因为它不适用于Windows程序员 - 即使您必须删除其中一个其他标记才能执行此操作。) – thb
我在标记中添加了posix。基本上我正在寻找一些有关“pipe()”如何工作的见解 – twsmale
我明白了。试试'man 7 pipe'。 (您可能知道手册的第7部分是系统概念记录的地方。) – thb