C Linux插入回车换行符而不是换行符

C Linux插入回车换行符而不是换行符,c,linux,C,Linux,我正在嵌入式linux系统中通过UART接口编写ASCII命令 首先,我用笔记本电脑测试了代码。嵌入式平台和笔记本电脑共享一个ftdi usb加密狗。这两个平台上的代码应该是相同的(我认为) 我正在创建一个字符串并像这样发送它 char cmd[MAX_STR_LEN]; sprintf(cmd,"r %02x %02x\n",chipAddr,naddr); ssize_t bytes_tx = write(fd, (char *)cmd, strlen(cmd)); if (bytes_tx

我正在嵌入式linux系统中通过UART接口编写ASCII命令

首先,我用笔记本电脑测试了代码。嵌入式平台和笔记本电脑共享一个ftdi usb加密狗。这两个平台上的代码应该是相同的(我认为)

我正在创建一个字符串并像这样发送它

char cmd[MAX_STR_LEN];
sprintf(cmd,"r %02x %02x\n",chipAddr,naddr);
ssize_t bytes_tx = write(fd, (char *)cmd, strlen(cmd));
if (bytes_tx < 0){
    ERROR_PRINT("%s\n",strerror(errno));
    return -1;
}

问题在于没有正确设置termios结构标志:c_oflag

从termios文档()

它显然是在一个平台上初始化的,而不是在另一个平台上。感谢@KamilCuk和@EugeneSh。为了找到问题

Connected to /dev/ttyUSB0
strlen 8 : r 40 00

tx cmd[0] = 72 r
tx cmd[1] = 20  
tx cmd[2] = 34 4
tx cmd[3] = 30 0
tx cmd[4] = 20  
tx cmd[5] = 30 0
tx cmd[6] = 30 0
tx cmd[7] = 0a 

bytes_tx = 8
sizeof(\n) : 4
 //
 // Output flags - Turn off output processing
 //
 // no CR to NL translation, no NL to CR-NL translation,
 // no NL to CR translation, no column 0 CR suppression,
 // no Ctrl-D suppression, no fill characters, no case mapping,
 // no local output processing
 //
 // config.c_oflag &= ~(OCRNL | ONLCR | ONLRET |
 //                     ONOCR | ONOEOT| OFILL | OLCUC | OPOST);
 config.c_oflag = 0;