} }
注意tcsetattr函数中使用的标志:
TCSANOW:立即执行而不等待数据发送或者接受完成。
TCSADRAIN:等待所有数据传递完成后执行。
TCSAFLUSH:Flush input and output buffers and make the change4.设置数据位、停止位和校验位以下是几个数据位、停止位和校验位的设置方法:(以下均为1位停止位)
8位数据位、无校验位:
Opt.c_cflag &= ~PARENB;
Opt.c_cflag &= ~CSTOPB;
Opt.c_cflag &= ~CSIZE;
Opt.c_cflag |= CS8;
7位数据位、奇校验:
Opt.c_cflag |= PARENB;
Opt.c_cflag |= PARODD;
Opt.c_cflag &= ~CSTOPB;
Opt.c_cflag &= ~CSIZE;
Opt.c_cflag |= CS7;
7位数据位、偶校验:
Opt.c_cflag |= PARENB;
Opt.c_cflag &= ~PARODD;
Opt.c_cflag &= ~CSTOPB;
Opt.c_cflag &= ~CSIZE;
Opt.c_cflag |= CS7;
7位数据位、Space校验:
Opt.c_cflag &= ~PARENB;
Opt.c_cflag &= ~CSTOPB;
Opt.c_cflag &= ~CSIZE;
Opt.c_cflag |= CS7;
代码如下:int SetParity(int fd, int databits, int stopbits, int parity) {
struct termios Opt;
if(tcgetattr(fd, &Opt) != 0)
{
perror(\
return FALSE; }
Opt.c_cflag |= (CLOCAL | CREAD); //一般必设置的标志switch(databits) //设置数据位数 { case 7:
Opt.c_cflag &= ~CSIZE;
Opt.c_cflag |= CS7; break;
case 8:
Opt.c_cflag &= ~CSIZE;
Opt.c_cflag |= CS8; berak; default:
fprintf(stderr, \
return FALSE;
}switch(parity) //设置校验位 { case 'n': case 'N':