Hi guys
I'm trying to connect to a CISCO router using termios. I solved most of the problems with your helps in this topic: http://forums.freebsd.org/showthread.php?t=38302
There is just one problem. This is whole code:
The problem is that I have to add
(at least) after
in readOut function otherwise the output would not be what I expect. Without this usleep command, every character I type, the output is shown with the next character.
Any suggestions?
I'm trying to connect to a CISCO router using termios. I solved most of the problems with your helps in this topic: http://forums.freebsd.org/showthread.php?t=38302
There is just one problem. This is whole code:
Code:
int mainfd=0;
char ch[2] = {NULL};
void *writeIn(void *)
{
char temp;
while(1)
{
temp = getchar();
ch[0] = temp; ch[1] = '\0';
if(temp == '~')
{
printf("connection closed.\r\n");
close(mainfd);
pthread_exit(NULL);
}
check=write(mainfd, ch, 1);
ch[0]='\0';
}
}
void *readOut(void *)
{
char outputbuffer[10000]= {0};
while(1)
{
outputbuffer[0]='\0';
int charnumber=read(mainfd, &outputbuffer, sizeof(outputbuffer));
outputbuffer[charnumber] = '\0';
printf("%s",outputbuffer);
outputbuffer[0] = '\0';
}
}
int main(int argc,char *argv[])
{
//////////////////
struct termios old = {0};
if (tcgetattr(0, &old) < 0)
perror("tcsetattr()");
old.c_lflag &= ~ICANON;
old.c_lflag &= ~ECHO;
old.c_cc[VMIN] = 1;
old.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSANOW, &old) < 0)
perror("tcsetattr ICANON");
//////////////////
struct termios options;
static int portnum=atoi(argv[1]);
mainfd = open_port(portnum);
fcntl(mainfd, F_SETFL, FNDELAY);
tcgetattr(mainfd, &options);
cfsetspeed(&options, speed);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag |= CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_cflag &= ~CRTSCTS;
options.c_iflag &= ~(ISTRIP|ICRNL);
options.c_oflag &= ~OPOST;
options.c_lflag &= ~(ICANON|ISIG|IEXTEN|ECHO);
options.c_cc[VMIN] = 1;
options.c_cc[VTIME] = 0;
//
tcsetattr(mainfd, TCSAFLUSH, &options);
pthread_t threads[2];
pthread_create(&threads[0], NULL, writeIn, NULL);
pthread_create(&threads[1], NULL, readOut, NULL);
pthread_exit(NULL);
}
Code:
usleep(70000)
Code:
check=write(mainfd, ch, 1);
Any suggestions?