Serial-Port

知道串列埠上的 write() 何時完成數據傳輸

  • September 6, 2018

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

引用自:https://unix.stackexchange.com/questions/465952