我需要将 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()
在文件描述符上。