这是在UNIX中使用的Pipe fork exec trio的简单演示。
#include <stdio.h>
#include <sys/fcntl.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
int outfd[2];
if(pipe(outfd)!=0)
{
exit(1);
}
pid_t pid = fork();
if(pid == 0)
{
//child
close(outfd[0]);
dup2(outfd[1], fileno(stdout));
char *argv[]={"ls",NULL};
execvp(argv[0], (char *const *)argv);
throw;
}
if(pid < 0)
{
exit(1);
}
else
{
//parrent
close(outfd[1]);
dup2(outfd[0], fileno(stdin));
FILE *fin = fdopen(outfd[0], "rt");
char *buffer[2500];
while(fgets(buffer, 2500, fin)!=0)
{
//do something with buffer
}
}
return 0;
}
现在,我想在Windows中使用WinAPI编写相同的内容。我应该使用什么功能?有任何想法吗?
最佳答案
fork()
和execvp()
在Windows中没有直接等效的功能。 fork和exec的组合将映射到CreateProcess(如果使用MSVC,则为_spawnvp)。对于重定向,您需要CreatePipe和DuplicateHandle,在this MSDN article中对此进行了详细介绍