我有一个多线程应用程序。有一些常见的API,在stdout上有很多打印出来的API。
我只想要一根线,这个印花应该不会来。
如何在c/linux中做到这一点?
感谢Rakesh Patel
发布于 2016-08-04 20:45:42
文件描述符是每个进程的资源,而不是每个线程的资源。所以你不能只为一个线程重定向它。
发布于 2016-08-04 20:48:24
您可以包装printf()并添加一些特定的代码来检测您所在的线程,以及您是否可以打印格式化文本。
发布于 2016-08-04 20:53:20
考虑创建自定义日志记录器,只过滤不需要的消息。它可能看起来像这样:
#include <stdio.h>
#include <pthreads.h>
struct Logger
{
pthread_t blockedThreads[256];
int qty;
};
struct Logger *createLogger()
{
struct Logger *logger = (Logger *)malloc(sizeof(Logger));
logger->qty = 0;
return logger;
}
void blockThread(struct Logger *logger, pthread_t thread)
{
for (int i = 0; i < logger->qty; ++i) {
if (logger->blockedThread[i] == thread {
return;
}
}
logger->blockedThreads[logger->qty] = thread;
logger->qty++;
}
void log(struct Logger *logger, const char *message)
{
for (int i = 0; i < logger->qty; ++i) {
if (logger->blockedThread[i] == pthread_self()) {
return;
}
}
// DO REAL LOGGING HERE
}我希望我的想法对你来说足够清楚。
https://stackoverflow.com/questions/38767667
复制相似问题