qnx log写入文件 简单实现

qnx log写入文件 简单实现

#ifndef __COMMON_LOG__
#define __COMMON_LOG__#include "fcntl.h"
#include "pthread.h"
#include "stdarg.h"
#include "unistd.h"
#include <stdio.h>
#include <string.h>//#define _LOG_FILE_NAME "/tmp/easy.log"
#define _LOG_FILE_NAME "easy.log"#if defined _LOG_FILE_NAMEvoid __file_log_com(char *log_str, ...);
#define __file__                                                                                                       \({                                                                                                                 \char *_rs = strrchr((char*)__FILE__, '/');                                                                            \_rs ? (_rs + 1) : __FILE__;                                                                                    \})
#define _COM_FILE_PARSE(lgType, prefix, fmt, args...)                                                                  \do {                                                                                                               \__file_log_com("[%s][%s:%s:%d][%s]" fmt, lgType, __file__, __func__, __LINE__, prefix, ##args);                \} while (0)#define ts_log_info(dev, fmt, args...) _COM_FILE_PARSE("info", dev, fmt, ##args)
#define ts_log_err(dev, fmt, args...) _COM_FILE_PARSE("error", dev, fmt, ##args)
#define ts_log_warn(dev, fmt, args...) _COM_FILE_PARSE("warning", dev, fmt, ##args)
#define ts_log_dbg(dev, fmt, args...) _COM_FILE_PARSE("debug", dev, fmt, ##args)#else#define ts_log_info(dev, fmt, args...) 
#define ts_log_err(dev, fmt, args...)  
#define ts_log_warn(dev, fmt, args...) 
#define ts_log_dbg(dev, fmt, args...)  #endifstatic pthread_mutex_t _log_mutex;
static FILE *_log_fp = NULL;// qnx 简单log写入文件 实现
void __file_log_com(char *log_str, ...) {va_list arg;if (NULL != _log_fp) {pthread_mutex_lock(&_log_mutex);va_start(arg, log_str);(void)vfprintf(_log_fp, log_str, arg);va_end(arg);//(void)fprintf(___fp, " \n");//(void)fclose(fp);fflush(_log_fp);pthread_mutex_unlock(&_log_mutex);}
}void com_file_log_init(char *filename) {_log_fp = fopen(filename, "w");if (!_log_fp)return perror(__func__);pthread_mutex_init(&_log_mutex, NULL);
}int main() {printf( "hello\n");com_file_log_init(_LOG_FILE_NAME);char* dev_name = (char*)"E800";ts_log_info(dev_name, "hello world");// __file_log_com("%s,%s", dev_name, "e800");printf( "finish\n");return 0;
}#endif

运行结果:

hello
finish

写入文件样子:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/460054.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang 基础 Go Modules包管理

Golang 基础 Go Modules包管理 在 Go 项目开发中&#xff0c;依赖包管理是一个非常重要的内容&#xff0c;依赖包处理不好&#xff0c;就会导致编译失败&#xff0c;本文将系统介绍下 Go 的依赖包管理工具。 我会首先介绍下 Go 依赖包管理工具的历史&#xff0c;并详细介绍下…

使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置(读取时自动解密)

一、前言 在业务系统开发过程中,我们必不可少的会使用数据库,在应用开发过程中,数据库连接信息往往都是以明文的方式配置到yaml配置文件中的,这样有密码泄露的风险,那么有没有什么方式可以避免呢?方案当然是有的,就是对数据库密码配置的时候进行加密,然后读取的时候再…

JUnit实践教程——Java的单元测试框架

前言 大家好&#xff0c;我是chowley&#xff0c;最近在学单元测试框架——JUnit&#xff0c;写个博客记录一下&#xff01; 在软件开发中&#xff0c;单元测试是确保代码质量和稳定性的重要手段之一。JUnit作为Java领域最流行的单元测试框架&#xff0c;为开发人员提供了简单…

使用 WMI 查询安全软件信息

在这篇文章中&#xff0c;我们将详细介绍如何使用 Windows Management Instrumentation (WMI) API 来查询当前计算机上安装的安全软件的基本信息。我们将分析代码的各个部分&#xff0c;并解释每个步骤所涉及的技术和原理。 一、什么是 WMI&#xff1f; WMI 是 Windows Manag…

电力负荷预测 | 基于GRU门控循环单元的深度学习电力负荷预测,含预测未来(Python)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | 基于GRU门控循环单元的深度学习电力负荷预测,含预测未来(Python&

STM32DMA

文章目录 前言一、介绍部分DMA简介存储器映像DMA框图仲裁器 DMA基本结构请求映像数据对齐方式数据转运ADC扫描模式配合DMA 二、代码部分DMA数据转运连接电路代码实现ADC扫描DMA实现思路连接电路代码实现 总结函数相关 前言 介绍STM32DMA的原理以及功能&#xff0c;使用DMA配合…

目标检测 | 卷积神经网络(CNN)详细介绍及其原理详解

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度学习模型&#xff0c;主要用于图像识别和计算机视觉任务。它的设计灵感来自于生物学中视觉皮层的工作原理。CNN的核心思想是通…

车载自动化项目:Python

1. 自动化测试用的什么框架&#xff1f; 第一种&#xff1a;PythonSeleniumuittest框架 首先是拿到需求文档&#xff0c;基于这个需求去进行搭建。 用pytestrequestallure 这些第三方库进行编写自动化脚本。 举个例子一般的话整个的一个自动化的搭建是分为6层嘛&#xff1a…

redis集群配置

redis集群配置.pdf 跳转/opt/redis → cd /opt/redis 1、下载redis wget http://download.redis.io/releases/redis-6.2.1.tar.gz 2、解压 tar -xzvf redis-6.2.1.tar.gz 3、编译 cd /opt/redis/redis-6.2.1 make MALLOClibc 4、安装 make PREFIX/opt/redis/ install ⽣成…

Talk|香港中文大学(深圳)张雪遥:音频生成开源工具包Amphion的歌声转换指南

本期为TechBeat人工智能社区第570期线上Talk。 北京时间2月7日(周三)20:00&#xff0c;香港中文大学(深圳)博士生—张雪遥的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “音频生成开源工具包Amphion的歌声转换指南”&#xff0c;系统地介绍他的团…

mysql 对于null字段排序处理

最近遇到一个需求 &#xff0c;需要对一个报表的多个字段进行多字段复杂条件排序 排序字段为NULL时 Mysql对于排序字段为NULL时&#xff0c;有自身默认的排序规则&#xff0c;默认是认为null 值 是无穷小 ELECT id,script_id,last_modified,live_count,next_show FROM virtua…

红队打靶练习:PHOTOGRAPHER: 1

目录 信息收集 1、arp 2、nmap 3、nikto 目录扫描 1、gobuster 2、dirsearch WEB 信息收集 enum4linux smbclient 8000端口 CMS利用 信息收集 文件上传漏洞利用 提权 信息收集 get user.txt get flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# a…