当前位置: 首页 > 知识库问答 >
问题:

串行端口通信,write()出现问题

乔望
2023-03-14

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

 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);

有人知道为什么会这样吗?我尝试过在fd上执行读写操作时使用互斥,但这似乎没有什么不同。如果另一个线程正在从端口运行/读取,这似乎也无关紧要。欢迎任何意见或建议,谢谢

共有1个答案

卢开济
2023-03-14

如果我要从一个高层次来解决您的问题,我会实现一个基本的fork服务器模型,其中主线程与您的设计保持相同(通过串行监听输入)。一旦它有了一个新的消息,叉一个新的进程来做你的处理,然后回送答复。

看看Steven的UNIX网络编程,这是关于UNIX套接字编程的事实上的圣经。

 类似资料:
  • 问题 你想通过串行端口读写数据,典型场景就是和一些硬件设备打交道(比如一个机器人或传感器)。 解决方案 尽管你可以通过使用Python内置的I/O模块来完成这个任务,但对于串行通信最好的选择是使用 pySerial包 。 这个包的使用非常简单,先安装pySerial,使用类似下面这样的代码就能很容易的打开一个串行端口: import serial ser = serial.Serial('/dev

  • 通过serial接口可以使Chrome应用进行串口通信。使用serial接口需要在Manifest中声明serial权限: "permissions": [ "serial" ] 本章内容参考自https://crxdoc-zh.appspot.com/apps/serial。

  • 本文向大家介绍C#串口通信实现方法,包括了C#串口通信实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#串口通信实现方法。分享给大家供大家参考。具体方法如下: 通过COM1发送数据,COM2接收数据。当COM2接收完本次发送的数据后,向COM1发送信息通知COM1本次数据已发完,COM1接到通知后,再发下一段数据。这样可以确保每次发送的数据都可以被正确接收。 代码如下: 辅助代码

  • 设备通过串口RX,TX和OBLOQ进行通信,因为波特率的不同,发送的数据可能会乱码或者丢包,设备通过发送这条指令,检测设备串口和OBLOQ串口是否已经正常通信。建议设备通信之前先通过这条指令检查串口连接状态。 请求方式: "|1|1|\r" 返回值: "|1|1|\r"表示已经建立串口通信 Arduino样例: softSerial.print("|1|1|\r");

  • 您好,我正在安装XAMPP,MySQL端口3306有问题。 我已使用控制面板配置我的。ini并将端口设置更改为3307,但仍显示以下错误: 22:48:55[mysql]检测到问题!22:48:55[mysql]端口3306正在被“C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe”--defauls-file="C:\Program Da

  • 我试图用python控制总共6个LED。我使用pyserial向arduino发送一些数据,但遇到了几个问题。 我遇到的第一个问题是: 根据我在arduino上编写的代码,LEDS应该在接收到的特定数据中闪烁1秒。(这稍后会在下面解释。)但是,LEDS停留在它们应该闪烁的秒数上。这意味着如果LEDS应该闪烁10次。LEDS保持10秒并关闭。 第二个问题是: 我在代码中输入的if条件不符合顺序。正如