1. Telnet
    1.1 Telnet的定义
    Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
  2. SylixOS下Telnet退出异常解析
    2.1 SylixOS Telnet退出异常现象
    利用Telnet登陆到SylixOS操作系统的终端上,执行我们的应用程序,程序运行后直接关闭连接的Telent,此时在串口终端上会打印大量显示文件描述符无效的信息。如图 2.1所示。

图 2.1 无效文件描述符打印
程序打印清单程序清单 2.1所示
程序清单 2.1终端打印代码
/
函数名称: check_domain_state
功能描述: 打印数据域的状态信息
输 入 :
输 出 :
全局变量:
调用模块:
/
void check_domain_state(void) {
ec_domain_state_t ds;

ecrt_domain_state(domain1, &ds);

if (ds.working_counter != domain1_state.working_counter)
    printf("domain1: WC %u.\n", ds.working_counter);
if (ds.wc_state != domain1_state.wc_state)
    printf("domain1: State %u.\n", ds.wc_state);

domain1_state = ds;

}
/
函数名称: check_master_state
功能描述: 打印主站的状态信息
输 入 :
输 出 :
全局变量:
调用模块:
/
void check_master_state(void) {
ec_master_state_t ms;

ecrt_master_state(master, &ms);

if (ms.slaves_responding != master_state.slaves_responding)
    printf(“%u slave(s).\n”, ms.slaves_responding);
if (ms.al_states != master_state.al_states)
    printf(“AL states: 0x%02X.\n”, ms.al_states);
if (ms.link_up != master_state.link_up)
    printf(“Link is %s.\n”, ms.link_up ? “up” : “down”);

master_state = ms;

}
2.2 SylixOS Telnet退出异常解析
SylixOS下Telnet登陆后在telent运行的程序相当于它的子进程,此时运行的程序的打印会重定位到Telnet中,在关闭Telnet后其子进程打印的文件句柄失效,所以在终端会疯狂的打印文件描述符无效信息。