J'ai vu quelques implémentations de popen()/pclose(). Ils ont tous utilisé une liste statique de pid et sans verrouillage:popen - verrouille ou non le filetage en toute sécurité?
static int *pids;
static int fds;
if (!pids) {
if ((fds = getdtablesize()) <= 0)
return (NULL);
if ((pids = malloc(fds * sizeof(int))) == NULL)
return (NULL);
memset(pids, 0, fds * sizeof(int));
}
Ou cela, soi-disant NetBSD:
static struct pid {
struct pid *next;
FILE *fp;
pid_t pid;
} *pidlist;
/* Link into list of file descriptors. */
cur->fp = iop;
cur->pid = pid;
cur->next = pidlist;
pidlist = cur;
Est-ce à quoi il ressemble - un fil non mise en œuvre sûre? Ou est-ce que je manque quelque chose d'évident?
oui, je vois qu'il verrouille la liste des enfants. Ceci est vraiment mieux. Merci pour le lien. Je préfèrerais popen retourné un pid et je l'ai passé à pclose, mais ce n'est pas une option pour la libc dans ce cas –