Serial-Port
知道串列埠上的 write() 何時完成數據傳輸
我需要將 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()
在文件描述符上使用。