- 论坛徽章:
- 0
|
我在的那个农行用的系统是SUSE LINUX Enterprise Server 9 (i586) - Kernel 2.6.5-7.244-smp版本。农行系统外挂调用我的程序。
现在情况是这样,我写的程序有个函数是读取键盘,用了read函数和阻塞机制。农行柜员用的是哑终端,我的程序在SCO下可正常使用,通过telnet也可正常使用。但就是在哑终端下我那个读取键盘函数的阻塞机制没起作用,本来应该是等待我键入任意个数据,但却是没有等待直接就过去了,通过stty -a < /dev/终端号 查看,start和stop的值都已经变成<undef>。 stdin好象一直在读取数据,怎么都停不下。(还有就是哑终端的speed是115200,我的netterm是9600,这个关系可能不大)
下面是主要代码
。。。
while(cnt=read(0, buff, 1), cnt==-1 )
{
switch(errno)
{
case EINTR:
break;
default :
exit(-1);
}
}
while(retval=ioctl(0, TCGETA, &termbuff),retval==-1 )
{
switch(errno)
{
case EINTR:break;
default :
exit(-1);
}
}
memcpy(&termsave, &termbuff, sizeof(struct termio));/*备份*/
fflush(stdout) ;
/* 设置标准输入非阻塞方式 */
termbuff.c_cc[VMIN] = 0 ;
termbuff.c_cc[VTIME] = 0 ;
while(retval=ioctl(0, TCSETA, &termbuff),retval==-1 )
{
switch(errno)
{
case EINTR:
break;
default :
exit(-1);
}
}
while(cnt=read(0, buff, 2), cnt==-1 )
{
switch(errno)
{
case EINTR:
break;
default :
exit(-1);
}
}
while(retval=ioctl(0, TCSETA, &termsave),retval==-1 )
{
switch(errno)
{
case EINTR:
break;
default :
exit(-1);
}
}
。。。 |
|