首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在输出“`uptime`”之前只有一个空格?

为什么在输出“`uptime`”之前只有一个空格?
EN

Unix & Linux用户
提问于 2019-03-21 22:20:32
回答 3查看 247关注 0票数 0

也许是一个微不足道的问题,但我发现自己需要从uptime的输出中去掉领先的空间,这让我想知道为什么会有这样的结果。

Debian拉伸EC2实例中的一个示例:

代码语言:javascript
复制
admin@ip-88-88-88-88:~$ uptime
 22:14:50 up 7 min,  1 user,  load average: 1.61, 1.21, 0.60
admin@ip-88-88-88-88:~$

我以为可能是垫子,但为什么?三位数的时钟时间?

EN

回答 3

Unix & Linux用户

发布于 2019-03-21 22:39:16

因为代码显式地将其放在那里:

代码语言:javascript
复制
pos = sprintf(buf, " %02d:%02d:%02d ",
  realtime->tm_hour, realtime->tm_min, realtime->tm_sec);

来自uptime包的procps可执行文件(例如,Ubuntu上的) 调用函数称为print_uptime()。此函数位于proc/whattime.c中的procps源中。该函数只输出一个由sprint_uptime()在同一个C源文件中构建的字符串,该源文件构建一个接一个的输出字符串。

添加到字符串中的第一个位具有一个初始空间,如上面所示。

至少2002年以来,这个空间就一直存在于uptimeprocps实现中。

请注意,uptime -p没有输出空格:

代码语言:javascript
复制
$ uptime -p
up 8 weeks, 8 hours, 41 minutes

$ uptime --version
uptime from procps-ng 3.3.12

作为maxxvw注意到,GNU版本的实用程序使用类似的输出。

BSD系统上的uptime实用程序不遵循相同的输出格式:

代码语言:javascript
复制
$ uptime
11:56PM  up 23:58, 1 user, load averages: 0.04, 0.02, 0.00
票数 2
EN

Unix & Linux用户

发布于 2019-03-22 00:00:39

现在的GNU/Linux版本的正常运行时间可能正试图与1980年年起旧的BSD正常运行时间兼容,后者使用%3d格式打印时间的小时部分(尽管这个值永远不超过24位,2位数)。同样的功能用于打印当前的每日时间和系统正常运行时间.

代码语言:javascript
复制
if (tim >= 60) {
    printf("%3d:", tim/60);
    didhrs++;
} else {
    printf("    ");
}
tim %= 60;
if (tim > 0 || didhrs) {
    printf(didhrs&&tim<10 ? "%02d" : "%2d", tim);
} else {
    printf("  ");
}

它将零值打印为空格序列(而不是什么都不打印)这一事实可能表明,代码是从需要精确列定位的另一个程序中提取的。

票数 2
EN

Unix & Linux用户

发布于 2019-03-21 22:54:09

Coreutils源代码在这里:https://github.com/coreutils/coreutils/blob/master/src/uptime.c

正如您所看到的,正如作者决定打印的那样,在当前时间之前有一个空格,在正常运行时间之后有两个空格,用户周围没有连接,加载平均值之前有两个空格:

代码语言:javascript
复制
fprintftime (stdout, _(" %H:%M:%S  "), tmn, 0, 0);

printf (_("up  %2d:%02d,  "), uphours, upmins);

printf (ngettext ("%lu user", "%lu users", select_plural (entries)),

printf (_(",  load average: %.2f"), avg[0]);
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/507831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档