Linux下获取代码文件名、代码所在行数及日期时间的C程序实现

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一、概述 在实际的软件开发项目中,为了方便排查程序问题,要求在日志文件中输出日志信息所在的程序文件名及日志代码所在的行数。

一、概述
在实际的软件开发项目中,为了方便排查程序问题,要求在日志文件中输出日志信息所在的程序文件名及日志代码所在的行数。此外,某些软件还会要求将程序启动时的日期时间输出到日志文件中,方便跟踪软件运行状况。
本文介绍了Linux下获取代码文件名、代码行数及日期时间的C代码实现。

二、几个标准预定义宏简介
在C语言中,使用几个标准预定义宏,便可轻松实现获取代码文件名、代码行数及日期时间的功能。
这几个宏的定义如下(注意:前后都是两条连续的下划线):

__FILE__:在源文件中插入当前源文件名。
__FUNCTION__:在源文件中插入当前源代码所在函数名。
__LINE__:在源代码中插入当前源代码行号。
__DATE__:在源文件中插入当前的编译日期。
__TIME__:在源文件中插入当前编译时间。

三、C代码实现

/**********************************************************************
* 版权所有 (C)2015, Zhou Zhaoxiong。
*
* 文件名称:FileNameAndLine.c
* 文件标识:无
* 内容摘要:打印输出信息所在的代码文件名、所在的行数及日期时间
* 其它说明:无
* 当前版本:V1.0
* 作    者:Zhou Zhaoxiong
* 完成日期:20150511
*
**********************************************************************/
#include <stdio.h>

// 重定义数据类型
typedef signed   int    INT32;
typedef unsigned char   UINT8;

/**********************************************************************
* 功能描述:主函数
* 输入参数:无
* 输出参数:无
* 返 回 值:无
* 其它说明:无
* 修改日期        版本号     修改人            修改内容
* -------------------------------------------------------------------
* 20150511        V1.0     Zhou Zhaoxiong        创建
***********************************************************************/
INT32 main()
{
    UINT8 szContentBuf[256] = {0};

    snprintf(szContentBuf, sizeof(szContentBuf)-1, "This log is in [%s], [%s], and lineno is [%d], currenttime is [%s %s].\n", __FILE__, __FUNCTION__, __LINE__, __DATE__, __TIME__);
    printf(szContentBuf);   // 将消息输出

    return 0; 
}

四、文件编译及运行结果
在Linux下执行“gcc -g -o FileNameAndLine FileNameAndLine.c”命令,生成“FileNameAndLine”。然后再执行“FileNameAndLine”命令,程序运行结果如下:

[zhou|/home/zhou/zhouzx/test] gcc -g -o FileNameAndLine FileNameAndLine.c
[zhou|/home/zhou/zhouzx/test] FileNameAndLine
This log is in [FileNameAndLine.c], [main], and lineno is [34], currenttime is [May 18 2015 10:35:55].

本人微信公众号:zhouzxi,请扫描以下二维码:
这里写图片描述

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
245 6
|
2月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
3月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
94 1
|
3月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
458 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
4月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
56 5
|
4月前
|
Java Linux Python
Linux环境下 代码java调用python出错
Linux环境下 代码java调用python出错
77 4
|
4月前
|
Linux Shell
10-10|linux命令查询 关键字在文本中出现的行数
10-10|linux命令查询 关键字在文本中出现的行数
|
4月前
|
Linux Shell Python
9-7|salt代码在linux机子那个目录
9-7|salt代码在linux机子那个目录
|
4月前
|
Linux 开发者 Python
从Windows到Linux,Python系统调用如何让代码飞翔🚀
【9月更文挑战第10天】在编程领域,跨越不同操作系统的障碍是常见挑战。Python凭借其“编写一次,到处运行”的理念,显著简化了这一过程。通过os、subprocess、shutil等标准库模块,Python提供了统一的接口,自动处理底层差异,使代码在Windows和Linux上无缝运行。例如,`open`函数在不同系统中以相同方式操作文件,而`subprocess`模块则能一致地执行系统命令。此外,第三方库如psutil进一步增强了跨平台能力,使开发者能够轻松编写高效且易维护的代码。借助Python的强大系统调用功能,跨平台编程变得简单高效。
73 0
|
4月前
|
机器学习/深度学习 Linux 开发工具
Linux内核开发流程指南 - 5. 编写正确的代码【ChatGPT】
Linux内核开发流程指南 - 5. 编写正确的代码【ChatGPT】