当前位置: 技术问答>linux和unix
虚拟机上串口程序数不到数据
来源: 互联网 发布时间:2016-02-28
本文导语: 最近要做个LINUX下串口控制的程序,对LINUX不熟悉,参看了Serial Programming HOWTO以后,在自己机子上实验了上面的程序,发现读不到数据,从网上DOWN了别人的代码还是读不到。一到读数据的时候就会阻塞。我是在WINXP下用的虚...
最近要做个LINUX下串口控制的程序,对LINUX不熟悉,参看了Serial Programming HOWTO以后,在自己机子上实验了上面的程序,发现读不到数据,从网上DOWN了别人的代码还是读不到。一到读数据的时候就会阻塞。我是在WINXP下用的虚拟机虚拟REDHAT 9.0,因为只有一个串口,所以我是把2 3脚对接来做实验的。另外我有台56K的外猫,在WIN下可以被识别,但是到LINUX下我用minicom 设置了波特率,数据位长以后minicom 并没有显示OK,也没有MODEM的初始数据。LINUX下,串口是不是要被设置才能用?或者是因为别的什么错误,有人说过是板子上加载了串口终端程序把数据拿走了,OPEN里的NOCTTY不就是取消这个的么?
下面是Serial Programming HOWTO中的例子,里面的write是我加上去的,我机子上读不到数据。
#include
#include
#include
#include
#include
#define BAUDRATE B38400
// 定义您所需要的串口号
#define MODEMDEVICE "/dev/ttyS1"
#define _POSIX_SOURCE 1 /*POSIX compliant source POSIX系统兼容*/
#define FALSE 0
#define TRUE 1
volatile int STOP=FALSE;
main() {
int fd,c, res;
struct termios oldtio,newtio;
char buf[255];
int n;
开启设备用于读写,但是不要以控制 tty 的模式,因为我们并不希望在发送 Ctrl-C
后结束此进程
*/
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );
if (fd