#include <stdio.h>
#include
"time.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
int main()
{
struct termios opt;
int fd=-1;
int nread;
char buf[1024];
fd=open(
"/dev/ttyS3" ,O_RDONLY |O_NONBLOCK);
if(fd==-1) { printf(
"open /dev/ttyS3 error\n"); }
tcgetattr(fd,&opt);
//獲取終端屬性到opt
tcflush(fd,TCIOFLUSH);
//同時刷新收到的數據可是不讀,刷新寫入的數據可是不傳送
cfsetispeed(&opt, B9600);
//設置輸入波特率
cfsetospeed(&opt, B9600);
//設置輸出波特率
opt.c_cflag&=~CSIZE;
//(不用 )字符長度掩碼。取值爲 CS5, CS6, CS7, 或 CS8。
opt.c_cflag |=CS8;
//取值爲CS8
opt.c_cflag &= ~PARENB;
//(不用 )容許輸出產生奇偶信息以及輸入的奇偶校驗。
opt.c_iflag &= ~INPCK;
//(不用 )啓用輸入奇偶檢測。
opt.c_cflag &= ~CSTOPB;
//(不用 )設置兩個中止位,而不是一個
opt.c_cflag &= ~CRTSCTS;
//(不用 )硬件流控
opt.c_cc[VTIME] = 150;
//非 canonical 模式讀時的延時,以十分之一秒爲單位
opt.c_cc[VMIN] = 0;
//非 canonical 模式讀的最小字符數
opt.c_lflag &= ~(ICANON | ECHO) ;
//(不用 )啓用標準模式 (canonical mode)容許使用
//特殊字符 EOF, EOL, EOL2,
ERASE, KILL, LNEXT, REPRINT,
//和 WERASE,以及按行的緩衝。
//(不用 )回顯輸入字符。
tcflush(fd,TCIOFLUSH);
tcsetattr(fd,TCSANOW,&opt);
//改變當即發生
while(1)
{
nread = read(fd,buf,1000);
//printf(
"nread=%d\n",nread);
//
if(nread !=-1 ) printf(
"%s",buf);//打印數據
sleep(2);
memset(buf,0x0,1024);
}
if(fd!=-1) close(fd);
return 0;
}