do_echo.c
来自「linux网络编程实例程序 socket程序 适合初学者。」· C语言 代码 · 共 57 行
C
57 行
/* do_echo.c - do_echo */#include <sys/types.h>#include <termios.h>#include <stdio.h>#include "telnet.h"char doecho; /* nonzero, if remote ECHO */extern u_char option_cmd;/*------------------------------------------------------------------------ * do_echo - handle TELNET WILL/WON'T ECHO option *------------------------------------------------------------------------ */intdo_echo(FILE *rfp, FILE *tfp, int c){ struct termios tio; static char savec[2]; int ok, tfd = fileno(tfp); if (doecho) { if (option_cmd == TCWILL) return 0; /* already doing ECHO */ } else if (option_cmd == TCWONT) return 0; /* already NOT doing ECHO */ if (ok = tcgetattr(tfd, &tio) == 0) { if (option_cmd == TCWILL) { tio.c_lflag &= ~(ECHO | ICANON); /* VMIN & VTIME are overloaded with other chars, * so save and restore them later. */ savec[0] = tio.c_cc[VMIN]; savec[1] = tio.c_cc[VTIME]; tio.c_cc[VMIN] = 1; tio.c_cc[VTIME] = 0; } else { tio.c_lflag |= (ECHO | ICANON); tio.c_cc[VMIN] = savec[0]; tio.c_cc[VTIME] = savec[1]; } ok &= tcsetattr(tfd, TCSADRAIN, &tio) == 0; } if (ok) doecho = !doecho; (void) putc(TCIAC, rfp); if (doecho) (void) putc(TCDO, rfp); else (void) putc(TCDONT, rfp); (void) putc((char)c, rfp); return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?