setbuffer和freopen做一个简单的日志组件

      目标场景是这样的:

      多线程的应用程序要频繁打一些小字节的日志,也不想引用很重的日志库。

    

      设想了一个极其简单的日志组件,main线程中重定向stdout到文件,同时setbuffer设置一个10k的缓冲区,工作线程直接向stdout输出日志。

       很简单,但是有些担心,多线程写同一个文件会不会出现交叉写入的问题,linux的c是否保证文件缓冲区的数据安全,测试10000个线程全力写数据3s

-rw-rw-r-- 1 smi smi 4601412816 07-07 11:25 0707.txt
       grep -v匹配日志文本,发现是ok的,没有出现交叉写入的问题。那要么是linux下的printf已经保证了线程安全,要么就是出事的概率极低,总而言之,追求性能而不要求百分百日志准确性的系统可以尝试采用。


原文地址:https://www.cnblogs.com/learn-my-life/p/4626527.html