1

Windowsで使用しているMac OS Xにコードを移植して_tspawnlいます。

_tspawnlMac OS X または Linux に相当するものはありますか?

または、に相当するposixはありますか_tspawnl

4

2 に答える 2

1

fork()/exec()すでに指摘したように、を使用できますが、より近いシステム コールはposix_spawn()( manpage ) です。

ただし、セットアップが少し面倒かもしれませんが、それを使用したサンプル コードがここにあります(このコードは、API を使用して Windows の機能も提供することに注意してくださいCreateProcess()。これは、おそらく Windows で使用する必要があるものです)。 )。

于 2013-10-28T11:36:58.213 に答える
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 に答える