我在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上进行读取或写入时我都尝试使用互斥锁,但这似乎没有什么区别。如果另一个线程正在从端口运行/读取它似乎也没关系。欢迎任何建议或意见,谢谢
答案 0 :(得分:0)
如果我要从高级别处理你的问题,我会实现一个基本的fork服务器模型,其中主线程与你的设计保持一致(通过串口监听输入)。一旦有了新消息,请分叉一个新进程进行处理,然后回复回复...
看一下Steven's UNIX Network Programming关于Unix套接字编程的事实上的圣经。