当前位置: 技术问答>linux和unix
UNIX环境下的串行口编程问题
来源: 互联网 发布时间:2015-01-24
本文导语: 各位高手: 我是一个UNIX下编程的菜鸟。最近因项目需要,要求在UNIX下基于Xon/Xoff协议进行串行通讯编程开发。可是,我对UNIX下的有关串口编程的C/C++语言库函数不熟悉,尤其是基于Xon/Xoff协议的编程。 恳...
各位高手:
我是一个UNIX下编程的菜鸟。最近因项目需要,要求在UNIX下基于Xon/Xoff协议进行串行通讯编程开发。可是,我对UNIX下的有关串口编程的C/C++语言库函数不熟悉,尤其是基于Xon/Xoff协议的编程。
恳请高手们指点迷津,如果有相关书籍能解决此类问题恳请报出书名,小弟先谢过了。
小陈
2003.1.26
我是一个UNIX下编程的菜鸟。最近因项目需要,要求在UNIX下基于Xon/Xoff协议进行串行通讯编程开发。可是,我对UNIX下的有关串口编程的C/C++语言库函数不熟悉,尤其是基于Xon/Xoff协议的编程。
恳请高手们指点迷津,如果有相关书籍能解决此类问题恳请报出书名,小弟先谢过了。
小陈
2003.1.26
|
以下是我写的一段代码,是两台主机通过串口进行通讯的,可以用,你按照你的项目需要改一下就行了!有什么问题:computerbooks@163.com联系!!
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define OBSIZE 10//1024 //输出缓冲区长度
#define IBSIZE 1024 //输入缓冲区长度
#define DEF_DEVICE "/dev/tty2a"
#define DEF_BAUD B19200 //波特率
char outbuf[OBSIZE]; //定义输出缓冲区数组,发送数据
int outcnt = OBSIZE;//outbuf剩余字节数
char *outptr = outbuf;
char inputbuf[IBSIZE];//定义输入缓冲区数组,接收数据
char *ibuf=inputbuf;
int tty1; //定义设备描述符
void MessageTest(char *str)
{
printf("执行到 %s 步 n",str);
}
void log_sys(char *str)
{
printf(str);
}
int set_nonblock_flag(int desc,int value)
{
int oldflags=fcntl(desc,F_GETFL,0);
if (oldflags==-1)
return -1;
if (value!=0)
oldflags|=O_NONBLOCK;
else
oldflags&=~O_NONBLOCK;
return fcntl(desc,F_SETFL,oldflags);
}
void tty_open(void)
{
struct termios term;
if ( (tty1= open(DEF_DEVICE, O_RDWR))
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define OBSIZE 10//1024 //输出缓冲区长度
#define IBSIZE 1024 //输入缓冲区长度
#define DEF_DEVICE "/dev/tty2a"
#define DEF_BAUD B19200 //波特率
char outbuf[OBSIZE]; //定义输出缓冲区数组,发送数据
int outcnt = OBSIZE;//outbuf剩余字节数
char *outptr = outbuf;
char inputbuf[IBSIZE];//定义输入缓冲区数组,接收数据
char *ibuf=inputbuf;
int tty1; //定义设备描述符
void MessageTest(char *str)
{
printf("执行到 %s 步 n",str);
}
void log_sys(char *str)
{
printf(str);
}
int set_nonblock_flag(int desc,int value)
{
int oldflags=fcntl(desc,F_GETFL,0);
if (oldflags==-1)
return -1;
if (value!=0)
oldflags|=O_NONBLOCK;
else
oldflags&=~O_NONBLOCK;
return fcntl(desc,F_SETFL,oldflags);
}
void tty_open(void)
{
struct termios term;
if ( (tty1= open(DEF_DEVICE, O_RDWR))