1 open( 返回int 类型) 功能:用于打开或创建文件
基本形式: open( “/dev/ttyUSB0”, O_RDWR|O_NOCTTY|O_NDELAY);
O_RDONLY只读模式 O_WRONLY只写模式 O_RDWR读写模式(必选一个)
O_EXCL如果要创建的文件已存在,则返回 -1,并且修改 errno 的值
O_TRUNC如果文件存在,并且以只写/读写方式打开,则清空文件全部内容
O_NOCTTY如果路径名指向终端设备,不要把这个设备用作控制终端
对于串口的打开操作,必须使用O_NOCTTY参数,它表示打开的是一个终端设备,程序不会成为该端口的控制终端。 如果不使用此标志,任务的一个输入(比如键盘终止信号等)都会影响进程。
O_NONBLOCK如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式(nonblocking mode)
O_DSYNC等待物理 I/O 结束后再 write。在不影响读取新写入的数据的前提下,不等待文件属性更新。
O_RSYNC读(read)等待所有写入同一区域的写操作完成后再进行
O_SYNC等待物理 I/O 结束后再 write,包括更新文件属性的 I/O
O_NDELAY表示不关心DCD信号所处的状态(端口的另一端是否激活或者停止)
2 fcntl 功能:根据文件描述词来操作文件的特性,返回-1代表出错
int fcntl(int fd,int cmd,long arg);
i nt fcntl(int fd,int cmd,struct flock *lock);
2. 获得/设置文件描述符标记(cmd=F_GETFD或F_SETFD).
3. 获得/设置文件状态标记(cmd=F_GETFL或F_SETFL).
4. 获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN).
5. 获得/设置记录锁(cmd=F_GETLK , F_SETLK或F_SETLKW).
CLOCAL 含义为忽略所有调制解调器的状态行,这个目的是为了保证程序不会占用串口。
CREAD 代表启用字符接收器,目的是是的能够从串口中读取输入的数据。
CS5/6/7/8 表示发送或接收字符时使用5/6/7/8比特。
BRKINT: 当在输入行中检测到一个终止状态时,产生一个中断。
5 tcgetattr可以初始化一个终端对应的termios结构
int tcgetattr(int fd, struct termios *termios_p);
int tcsetattr(int fd , int actions , const struct termios *termios_h);
TCSAFLUSH:等当前的输出完成之后,再对值进行修改,但丢弃还未从read调用返回的当前的可用的任何输入。
6 tcflush 用于清空中端为完成的输入/输出请求及数据
int tcflush(int fd, int queue_selector);
struct termios options, newstate;
char * buf = new char[8];//分配内存空间
fd = open(/dev/ttyUSB0, O_RDWR|O_NONBLOCK|O_NOCTTY|O_NDELAY); //打开串口
if(fcntl(fd, F_SETFL, 0) < 0 ) //改为阻塞模式
cfsetispeed(&options, B115200);
cfsetospeed(&options, B115200);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB; //设置无奇偶校验位
options.c_cflag &= ~CSTOPB; //设置停止位1
options.c_cflag |= CS8; //设置数据位
options.c_cc[VTIME] = 0; //阻塞模式的设置 TIME值
options.c_cc[VMIN] = 1; //MIN值
tcsetattr(fd, TCSANOW, &options);//初始化termios
wr_num = write(fd, buf, sizeof(buf));