Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1852763
  • 博文数量: 274
  • 博客积分: 2366
  • 博客等级: 大尉
  • 技术积分: 1880
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-22 09:37
文章分类

全部博文(274)

文章存档

2022年(1)

2020年(10)

2019年(7)

2018年(18)

2017年(26)

2016年(32)

2015年(43)

2014年(30)

2013年(44)

2012年(36)

2011年(17)

2010年(10)

分类: LINUX

2017-09-23 14:17:07

在现场调试嵌入式设备时,很多时候我们是无法连接串口查看打印信息的,只可以通过网络连接telnet登陆到设备终端,
而此时是无法查看当前运行的应用程序的打印信息的,为我们排查问题带来了一定的困难。当然,我们可以通过gdb工具
attach进程进行调试,但这种方式还是比较麻烦的。我根据gdb的原理,实现了一个快速将应用程序标准输出打印到telnet
终端的工具。代码如下:
============================================================
服务端程序
#include
#include
#include
#include
#include
#include
#include
int stdio_redirect_daemon(char * tty)
{
    int ret = -1;
    if(tty==NULL)
    {
        printf("print_redirection,parameter is null.\n");
        return -1;
    }
    close(1);
    close(2);
    ret = (int)open(tty, 1);
    if(ret<0)
    {
    printf("redirect stdout to tty error:%s.\n",strerror(errno));
    return ret;
    }
    ret = (int)open(tty, 2);
    if(ret<0)
    {
        printf("redirect stderr to tty error:%s.\n",strerror(errno));
         return ret;
    }
    fflush(NULL);
    return 0;
}


int main()
{
    char tty[32]={0};
    //从客户端指定的文件中(/tmp/cttyname)读取
    int fd=open("/tmp/cttyname",O_RDWR);
    read(fd,tty,32);
    while(1)
    {
        if(access("/tmp/cttyflag",F_OK)<0)
        {
           ;
        }
        else
        {
           stdio_redirect_daemon(tty);
        }
        sleep(1);
    }
    return 0;
}
===============================================================
ctty客户端
int main()
{
    char *tty=ttyname(1);
    char cmd[64]={0};
    strcpy(cmd,"echo ");
    strcat(cmd,tty);
    strcat(cmd, " /tmp/cttyname");
    system(cmd);
    system("touch /tmp/cttyflag");
    while(1)
    {
        sleep(1);
    }
    return 0;
}

服务端需要嵌入到应用程序中。客户端单独编译后部署到设备中,当登陆到设备后,运行客户端,即可实时
查看到当前应用程序在标准终端的输出。



阅读(1801) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~