了解串行端口上的 write() 何时完成数据传输

了解串行端口上的 write() 何时完成数据传输

我需要将 IO pin 值与从用户空间写入串行端口进行同步(因为我还无法从内核空间做到这一点 - 请参阅我的其他问题)。我的代码(省略错误检查)如下:

char buf[3] = {'U','U','U'};
int fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY); // supposed to be blocking
// fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_NONBLOCK); <-- makes no difference
FILE *f = fopen("/sys/class/gpio/gpio200/value", "w"); // the relevant IO

// set IO
fprintf(f, "1");
fflush(f);
// send data 
write(fd, buf, sizeof(buf));
// unset IO
fprintf(f, "0");
fflush(f);

其行为是 IO 在写入开始时快速切换为 1 并返回。换句话说,write()早在数据实际传输之前就返回了。

这里还有希望吗?

答案1

对于tty设备,您必须使用tcdrain()在文件描述符上。

相关内容