[英]How to prevent stdin stream from reading data from associated file descriptor on program start?
我正在使用select()調用來檢測程序主循環中的輸入是否存在。 這使我使用原始文件描述符(0)代替了stdin。
在這種模式下工作時,我注意到我的軟件一開始偶爾會丟失大量輸入。 我懷疑stdin在程序啟動時會消耗掉其中的一些。 有沒有辦法防止這種stdin的行為或獲取整個輸入數據?
在程序啟動的那一刻,所描述的效果只能通過標准輸入上的一些數據來再現。 我的可執行文件應作為xinetd服務使用,以使其始終在開始時就具有一些輸入。
通過以下方式讀取標准輸入:
Error processInput() {
struct timeval ktimeout;
int fd=fileno(stdin);
int maxFd=fd+1;
FD_ZERO(&fdset);
FD_SET(fd, &fdset);
ktimeout.tv_sec = 0;
ktimeout.tv_usec = 1;
int selectRv=-1;
while ((selectRv=select(maxFd, &fdset, NULL, NULL, &ktimeout)) > 0) {
int left=MAX_BUFFER_SIZE-position-1;
assert(left>0);
int bytesCount=read(fd, buffer+position, left);
//Input processing goes here
}
}
不要將熟肉和生肉混合在一起。 嘗試用等效的fread()調用替換read()調用。
fileno(stdin)
很可能正在初始化stdin對象,從而使其讀取並緩沖某些輸入。 也許您已經在調用某種導致其初始化的內容(scanf(),getchar()等)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.