gpt4 book ai didi

c - 如何将 stdout 重定向到 COM 端口

转载 作者:行者123 更新时间:2023-11-30 17:11:30 25 4
gpt4 key购买 nike

谁能告诉我如何在 C 语言中将 stdout 重定向到 COM 端口?

在 Windows 计算机上工作。在线阅读 Microsoft 使用设备文件和设备关键字,例如控制台的 CON。他们也有一些 COM 端口,“COM1”。

但是,这样做似乎并不起作用? >> freopen( "COM5", "w", stdout );

感谢您的帮助。

cjg199

最佳答案

COMx 是串行设备,必须进行配置。在底层,putty(或 kermit 或 super 终端)会配置波特率、大小、奇偶校验和停止位。

并且 COM 设备应该以独占访问方式打开。这意味着如果 putty 已经控制了该线路,您将无法在其他程序中打开它。

所以正常用法是:

  • 打开设备(CreateFile WinAPI 函数)
  • 配置设备 (GetCommState - SetCommState)
  • 获取窗口句柄的文件描述符 (_open_osfhandle)
  • 使用 dup2 将文件描述符复制到 fd 1

之后,您应该能够写入 fd 1 的 stdout 并在串行线上获取输出。

有限的代码(没有错误处理且未经测试,因为我目前没有串行设备):

HANDLE hCom;
DCB dcb;
BOOL fSuccess;
int fd, cr;
hCom = CreateFile( TEXT("COM5"), GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // default security attributes
OPEN_EXISTING, 0, NULL);

// Build on the current configuration, and skip setting the size
// of the input and output buffers with SetupComm.

SecureZeroMemory(&dcb, sizeof(DCB));
dcb.DCBlength = sizeof(DCB);
fSuccess = GetCommState(hCom, &dcb);

// Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit - adapt to YOUR config

dcb.BaudRate = CBR_57600; // set the baud rate
dcb.ByteSize = 8; // data size, xmit, and rcv
dcb.Parity = NOPARITY; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit

fSuccess = SetCommState(hCom, &dcb);

fd = _open_osfhandle(hCom, 0);
cr = _dup2(fd, 1);

引用文献:

关于c - 如何将 stdout 重定向到 COM 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32186281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com