Во-первых, я читал некоторые комментарии на форумах о том, что рекомендуется избегать использования fork
в темах, а popen
делает форк.
В любом случае, я делаю программу с некоторыми потокамии мне будет очень полезно использовать другие библиотечные функции, которые выполняют popen
.
Когда я это сделаю, программа завершается.
Позвольте мне привести простой пример, потому что кодlarge:
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
Любая помощь может приветствоваться.