免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-03 21:19 |只看该作者 |倒序浏览
如题。

在UNIX环境下,如何用C语言实现,在本机上的所有操作回显,能实时映射到其他一台或多台终端上。

当然本机也要回显,SHELL操作也要回显,终端不要求登录。

也就是让一台或多台终端能看到本机上的所有操作。

请高手赐教!!给个编程思路或函数库什么的。

感激万分。先谢了。

论坛徽章:
0
2 [报告]
发表于 2008-05-04 09:15 |只看该作者
是否可以考虑一下wall命令的实现方式

论坛徽章:
0
3 [报告]
发表于 2008-05-04 09:29 |只看该作者
/dev/pts/

论坛徽章:
0
4 [报告]
发表于 2008-05-04 11:36 |只看该作者
回楼上两位,能稍详细点吗?

我好像还找不到教程这类的东西。麻烦了。

论坛徽章:
0
5 [报告]
发表于 2008-05-04 16:25 |只看该作者
高人呢?真心赐教,还望不吝解答。

论坛徽章:
0
6 [报告]
发表于 2008-05-04 16:26 |只看该作者
man tty

论坛徽章:
0
7 [报告]
发表于 2008-05-04 17:42 |只看该作者
楼上的版主做过不?单单MAN好像还不够呀。

论坛徽章:
0
8 [报告]
发表于 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;
}

论坛徽章:
0
9 [报告]
发表于 2008-05-04 19:29 |只看该作者
事情是这样的。

最近我想提高C水平。记得当年在接受培训的时候,老师在上面讲时,他能将他的屏幕实时的映射到我们所有的老式终端上,包括各种unix命令和应用程序,让我们看的一清二楚。印象很深。

可以肯定,不是用wall这类的命令,是他一个自编的小程序。

现在我想知道,这是如何实现的。

楼上的,现在你能明白吗?

论坛徽章:
0
10 [报告]
发表于 2008-05-04 19:34 |只看该作者
补充一下:

老师是在主机上操作的,我们用终端。应用程序是指业务程序。他的命令录入和系统回显,都映射到我们所有的终端上,就好像我们自己在操作一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP