int spawnp(char *NomProgramme, int TailleTableHeritageFlux, int *TableHeritageFlux, struct inheritance *Heritage, char **Parametres, char **Environnement);
Le paramètre optionnel TableHeritageFlux est une table définissant l'héritage des descripteurs de fichiers du processus père. La taille de cette table est TailleTableHeritageFlux.
Le programme commence à s'exécuter à la fonction main
.
#include <stdio.h>
#include <stdlib.h>
#include <spawn.h>
int IdentifiantProcessus;
char NomProgramme[100];
char Parametres[10][100];
char Environnement[10][100];
int CodeRetour;
int NumeroEntreeStandard;
int NumeroSortieStandard;
int NumeroSortieErreurStandard;
int TableMappingFlux[4];
struct inheritance Heritage;
...
TableMappingFlux[0]=NumeroEntreeStandard;
TableMappingFlux[1]=NumeroSortieStandard;
TableMappingFlux[2]=NumeroSortieErreurStandard;
TableMappingFlux[3]=SPAWN_CLOSED;
memset(Heritage, (int)0, sizeof(struct inheritance));
Heritage.flags=SPAWN_SETGROUP;
Heritage.pgroup=SPAWN_NEWGROUP;
IdentifiantProcessus=spawnp(NomProgramme, 4, TableMappingFlux, &Heritage, Parametres, Environnement);
if (IdentifiantProcessus==-1)
{
exit(-1);
}
...
if (waitpid(IdentifiantProcessus, &CodeRetour, 0)==-1)
{
...
}
...
fork()
d'Unix.
Si le programme exécuté est différent de celui du processus courant, alors cette fonction ressemble aux APIs fork()
suivie de execvp()
d'Unix.
Si le mapping des descripteurs de fichiers utilisent des fichiers spécifiques, alors à cette fonction permet de réaliser une communication par pipe comme via l'API pipe()
d'Unix.
La taille de TableHeritageFlux ne doit comporter que des fichiers ouverts par le processus courant, en incluant éventuellement l'entrée standard, la sortie standard ou la sortie d'erreur standard.
Le résultat est -1 en cas d'erreur.