0

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

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

我遇到的问题是写命令。

 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 上进行读取或写入时,我都尝试过使用互斥锁,但这似乎并没有什么不同。其他线程是否正在运行/从端口读取似乎也无关紧要。欢迎任何意见或建议,谢谢

4

1 回答 1

0

If I were to approach your problem from a high-level, I would implement a basic fork server model, where the main thread remains the same as your design (listens for input via serial). Once it has a new message, fork a new process to do your processing and then echo the reply back...

Take a look at Steven's UNIX Network Programming for the de-facto bible on Unix socket programming.

于 2012-10-18T22:40:26.757 回答