如果您 必须这样做…
首先,您需要创建2pthread_key_t
s,一个用于stdout
,一个用于stderr
。这些可以使用创建pthread_key_create
,并且必须可以从所有线程访问。我们称它们为stdout_key
和stderr_key
。
创建线程时:
FILE *err = ..., *out = ...;
pthread_setspecific(stdout_key, out);
pthread_setspecific(stderr_key, err);
然后在您的头文件中:
#define stdout (FILE*)pthread_getspecific(stdout_key)
#define stderr (FILE*)pthread_getspecific(stderr_key)
#define printf(...) fprintf(stdout, ##__VA_ARGS__)
然后只需使用:
fprintf(stderr, "hello\n");
fprintf(stdout, "hello\n");
printf("hello\n");
我不推荐这种方法。