对于设备批量挂机测试、远程客诉处理等场景,加个串口重定向到telnet端口打印功能还是很实用的,为此封装成了独立文件,话不多说,复制进工程里直接能用。
![](https://img-blog.csdnimg.cn/img_convert/963043da78b1546f059cb3b6dfaf68a6.png)
C文件代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <netinet/tcp.h>
#include <pthread.h>
#include <errno.h>
#include "ls_output_redirect.h"
#define OUTPUT_PORT 401
static int g_redirect_running = 0;
static int g_listen_fd = -1;
static int g_client_fd = -1;
static pthread_t g_listen_pid = 0;
static pthread_t g_recv_pid = 0;
static int g_serial_fd = -1;
static int g_serial_err_fd = -1;
static int g_telnet_fd = -1;
static int g_telnet_err_fd = -1;
static int g_client_data_fd = -1;
/// @brief 输出重定向到串口
/// @param
/// @return
int __LS_OUTPUT_REDIRECT_Redirect2Serial(void)
{
if (g_client_data_fd < 0)
{
return -1;
}
if (dup2(g_serial_fd, STDOUT_FILENO) < 0)
{
printf("%s %d: g_serial_fd dup2 STDOUT_FILENO failed\n", __func__, __LINE__);
}
if (dup2(g_serial_err_fd, STDERR_FILENO) < 0)
{
printf("%s %d: g_serial_fd dup2 STDOUT_FILENO failed\n", __func__, __LINE__);
}
close(g_client_data_fd);
close(g_serial_fd);
close(g_serial_err_fd);
g_client_data_fd = -1;
g_serial_fd = -1;
return 0;
}
/// @brief