如何在pthread中使用C popen

时间:2019-02-19 11:03:57

标签: c multithreading pthreads fork popen

首先,我已经在论坛上阅读了一些建议,建议避免在线程中使用fork,而popen确实会分叉。

无论如何,我正在编写一个带有一些线程的程序,对我来说,使用执行popen的其他库函数将非常有用。

当我这样做时,程序退出。

让我举一个简单的例子,因为代码很大:

int main()
{
    pthread_t thread1, thread2;
    int var=1;
    pthread_create(&thread1, NULL, mythread, &var);
    pthread_create(&thread2, NULL, anotherthread, &var);
...
}

void *mythread(void *s)
{
...
    pthread_detach(pthread_self());
...
    printf("this is printed\n");
    char *str = externalFunctWithPopen();
    printf("this is NEVER printed\n");
...
}

char *externalFunctWithPopen()
{
...
    printf("this is also printed\n");
    popf = popen(command, "r"); 
    printf("this is not printed at all\n");
    while (fgets(buf, sizeof(buf), popf) != 0) {
...
}

正如我之前所说,“从不打印” 不会被打印,此外,主要出口,包括另一个名为 anotherthread

的线程

欢迎任何帮助。

1 个答案:

答案 0 :(得分:1)

  

主要出口,包括其他线程

为避免离开main()会破坏同一进程的所有其他线程的行为。通过调用pthread_exit()离开它,而不是exit()或仅return