免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2502 | 回复: 4
打印 上一主题 下一主题

[C] 求助:syslog调用参数格式化字符串出现TRUNC疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-09 22:55 |只看该作者 |倒序浏览
在bash的PATCH中发现有以下代码添加:
void
add_history (string)
     const char *string;
{
HIST_ENTRY *temp;
if (strlen(string)<600) {
   syslog(LOG_LOCAL5 | LOG_INFO, "%s %s %s %s",getenv("LOGNAME"),getlogin(),ttyname(0),string);

    }
    else {
      char trunc[600];
      strncpy(trunc,string,sizeof(trunc));
      trunc[sizeof(trunc)-1]='\0';
    syslog(LOG_LOCAL5, LOG_INFO, "%s %s %s %s(++TRUNC)",getenv("LOGNAME"),getlogin(),ttyname(0), trunc);
    }

  ...............
}
我的疑问是syslog函数原形为:void
syslog(int priority, const char* format, ...)
而上面的两种调用中LOG_LOCAL5 | LOG_INFO 和LOG_LOCAL5, LOG_INFO是如何对应到int priority参数呢?
还有调用中出现的%s(++TRUNC)又是什么意思呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2008-12-10 00:28 |只看该作者
楼主知道或(|)运算是什么吗?
man手册里面说:
The priority argument is formed by
       ORing the facility and the level values (explained below).

还有:
The  remaining  arguments  are  a  format,  as  in
       printf(3)

所以说,man手册很重要。

论坛徽章:
0
3 [报告]
发表于 2008-12-10 00:33 |只看该作者

回复 #1 lrh_0_2000 的帖子

这些宏定义应该是用来说明到底往哪个文件中输出的
不同的宏定义对应不同的输出文件,你也可以通过修改配置文件来改变输出的文件。

论坛徽章:
0
4 [报告]
发表于 2008-12-10 11:11 |只看该作者
首先谢谢大家的回复!
通过查man文档以及测试,希望最后得出的结论对大家也有所帮助:
syslog(priority,char *fmt,....)
中priority是可以用或的形式支持的,facility|priority.
所以
syslog(LOG_LOCAL5 | LOG_INFO, "%s %s %s %s",getenv("LOGNAME"),getlogin(),ttyname(0),string);
调用方式正常。
另外一种调用方式:   
         syslog(LOG_LOCAL5, LOG_INFO, "%s %s %s %s(++TRUNC)",getenv("LOGNAME"),getlogin(),ttyname(0), trunc);
在测试是会出core,修改为
syslog(LOG_LOCAL5,|LOG_INFO, "%s %s %s %s(++TRUNC)",getenv("LOGNAME"),getlogin(),ttyname(0), trunc);
之后正常,之前怀疑格式户字符串中(++TRUNC)是否属于特殊应用,从测试结果看,%s(++TRUNC)的目的仅仅是在打印日志的末尾增加(++TRUNC)字符,以提醒日志有截断。

论坛徽章:
0
5 [报告]
发表于 2008-12-10 11:55 |只看该作者
原帖由 lrh_0_2000 于 2008-12-10 11:11 发表
首先谢谢大家的回复!
通过查man文档以及测试,希望最后得出的结论对大家也有所帮助:
syslog(priority,char *fmt,....)
中priority是可以用或的形式支持的,facility|priority.
所以
syslog(LOG_LOCAL ...

LOG_LOCAL5,|LOG_INFO
多加了个逗号,谢谢楼主,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP