这是在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中对此进行了详细介绍

10-04 20:42