串口通信,写()问题

时间:2012-10-18 22:32:15

标签: c serial-port

我在Linux机器上用C编写了一个程序,用于读取和写入串口。 它连接到运行一些发送程序数据的模拟器的Windows XP计算机。

在我的程序中,我有2个线程,一个用于从串口读取输入并进行处理。并且该线程连接到服务器套接字并侦听已处理的数据,然后将其写回串行端口。这两个线程在执行期间都在不断循环。

我遇到的问题是使用write命令。

 void writeToPort(unsigned char* buf, int length)
 {
     int w = 0;
     if(fd > 0)
         w = write(fd, buf, length);

      printf("wrote %d bytes\n", w);
 }

我打开这样的端口

fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);

前几秒它运行正常。我已经在Windows上的超级终端中验证了我期望正确发送的字节数。但是,在某些时候write()调用将挂起。另一个输入读取线程继续,从串口读取工作正常。

有谁知道为什么会这样?每当在fd上进行读取或写入时我都尝试使用互斥锁,但这似乎没有什么区别。如果另一个线程正在从端口运行/读取它似乎也没关系。欢迎任何建议或意见,谢谢

1 个答案:

答案 0 :(得分:0)

如果我要从高级别处理你的问题,我会实现一个基本的fork服务器模型,其中主线程与你的设计保持一致(通过串口监听输入)。一旦有了新消息,请分叉一个新进程进行处理,然后回复回复...

看一下Steven's UNIX Network Programming关于Unix套接字编程的事实上的圣经。