1

我只是将代码移植到_tspawnl在 Windows上使用的 Mac OS X。

有什么相当于_tspawnlMac OS X 或 Linux 的吗?

或者是否有任何相当于_tspawnl

4

2 回答 2

1

您可以通过以下方式一起使用fork和系统调用:execv

if (!fork()){ // create the new process 
     execl(path,  *arg, ...); // execute  the new program
}

系统fork调用创建一个新进程,而execv系统调用开始执行路径中指定的应用程序。例如,您可以使用以下函数spawn,其参数是要执行的应用程序的名称及其参数列表。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int spawn (char* program, char** arg_list)
{
pid_t child_pid;
/* Duplicate this process. */
child_pid = fork ();
if (child_pid != 0)
    /* This is the parent process. */
     return child_pid;
else {
    /* Now execute PROGRAM, searching for it in the path. */
     execvp (program, arg_list);
    /* The execvp function returns only if an error occurs. */
    fprintf (stderr, “an error occurred in execvp\n”);
    abort ();
    }
 }

int main ()
{
/* The argument list to pass to the “ls” command. */
   char* arg_list[] = { 
   “ls”, /* argv[0], the name of the program. */
   “-l”, 
    “/”,
    NULL /* The argument list must end with a NULL. */
  };

  spawn (“ls”, arg_list); 
  printf (“done with main program\n”);
  return 0; 
}

这个例子取自本书的第 3.2.2 章。(对于在 Linux 中的开发来说真的很好的参考)。

于 2013-10-28T11:07:42.080 回答
1

fork()/exec()正如已经指出的那样,您可以使用,但是更接近的系统调用是posix_spawn()manpage)。

但是,设置起来可能会有点麻烦,但是这里有一些使用它的示例代码请注意,此代码还使用CreateProcess()API 为 Windows 提供了功能,这可能是您无论如何都应该在 Windows 下使用的功能)。

于 2013-10-28T11:36:58.213 回答