C 为什么fprintf不';你不能在线程中工作吗?

C 为什么fprintf不';你不能在线程中工作吗?,c,multithreading,io,pthreads,stdout,C,Multithreading,Io,Pthreads,Stdout,我正在用pthread\u create创建一个线程 在我使用的线程函数中 fprintf(stdout, "text\n"); 但这不会向控制台输出任何内容。printf也存在同样的问题。 我还尝试刷新标准输出缓冲区,但没有成功。 所以问题是如何从线程打印任何东西到控制台 UPD: 该代码从主要作品很好。但是线程没有输出任何内容您缺少对pthread_join的调用:如果主程序在printf的输出到达控制台之前退出,您将看不到任何打印内容 添加pthread_-join(tid,NULL)到

我正在用
pthread\u create
创建一个线程

在我使用的线程函数中

fprintf(stdout, "text\n");
但这不会向控制台输出任何内容。
printf
也存在同样的问题。 我还尝试刷新标准输出缓冲区,但没有成功。 所以问题是如何从线程打印任何东西到控制台

UPD:


该代码从主要作品很好。但是线程没有输出任何内容

您缺少对
pthread_join
的调用:如果主程序在
printf
的输出到达控制台之前退出,您将看不到任何打印内容

添加
pthread_-join(tid,NULL)到您的示例修复了输出:

#include <pthread.h>
#include <stdio.h>

void *listen_t(void *arg){
  fprintf(stdout, "test\n");
  fflush(stdout);
}

int main(int argc, char **argv){
  pthread_t tid;
  int err;

  err = pthread_create(&tid, NULL, &listen_t, NULL);
  if (err != 0){
    printf("\ncan't create thread :[%d]", strerror(err));
  }
  else{
    printf("\n Thread created successfully\n");
  }
  pthread_join(tid, NULL);
  return 0;
}
#包括
#包括
void*listen\u t(void*arg){
fprintf(stdout,“test\n”);
fflush(stdout);
}
int main(int argc,字符**argv){
pthread_t tid;
INTERR;
err=pthread\u create(&tid,NULL,&listen\t,NULL);
如果(错误!=0){
printf(“\n无法创建线程:[%d]”,strerror(err));
}
否则{
printf(“\n线程已成功创建\n”);
}
pthread_join(tid,NULL);
返回0;
}

请向我们展示一个演示该问题的最小完整示例。线程是否已分离运行?如果是这样,那么就没有标准输出。如何将标准输出传递给线程?请注意,在这里还应该使用互斥锁,并在打印到控制台时锁定(以防打印时使用多个线程)。@ZarakiKenpachi:stdio具有内部锁定。不需要另一层锁。
#include <pthread.h>
#include <stdio.h>

void *listen_t(void *arg){
  fprintf(stdout, "test\n");
  fflush(stdout);
}

int main(int argc, char **argv){
  pthread_t tid;
  int err;

  err = pthread_create(&tid, NULL, &listen_t, NULL);
  if (err != 0){
    printf("\ncan't create thread :[%d]", strerror(err));
  }
  else{
    printf("\n Thread created successfully\n");
  }
  pthread_join(tid, NULL);
  return 0;
}