linux串口编程简单起来可以十分简单,但是复杂起来,也可以异常复杂。因为linux串口不仅仅是个串口,它跟终端联系起来。一般串口编程,绕不开的是struct termios结构体,其定义如下:
#define NCCS 32
struct termios
{
tcflag_t c_iflag; /* input mode flags */
tcflag_t c_oflag; /* output mode flags */
tcflag_t c_cflag; /* control mode flags */
tcflag_t c_lflag; /* local mode flags */
cc_t c_line; /* line discipline */
cc_t c_cc[NCCS]; /* control characters */
speed_t c_ispeed; /* input speed */
speed_t c_ospeed; /* output speed */
#define _HAVE_STRUCT_TERMIOS_C_ISPEED 1
#define _HAVE_STRUCT_TERMIOS_C_OSPEED 1
};
以上结构体定义在/usr/include/bits/termios.h,一般我们编程的时候,引用/usr/include/termios.h即可,该头文件会自动引入bits/termios.h。
对于以上自定义类型,其定义如下:
typedef unsigned char cc_t;
typedef unsigned int speed_t;
typedef unsigned int tcflag_t;
结构中的c_iflag/c_oflag/c_cflag/c_lflag都是tcflag_t类型,本质就是个32位的无符号整数。每一个位用作特定的标志位。可想而知,光这些标志位,就多得跟饭一样。串口编程,其实也是了解熟悉这些标志位功能的过程。暂且先记录这么多,具体的位标志什么意义,待后续整理。