免费注册 查看新帖 |

Chinaunix

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

[C] 求助:在UNIX下如何是C语言实现屏幕映射 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2008-05-04 18:00 |显示全部楼层
说实话,我是没怎么看懂你想干什么
/dev/pts

/* vi: set sw=4 ts=4: */
/*----------------------------------------------------------------------
* Mini who is used to display user name, login time,
* idle time and host name.
*
* Author: Da Chen  <dchen@ayrnetworks.com>
*
* This is a free document; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation:
*    http://www.gnu.org/copyleft/gpl.html
*
* Copyright (c) 2002 AYR Networks, Inc.
*----------------------------------------------------------------------
*/

#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <utmp.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#include <time.h>

int main(int argc, char **argv)
{
    struct utmp *ut;
    struct stat st;
    int         devlen, len;
    time_t      now, idle;

    if (argc > 1)
                exit(1);

    setutent();
    devlen = sizeof("/dev/") - 1;
    printf("USER       TTY      IDLE      FROM           HOST\n");

    while ((ut = getutent()) != NULL) {
        char name[40];

        if ((1||ut->ut_user[0]) && ut->ut_type == USER_PROCESS) {
            len = strlen(ut->ut_line);
            if (ut->ut_line[0] == '/') {
               strncpy(name, ut->ut_line, len);
               name[len] = '\0';
               strcpy(ut->ut_line, ut->ut_line + devlen);
            } else {
               strcpy(name, "/dev/");
               strncpy(name+devlen, ut->ut_line, len);
               name[devlen+len] = '\0';
            }

            printf("%-10s %-8s ", ut->ut_user, ut->ut_line);

            if (stat(name, &st) == 0) {
                now = time(NULL);
                idle = now -  st.st_atime;

                if (idle < 60)
                    printf("00:00m    ");
                else if (idle < (60 * 60))
                    printf("00:%02dm    ", (int)(idle / 60));
                else if (idle < (24 * 60 * 60))
                    printf("%02d:%02dm    ", (int)(idle / (60 * 60)),
                           (int)(idle % (60 * 60)) / 60);
                else if (idle < (24 * 60 * 60 * 365))
                    printf("%03ddays   ", (int)(idle / (24 * 60 * 60)));
                else
                    printf("%02dyears   ", (int) (idle / (24 * 60 * 60 * 365)));
            } else
                printf("%-8s  ", "?");

            printf("%-12.12s   %s\n", ctime((time_t*)&(ut->ut_tv.tv_sec)) + 4, ut->ut_host);
        }
    }
    endutent();

    return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP