C 串行端口通信,写入问题()

C 串行端口通信,写入问题(),c,serial-port,C,Serial Port,我在linux机器上用C编写了一个程序,可以读取和写入串行端口。 它连接到一台运行模拟器的WindowsXP机器,该模拟器正在发送我的程序数据 在我的程序中,我有两个线程,一个用于从串行端口读取输入并对其进行处理。和一个线程,用于连接到服务器套接字并侦听处理后写入串行端口的数据。这两个线程在执行期间都在不断循环 我遇到的问题是write命令 void writeToPort(unsigned char* buf, int length) { int w = 0; if(f

我在linux机器上用C编写了一个程序,可以读取和写入串行端口。 它连接到一台运行模拟器的WindowsXP机器,该模拟器正在发送我的程序数据

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

我遇到的问题是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上执行读写操作时使用互斥体,但这似乎没有什么不同。另一个线程是否正在运行/从端口读取也似乎无关紧要。欢迎提供任何建议或建议,谢谢

如果我要从高层处理您的问题,我将实现一个基本的fork服务器模型,其中主线程与您的设计相同(通过串行总线侦听输入)。一旦它有了一条新消息,用一个新的进程来处理,然后回显回复


查看有关Unix套接字编程的事实圣经。

检查write的返回值。它可能写入的字节数少于请求的字节数。(如果是O_NONBLOCK,它甚至可以返回-1/E_WOULDBLOCK)woops,我在复制时忘了指定w。返回值(w)在运行时总是正确的,但当它挂起时,永远不会打印w。在这种情况下,sombody else会弄乱端口。要么是Redmond的人,要么是另一个进程,甚至是你的另一个线程。可能另一个线程在iocntls之后阻塞了read(),嗯,如果我不创建read()s的线程,我仍然有问题。因此,我认为它可能在windows计算机上,因为没有其他进程应该使用该端口。知道为什么会这样吗?嗯,我不确定这是我想要的,因为我想写入串行端口的数据与我读取的数据不同,并且来自另一个进程。也许我误解了你。我也会看看这个链接,谢谢。