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

如何使用Termios在socat数据传输环路上发送字节

卢永寿
2023-03-14
$ socat -d -d pty pty
$ cat /dev/pts/0 | xxd
$ read -r line < /dev/pts/0
$ echo $line
#define BAUD_RATE B9600
#define PORT_NAME "/dev/pts/2"

/* Serial Connection Manager */
struct termios tty;
int fd;

int main(){
  /*
  O_RDWR: read/write access to serial port
  O_NOCTTY: No terminal will control the process
  O_NDELAY: Non-blocking, returns immediately
  */
  fd = open(PORT_NAME, O_RDWR | O_NOCTTY | O_NDELAY);
  printf("%s\n", PORT_NAME);
  if (fd == -1) {
    printf("Error in opening serial port\n");
    return -1;
  }
  else
    printf("Port opened successfully\n");

  tcgetattr(fd, &tty); // get current attrs of serial port
  // raw mode of terminal driver
  //cfsetispeed(&tty, BAUD_RATE);
  //cfsetospeed(&tty, BAUD_RATE);
  cfmakeraw(&tty);

  // set additional control modes
  cfsetspeed(&tty, (speed_t) BAUD_RATE);
  tty.c_cflag &= ~CSTOPB; //1 stop bit
  tty.c_cflag &= ~CRTSCTS; //disable hardware flow control
  tty.c_cflag |= CLOCAL; //ignore modem control lines
  tty.c_cflag |= CREAD; //enable receiver

  if((tcsetattr(fd, TCSANOW, &tty)) != 0){
    printf("Error in setting attributes\n");
    close(fd);
    return -1;
  }
  else
    printf("BaudRate = %d\nStopBits = 1\nParity = Odd\n", BAUD_RATE);

  sleep(1); // wait for configuration
  tcflush(fd, TCIOFLUSH);

  char buf[3] = "abc";
  int bytes_written = write(fd, buf, 3);
  printf("Bytes written: %d", bytes_written);
  close(fd);
  return 0;
}

运行我的程序会得到以下输出:

/dev/pts/2
Port opened successfully
BaudRate = 13
StopBits = 1
Parity = Odd
Bytes written: 3

所以我知道这些字节在哪里,因为write()不会返回-1。

共有1个答案

孙永嘉
2023-03-14

您的代码与真实和虚拟的串行端口都很好。

您需要注意socat输出:

$ socat -d -d pty pty
2019/07/18 07:55:45 socat[8144] N PTY is /dev/pts/2
2019/07/18 07:55:45 socat[8144] N PTY is /dev/pts/3
2019/07/18 07:55:45 socat[8144] N starting data transfer loop with FDs [5,5] and [7,7]

然后侦听对的第一个端口:

$ cat /dev/pts/2
$ minicom -D /dev/pts/2 -b 9600
 类似资料:
  • 我尝试用Alamofire上传数据 问题是:若我尝试从项目上传图像,它工作正常,但若我尝试上传zip目录,我得到了错误和超时异常 这是我的代码,它产生超时异常 这是一段运行良好的代码 我试图将Data()传递给我还试图传递对zip-dit的引用以上传请求,我还尝试了

  • 我有一个HTML表单,输入文本字段,最后将图像文件上传到服务器。(HTML文件: 但是我无法上传文件,但可以看到数据库中的文本存档值。我试图上传图像文件到一个文件夹使用getimagesize($_FILES['filename']['tmp_name']和move_uploaded_file()从临时文件夹移动到特定的文件夹。 FireHP将警告消息显示为:getimagesize()[func

  • 问题内容: 我想知道是否可以使用Node.js将数据从服务器流式传输到客户端。我想将单个AJAX请求发布到Node.js,然后将连接保持打开状态并将数据连续流式传输到客户端。客户端将收到此流并不断更新页面。 更新: 更新-我无法使其正常工作。在你打电话之前不发送。我建立了一个示例程序来实现此目的: Node.js: HTML: 使用这种方法,我打电话之前什么都没拿回来。这是否可能,或者我应该使用长

  • 我正在使用ng文件上传将JPG文件上传到我的S3桶。 我还尝试了以下方法(在上面的代码中) 我已将自定义元数据作为 此外,S3上Bucket权限下的CORS配置是 以上代码和设置正常工作,JPG文件已成功上载,但不知何故未设置自定义元数据值。 成功上传后,我调用Lambda函数来调整JPG的大小,并将其存储在一个单独的bucket中。即使这部分工作正常,但我无法读取Lambda函数中的自定义元数据

  • 当我点击它时,它会显示模态弹出 我想做的是以某种方式获取内容,显示使用用户编辑。我知道我可以在href上使用javascript设置一些变量,但我想知道是否有更好的方法。

  • 问题内容: 我正在尝试使用j查询$ .ajax方法向我的php脚本发送多个数据,但是当我连接多个数据时我只能传递单个数据我的php脚本tat中出现未定义的索引错误,意味着发出了ajax请求,但没有数据发送,我需要知道如何格式化多个数据以依次将其发送到名称为vale对的处理脚本中,这是我写的 问题答案: 您可以创建一个键/值对的对象,jQuery将为您完成其余工作: 这样,数据将被自动正确编码。如果