首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将proc/uptime转换为DD:HH:MM:SS

将proc/uptime转换为DD:HH:MM:SS
EN

Stack Overflow用户
提问于 2013-10-06 17:09:06
回答 1查看 3.5K关注 0票数 1

我已经读取了/proc/uptime的值(这是上次引导后的秒数),我正在尝试将其转换为: DD:HH:MM:SS。我不断地得到这样的错误:“作为赋值的左操作数所需的lvalue:*

这是我的密码:

代码语言:javascript
复制
/**
* Method Retrieves Time Since System Was Last Booted [dd:hh:mm:ss]
*/
int kerstat_get_boot_info(sys_uptime_info *s)
{
    /* Initialize Values To Zero's */
    memset(s, 0, sizeof(sys_uptime_info));

    /* Open File & Test For Failure */
    FILE *fp = fopen("/proc/uptime", "r");
    if(!fp) { return -1; }

    /* Intilaize Variables */
    char buf[256];
    size_t bytes_read;

    /* Read Entire File Into Buffer */
    bytes_read = fread(buf, 1, sizeof(buf), fp);

    /* Close File */
    fclose(fp);

    /* Test If Read Failed Or If Buffer Isn't Big Enough */
    if(bytes_read == 0 || bytes_read == sizeof(buf))
        return -1;

    /* Null Terminate Text */
    buf[bytes_read] = '\0';

    sscanf(buf, "%d", &s->boot_time);

    &s->t_days = s->boot_time/60/60/24;
    &s->t_hours = s->boot_time/60/60%24;
    &s->t_minutes = s->boot_time/60%60;
    &s->t_seconds = s->boot_time%60;
}

我的结构是这样的:

代码语言:javascript
复制
typedef struct {

    /* Amount of Time Since Last Boot [dd:hh:mm:ss] */
    /* Time When System Was Last Booted */
    int boot_time;
    int t_days;
    int t_hours;
    int t_minutes;
    int t_seconds;

} sys_uptime_info;

我不喜欢使用int,因为在这种情况下没有意义.我尝试过double和float,但是当我这样做时,我很难从buf读取值到boot_time。非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-06 17:33:03

这是你的问题

代码语言:javascript
复制
&s->t_days = s->boot_time/60/60/24;
&s->t_hours = s->boot_time/60/60%24;
&s->t_minutes = s->boot_time/60%60;
&s->t_seconds = s->boot_time%60;

变到

代码语言:javascript
复制
s->t_days = s->boot_time/60/60/24;
s->t_hours = s->boot_time/60/60%24;
s->t_minutes = s->boot_time/60%60;
s->t_seconds = s->boot_time%60;

当您看到错误:“作为赋值的左操作数所需的lvalue时,首先要检查的是每个赋值的左手侧。lvalue应该始终解析为内存地址。变量名称是lvalue,可以将其比作对象。s->t_day是一个可分配值的lvalue,它可以被分配为一个不相同的值&s->t_days.lvalue,因为它们可以出现在分配的左边。rvalue是可以出现在右边的值。在这种情况下,赋值操作符的左边有一个rvalue。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19211518

复制
相关文章

相似问题

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