1. 程式人生 > >Linux read 阻塞與非阻塞讀取

Linux read 阻塞與非阻塞讀取

read函式非阻塞讀取會立即返回。
阻塞讀取通過設定也可在沒有資料時立即返回

#include <termios.h>

struct termios tio;
tio.c_cc[VTIME] = 0; // timeout in deciseconds for noncanonical read
tio.c_cc[VMIN] = 0; // minimum number of characters for noncanonical read
tcsetattr(fd, TCSANOW, &tio);

需要注意的是,如果以 O_NONBLOCK 開啟檔案/socket/FIFO,且設定 tio.c_cc[VTIME]

非0,也就是說,對非阻塞模式執行阻塞讀取,返回 -1,錯誤碼 EAGAIN,Resource temporarily unavailable。只有 tio.c_cc[VTIME] = 0,讀取時才是非阻塞的,返回0.