分别在Linux和Android中用C语言写系统日志

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

写程序难免需要用到调试信息,由于某些原因,有的调试信息想把它放到系统日志中去。因此今天试验了一下分别在Linux和Android中用C语言写系统 日志。首先是在Linux中尝试写系统日志,关于这方面的资料网上已经很多了,我先把我的代码贴到下面吧。 /****************************** syslog.c ***********************************/
#include<stdio.h>
#include<stdlib.h>
#include<syslog.h>
int main()
{
    int i;
   
    /************ 添加第一段错误记录 ************/   
    /*openlog函数用于打开系统日志连接,调用openlog是可选择的。如果不调用openlog,则在第一次调用syslog时,自动调用 openlog。调用openlog 使我们可以指定一个ident,以后, 此ident 将被加至每则记录消息中。ident 一般是程序的名称(例如 ,cron ,ine 等)*/
    openlog("syslog实验A--错误",LOG_CONS|LOG_PID,LOG_LOCAL0);/*openlog函数中的第1个参数为 ident,该参数常用来表示信息的来源。ident指向的字符信息会被固定地添加在每行日志的前面。第2个参数option用于指定openlog函数 和接下来调用的syslog函数的控制标志。第3个参数为facility*/
    for(i=0;i<3;i++)
        syslog(LOG_ERR,"添加实验A的第%d条错误记录。/n",i);/*第一个参数是消息的紧急级别,第二个参数是消息的格式,之后是格式对应的参数。就是printf函数一样使用。*/
    closelog();
   
    /************ 添加第二段错误记录 ************/
    openlog("syslog实验B--警告",LOG_CONS|LOG_PID,LOG_LOCAL1);
    for(i=0;i<2;i++)
        syslog(LOG_WARNING,"添加实验B的第%d条警告记录。/n",i);
    closelog();
    return 0;
}=================================================
程 序运行后终端没有什么反应,但是用tail /var/log/syslog查看的话(需要root权限),可以看到后面添加了以下五行:Mar 31 18:38:54 admin-desktop syslog实验A--错误[10369]: 添加实验A的第0条错误记录。
Mar 31 18:38:54 admin-desktop syslog实验A--错误[10369]: 添加实验A的第1条错误记录。
Mar 31 18:38:54 admin-desktop syslog实验A--错误[10369]: 添加实验A的第2条错误记录。
Mar 31 18:38:54 admin-desktop syslog实验B--警告[10369]: 添加实验B的第0条警告记录。
Mar 31 18:38:54 admin-desktop syslog实验B--警告[10369]: 添加实验B的第1条警告记录。
这方面的资料比较多,可以参看以下文章:http://book.csdn.net/bookfiles/545/10054518311.shtml
http://www.sudu.cn/info/html/edu/20060101/297778.html
http://blog.csdn.net/yulanarti/archive/2007/09/13/1783839.aspx上面程序中标为蓝色的注释也是在网上的文章中摘过来的。
========================================= 然后再进行在Android上写日志文件的实验,但是把这个程序编译到Android上,运行之后却找不到日志写到什么地方去了。Android下没有 var目录,而且用logcat查看后也发现自己的信息没有加入到日志中。后来在网上找了一下资料,又回想了源码中的一些情景,试着用了LOGD来输出信 息到日志,果然成功了。现把代码贴到下面:/********************** log.c *************************/
#include <jni.h>
#include <utils/Log.h>
int main()
{
    LOGD("调试信息!!!!!!!!!!/n");
    return 0;
}
/********************** Android.mk *************************/
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)LOCAL_SRC_FILES:= /
    log.cLOCAL_SHARED_LIBRARIES := /
    libutils /#如果没有下面这一行,将提示jni.h找不到(error: jni.h: No such file or directory)
LOCAL_C_INCLUDES := /
    $(JNI_H_INCLUDE)LOCAL_PRELINK_MODULE := falseLOCAL_MODULE:= syslog_test
include $(BUILD_EXECUTABLE)===========================
然后编译运行,使用logcat就可以看到我们写的那行信息。D/        ( 191): 调试信息!!!!!!!!!!4月1日补充:
用C语言并不是只有LOGD一种方式可以将信息写入日志,查阅android源码 /system /core/include/cutils/log.h中的代码后得知,还有其他几种基本的宏,如LOGE、LOGV、LOGI、LOGW等,它们的使用 场合是有差别的,关于这点,源码中是这样注释的。LOGV:Simplified macro to send a verbose log message using the current LOG_TAG
LOGD:Simplified macro to send a debug log message using the current LOG_TAG.
LOGI:Simplified macro to send an info log message using the current LOG_TAG.
LOGW:Simplified macro to send a warning log message using the current LOG_TAG.
LOGE:Simplified macro to send an error log message using the current LOG_TAG.可见,LOG后面的字母就是它们输出信息种类的单词的首字母。关于这几个宏的详细使用场合可参看这篇文章()。里面介绍的比较详细,是用 java语言举的例子。如果想在C语言程序中调用这几个宏,可以参考本文中的例子。对昨天写的log.c作如下修改,将5个宏都添加进去。 /********************** log.c *************************/
#include <jni.h>
#include <utils/Log.h>
int main()
{
    LOGD("调试!!!!!!!!!!/n");
    LOGE("出错!!!!!!!!!!/n");
    LOGV("详述!!!!!!!!!!/n");
    LOGI("消息!!!!!!!!!!/n");
    LOGW("警告!!!!!!!!!!/n");
    return 0;
} 编译运行后,有一个比较奇怪的现象,就是LOGV没有输出到logcat,其他四个都有输出,这个还没弄明白是为什么。 ////////////////////////// 程序运行结果(使用logcat查看) ////////////////////////////
D/        ( 193): 调试!!!!!!!!!!
E/        ( 193): 出错!!!!!!!!!!
I/        ( 193): 消息!!!!!!!!!!
W/        ( 193): 警告!!!!!!!!!!从logcat的每条信息前面的字母也可以看出,D、E、I、W分别对应的是调试、出错、消息、警告。

从C语言到Binder:系统编程核心原理与Android进程通信实战 在系统编程领域,进程间通信是构建复杂分布式系统的关键技术基础。其核心原理涉及操作系统层面的内存管理、进程隔离与数据交换机制,通过内核提供的通信原语实现不同进程间的安全高效交互。这一技术在现代操作系统架构中具有重要价值,尤其在微服务架构、系统组件解耦资源安全共享等场景下不可或缺。以Android系统为例,其采用的Binder机制便是进程间通信的典型实现,它通过一次拷贝的内存映射优化基于C++面向对象的设计模式,为应用框架提供了高性能的跨进程调用能力。理解Binder不仅需要掌握其驱动层的内存映射线程池管 阅读详情

相关推荐

安卓RAT逆向实战:从环境搭建到动态分析深度拆解AhMyth

远程访问木马(RAT)是移动安全领域常见的恶意软件类型,它通过在受控设备上建立隐蔽通道,实现远程监控与数据窃取。其核心原理在于利用系统权限与网络通信模块,在后台执行攻击者指令。理解RAT的工作机制对于构建有效的终端威胁检测与防御体系具有重要价值,尤其在安卓生态中,此类威胁常伪装成正常应用进行传播。在实战层面,逆向工程是剖析恶意软件内部逻辑的关键技术,通过静态分析与动态调试相结合,可以系统性地还原其攻击链。其中,Frida作为动态插桩框架,能够实时Hook关键函数调用,监控网络通信与数据流动;而网络抓包工具则

ckkay800264的博客 334

Android c/c++层打印log信息java层打印log信息

http://blog.csdn.net/caovae/article/details/7716014 在JNI的c文件中如果用到了#include   然后用NDK 编译的时候会提示error: utils/Log.h: No such file or directory 如果想要他的LOG功能的话 1-----修改Android.mk文件配置,添加如下语

syh63053767的专栏 3217

【通俗易懂】Windows系统安装TensorRT

NVIDIA TensorRT是一个由NVIDIA公司开发的用于深度学习推理的高性能SDK。它专门设计用于在NVIDIA GPU上进行高效的神经网络推理,能够大幅度提升深度学习模型的推理速度效率。TensorRT的主要特点包括:模型优化:TensorRT通过层融合、精度校准、动态形状等技术优化模型,减少推理时的计算量内存占用。多精度推理:支持多种精度推理,包括FP32、FP16、INT8等,以平衡性能精度。

王尼莫的博客 1552

LINUX系统以及ANDROID 平台log信息输出级别设置 [MTK]

一、LK层: 首先,在LK中,有一个对log打印级别的控制文档,其路径一般为:vendor\mediatek\proprietary\bootable\bootloader\lk\include\debug.h(以mtk平台为例) 在include\debug.h重要代码为: //下面做个判断:意思是如果makefile(相应的平台mk文件) 定义了DEBUG的值,就是用它,否则默认为2等级 //...

每一个不曾起舞的日子,都是对生命的辜负 3977

小白学Linux之C语言中如何爬出异常或将异常日志文件中

Linux中用C语言系统日志 __________________________________________________________________________________________________ Author:冀博 Time:2011/11/24 Emaile:jibo.tiger@gmail.com 声明:本人不反对别人团体转载本人文章,但请注明出处,3Q。对...

peizhiinfo 963

内核编译时提示错误error: sys/types.h: No such file or directory

问题: 在虚拟机中编译老内核linux-2.6.24,通过sudo apt-get install linux-source-2.6.24后,得到linux-source-2.6.24.tar.bz2。 解压到linux-source-2.6.24中,cd linux-source-2.6.24, 执行sudo make oldconfig,出现错误提示: error: sys/types

David_xtd的专栏 3万+

x11/extensions/XShm.h: No such file or directory 问题解决

安装了 linux 界面底层库 x11,但是没有安装扩展 extensions。安装: sudo apt-get install x11proto-xext-dev sudo apt-get install libxext-dev

u012140133的专栏 9666

LinuxAndroid中用C语言系统日志

程序难免需要用到调试信息,由于某些原因,有的调试信息想把它放到系统日志中去。因此今天试验了一下分别在LinuxAndroid中用C语言系统日志。 首先是在Linux中尝试系统日志,关于这方面的资料网上已经很多了,我先把我的代码贴到下面吧。 /****************************** syslog.c *****************************

fqx111的专栏 1519

[如何控制Log 1]分别在LinuxAndroid中用C语言系统日志

程序难免需要用到调试信息,由于某些原因,有的调试信息想把它放到系统日志中去。因此今天试验了一下分别在LinuxAndroid中用C语言系统日志。首先是在Linux中尝试系统日志,关于这方面的资料网上已经很多了,我先把我的代码贴到下面吧。 /****************************** syslog.c ***********************************/#include#include#includeint main(){    int i;    /******

aaronky2011的专栏 852

如何在安卓手机上快速搭建完整Linux桌面环境:Tiny Computer实用指南

想在安卓设备上体验完整的Linux桌面环境,但又不想折腾复杂的Termux配置吗?Tiny Computer正是为你量身打造的解决方案。这款专为安卓9以上arm64设备设计的"PC应用引擎",让你无需安装Termux就能一键运行带有桌面环境的Debian系统,特别适合中文用户使用。 ## 为什么需要Tiny Computer:解决移动设备生产力痛点 许多用户都面临这样的困境:外出时需要使用专业

gitblog_01167的博客 505

Waydroid终极指南:在Linux上原生运行Android应用的容器化方案

想要在Linux桌面环境中无缝使用Android应用吗?Waydroid为您提供了一个革命性的解决方案!这是一个基于Linux容器技术的Android系统容器,让您能够在Linux发行版上运行完整的Android环境,享受接近原生的性能表现。无论您是开发者需要测试移动应用,还是普通用户希望在Linux上使用Android专属软件,Waydroid都能完美满足您的需求。 ## 为什么选择Waydr

gitblog_00837的博客 1038

eSpeak NG 文本转语音快速上手:100+ 语言的轻量级开源引擎

eSpeak NG 是一个小巧的开源语音合成引擎,专门做文本转语音(TTS),也就是把文字读成声音。它支持 100 多种语言口音,程序加上全部语言数据只有 1.4MB 左右,树莓派、老安卓机这类低资源设备也能轻松跑起来。想给项目加语音功能,或单纯好奇机器怎么"开口",你都可以试试它。 [![eSpeak NG 文本转语音:英文元音发音图](https://raw.gitcode.com/gh_

gitblog_00570的博客 977

Android Framework | Linux 基础知识:入门指南

Linux 是一种免费、开源的操作系统,它是由芬兰程序员 Linus Torvalds 在 1991 年开发的。Linux 操作系统具有很高的自由度可定制性,广泛应用于服务器、嵌入式系统、移动设备等领域。Linux 的历史可以追溯到 1991 年,当时的 Linus Torvalds 开始着手开发一种新的操作系统内核,这个内核最初被称为“Freax”,后来改名为 Linux。随着开源运动的兴起,Linux 逐渐成为了一个庞大的开源项目,吸引了全球范围内的许多程序员用户的参与。

虎哥LoveDroid 1607

终极方案:在安卓设备上构建完整桌面环境的技术指南

你是否曾在移动设备上渴望获得完整的桌面级体验?面对安卓设备的应用生态限制,想要运行专业的桌面软件如WPS Office、CAJ Viewer或亿图图示?Tiny Computer正是为解决这一痛点而生的技术方案。作为一款为安卓9以上arm64设备设计的"PC应用引擎",它让你无需安装Termux就能在安卓设备上运行带有桌面环境的Debian系统,预装fcitx拼音输入法多种实用软件包,特别适合中

gitblog_00921的博客 1117

UE5.2安卓APK打包全攻略:从环境配置到性能优化

移动应用开发的核心环节之一是将高性能的图形应用部署到移动设备,这涉及到跨平台编译、资源优化平台适配等关键技术。其原理在于通过特定的工具链,将桌面级开发环境中的代码资源,转换为移动设备可执行的格式。这一过程的技术价值在于打破了平台壁垒,使开发者能够利用强大的引擎能力,在移动端实现接近原生的视觉交互体验。在游戏开发、AR/VR应用、高保真模拟等场景中,这种技术尤为重要。以虚幻引擎5.2(UE5.2)项目打包至安卓平台为例,其成功的关键在于精准配置JDK、Android SDK与NDK环境,并针对移动端进行

weixin_30268921的博客 470

突破Android限制:Termux补丁系统如何让Linux命令在手机上流畅运行

你是否曾在手机上安装Termux后,发现部分Linux命令无法运行或频繁崩溃?这不是Termux的缺陷,而是Android系统与GNU/Linux生态间存在的底层差异。本文将深入解析termux-packages项目的补丁系统,带你了解开发者如何通过150+精心设计的补丁文件,让超过2000个Linux软件包在移动设备上稳定工作。 ## 补丁系统架构:AndroidLinux的桥梁 Term...

gitblog_00261的博客 1236

KernelSU Next 深度解析:安卓内核级权限管理的实战指南

在安卓设备的高级权限管理领域,KernelSU Next 正以其独特的内核级实现方案重新定义 Root 工具的边界。这款基于内核的 Root 解决方案不仅提供了传统 su 权限管理功能,更重要的是通过内核层面的深度集成,为开发者技术爱好者带来了前所未有的系统控制能力。KernelSU Next 的核心价值在于其安全、稳定且高度可定制的权限管理体系,让用户能够在不牺牲系统稳定性的前提下,充分发挥安

gitblog_00352的博客 536

android 模拟crash_Android crash 收集

Android Crash在开发中,会遇到crash问题,一般来说,crash发生在java层,但是,有时候会发生在其他层面上。大致,Android Crash 大致有三类:Java uncatch exceptionANR crashNative crashJava全局异常处理通过Thread.setDefaultUncaughtExceptionHandler我们可以指定一个默认的全局异常处理...

weixin_39849254的博客 350

Android 常用 adb 命令总结

Android Debug Bridge adb 其实就是 Android Debug Bridge, Android 调试桥的缩,adb 是一个 C/S 架构的命令行工具,主要由 3 部分组成: 运行在 PC 端的 Client : 可以通过它对 Android 应用进行安装、卸载及调试 Eclipse 中的 ADT、SDK Tools 目录下的 DDMS、Monitor 等工具,都是同样...

sinat_31230641的博客 232
上一篇: android的logcat详细用法
下一篇: Android shell命令大全
coolhead007
博客等级 码龄18年 8粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值