我需要将 IO 引脚值与从用户空间写入串行端口同步(因为我还不能从内核空间做到这一点 - 请参阅我的另一个问题)。我的代码(省略错误检查)如下:
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()
在数据实际传输到网络之前很久就返回了。
这里有希望吗?
对于
tty
设备,您必须tcdrain()
在文件描述符上使用。