簡體   English   中英

將stdin設置為C中的文件時如何從鍵盤讀取

[英]How to read from keyboard when stdin is set to a file in C

我認為這很簡單,但對我來說顯然不是!

我有一個控制台應用程序。 我需要從鍵盤讀取輸入,但是stdin已被重定向到文件。 那么,如何創建指向可與fgets等配合使用的鍵盤流的FILE-Handle?

我發現ttyname(0)似乎是我在POSIX環境中需要的東西,而我在這里沒有。 我在帶有標准Visual Studio編譯器的Windows系統中。

有任何想法嗎? 先感謝您。

在這里擺脫DOS編程的黑暗時光:嘗試打開保留字“ CON:”(控制台)。 希望它將在Windows中以相同的方式打開。 可能需要也可能不需要冒號。 “ dir> con:”和“ dir> con”都仍在命令提示符下工作。

另外,請確保在輸出句柄上使用setbuf()系列中的某些內容以避免緩沖...本來不應該緩沖終端I / O,但可以肯定地說,這不會有任何傷害。

同樣,不確定,但是如果您似乎在用一個句柄同時進行輸入和輸出時遇到麻煩,我懷疑打開單獨的FILE *conin, *conout用於輸出和一個用於輸入可能會有所幫助。

沒有簡單/便攜式的方法來判斷鍵盤是否存在(您的應用程序可能正在通過串行端口,telnet會話或其他任何方式從終端仿真器運行)。 如果確實存在一個鍵盤(包括觸摸屏上的鍵盤圖片),則您無法真正判斷出擊鍵在進入您的應用程序之前需要經過多少層軟件(例如,擊鍵可能來自某個鍵盤)。鍵盤驅動程序到輸入法編輯器,GUI到應用程序的外殼)。 這意味着嘗試直接從鍵盤驅動程序或其他工具獲取擊鍵是一個壞主意,幾乎在所有情況下都會失敗。

解決問題的最佳方法是首先找出導致STDIN重定向的是哪一系列設計故障。

例如; 也許應用程序應該具有命令行選項才能從文件中讀取一些數據; 這樣應用程序就可以從文件中獲取一些數據,並從STDIN中獲取一些數據(如果不存在命令行選項,則可以從STDIN中獲取所有數據)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM