سؤال

لقد رأيت بضعة تطبيقات popen()/pclose().كانت قائمة ثابتة من pids و لا تأمين:

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));
    }

أو هذا ما يفترض نت:

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;

هو ما يبدو - لا الآمن موضوع التنفيذ ؟ أو أنا في عداد المفقودين شيء واضح ؟

هل كانت مفيدة؟

المحلول

على غنو libc تنفيذ هو threadsafe إذا libc تكوين تكون عودة الدخول (التي من المرجح أن تكون).ولكن هذا قد لا يكون الحال بالنسبة تطبيقات أخرى libc.

نصائح أخرى

لا أعتقد أن كنت في عداد المفقودين شيء واضح.أنا لا أرى أي إشارة إلى موضوع السلامة مع popen() أما اشتراط أن يكون موضوع آمن أم لا.ونتيجة لذلك ربما يجب عليك التعامل معها على أنها غير مؤشر الترابط-الآمن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top