在Unix中使用read()
系統調用讀取用戶輸入的可能方法是什麼?我們如何使用read()
來從字節讀取字節?從stdin讀取
從stdin讀取
回答
你可以做這樣的事情來讀取10個字節:
char buffer[10];
read(STDIN_FILENO, buffer, 10);
記得read()不添加'\0'
終止使它字符串(只是給原始緩衝區)。
要一次讀取1個字節:
char ch;
while(read(STDIN_FILENO, &ch, 1) > 0)
{
//do stuff
}
,不要忘了#include <unistd.h>
,STDIN_FILENO
定義爲在該文件中的宏。
有三個標準POSIX文件描述符,對應於三個標準流,這大概每一道工序都要準備好:
Integer value Name
0 Standard input (stdin)
1 Standard output (stdout)
2 Standard error (stderr)
所以不是STDIN_FILENO
你可以使用0
編輯:
在Linux的系統,你可以找到這個使用下面的命令:
$ sudo grep 'STDIN_FILENO' /usr/include/* -R | grep 'define'
/usr/include/unistd.h:#define STDIN_FILENO 0 /* Standard input. */
通知的註釋/* Standard input. */
爲什麼在聯機幫助頁中,它使用「將嘗試」一詞。是否有任何情況下讀取不會完全讀取由第三個參數指定的字節數?https://linux.die.net/man/3/read – weefwefwqg3 2017-11-13 01:08:28
從man read:
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
輸入參數:
int fd
文件描述符是一個整數,而不是一個文件指針。對於stdin
的文件描述符0
void *buf
指針來緩衝由read
功能來讀取存儲字符size_t count
最大字符數讀
所以,你可以通過字符讀取字符用以下代碼:
char buf[1];
while(read(0, buf, sizeof(buf))>0) {
// read() here read from stdin charachter by character
// the buf[0] contains the character got by read()
....
}
嗯。 'stdin'是一個文件! – 2013-04-08 15:54:16
您可以使用'int fileno(FILE * stream)'首先 – 2013-04-08 15:57:17
謝謝您的評論。答案已更新 – MOHAMED 2013-04-08 15:58:45
- 1. 從stdin反覆讀取EOF
- 2. 從stdin與monkeyrunner讀取
- 3. 從Stdin讀取字符串
- 4. Ruby - 從STDIN讀取CSV
- 5. 從STDIN讀取的腳本
- 6. 從stdin讀取單行
- 7. Python PIL從STDIN讀取PNG
- 8. 從stdin停止讀取
- 9. 從文件讀取或STDIN
- 10. 讀線從STDIN
- 11. 從python重定向stdin讀取文件
- 12. 如何從yii命令讀取stdin
- 13. 從stdin中讀取stderr中的Python
- 14. 從STDIN讀取文件並寫入STDOUT
- 15. 從stderr而不是stdin讀取
- 16. 使用scanf從stdin C讀取文件
- 17. 從ifstream中讀取stdin/cin安全嗎?
- 18. PHP:從套接字或STDIN中讀取
- 19. 設計:從stdin讀取密碼
- 20. 使用proc_open從STDIN管道讀取
- 21. 可選擇從STDIN讀取C
- 22. 如何從stdin讀取一行
- 23. 如何讓rsync從STDIN讀取SRC?
- 24. 從STDIN逐行讀取,無阻塞
- 25. 如何從stdin多次讀取stdin中的數據
- 26. 如何使用讀取功能從終端輸入(stdin)讀取?
- 27. 逐行讀取stdin - php
- 28. c等待stdin讀取?
- 29. 如何異步讀取stdin?
- 30. 無法正確讀取STDIN
你的笑(讀)手冊 – 2013-04-08 15:50:48
閱讀將做到這一點很好,但根據你想要做什麼,你可能會發現,你必須做的不僅僅是調用讀 - 你可以發佈你的代碼,並準確解釋哪一部分你有問題? – 2013-04-08 15:53:27
我同意Mats,你在這裏尋找什麼* excatly *?哪裏有問題? [有](http://stackoverflow.com/questions/9610064/read-stdin-in-c)也有很多不同的[示例](http://stackoverflow.com/questions/7503399/reading-from- stdin-using-read-and-fi-out-the-size-of-the-buffer)如何做到這一點[this on this](http://stackoverflow.com/questions/1237329/read-from-stdin- doesnt-ignore-newline),你在問這個問題之前做了什麼搜索? – Mike 2013-04-08 16:09:40